Changelog
2026-03-25
Changed
| Function | Change |
|---|---|
targeting.compute_aim_delta | params: target:player,bone:int,projectile_speed:float?,speed:float?,position:vec3 → target:player,bone:int,projectile_speed:float?,speed:float?,target:player,position:vec3,projectile_speed:float?,speed:float?,position:vec3 |
2026-03-24
Added
| Function | Description |
|---|---|
get_view_angles | Added to Player Object |
camera.get_position | Added to Camera |
camera.get_view_angles | Added to Camera |
camera.get_forward | Added to Camera |
camera.get_fov | Added to Camera |
camera.get_screen_size | Added to Camera |
camera.world_to_screen | Added to Camera |
Changed
| Function | Change |
|---|---|
get_ability | returns: table → table? |
targeting.compute_aim_delta | params: target:player,bone:int,projectile_speed:float?,speed:float? → target:player,bone:int,projectile_speed:float?,speed:float?,position:vec3 |
slot | values: 8 values → 22 values (+held, zipline, mantle, climb_rope, jump, slide, teleport, zipline_boost, innate1, innate2, innate3, weapon_secondary, weapon_primary, weapon_melee) |
2026-03-23
Added
| Function | Description |
|---|---|
dot | Added to vec2 |
angle_to | Added to vec2 |
dot | Added to vec3 |
cross | Added to vec3 |
angle_to | Added to vec3 |
get_item | Added to Player Object |
is_ability_ready | Added to Player Object |
is_targetable | Added to Player Object |
targeting.find_all_in_range | Added to Targeting |
targeting.smoothness_compensation | Added to Targeting |
print | Added to Global Functions |
wait_until_in_range | Added to Helper Functions |
snap_to_target | Added to Helper Functions |
item_slot_to_key | Added to Helper Functions |
debounce | Added to Helper Functions |
find_closest_by_predicate | Added to Helper Functions |
Changed
| Function | Change |
|---|---|
targeting.compute_aim_delta | params: target:player,bone:int,projectile_speed:float? → target:player,bone:int,projectile_speed:float?,speed:float? |
input.move_mouse | params: delta:vec2,smooth_speed:float? → delta:vec2,speed:float?,detach_factor:float? |
hero_id | values: 44 values → 45 values (+any) |
Removed
| Function | Note |
|---|---|
is_shutting_down | Removed from Global Functions |
wait_for_target | Removed from Helper Functions |
print | Removed from Config |
2026-03-22 (latest)
Renamed
| Before | After |
|---|---|
click_mouse() | left_click() |
targeting.find_closest(fov, max_dist) | targeting.find_closest_by_fov(fov, max_dist) |
p:get_flags() | p:get_modifier_flags() |
p:has_flag(flag) | p:has_modifier_flag(modifier_flag) |
player_flag enum (modifier flags) | modifier_flag enum |
engine_flag enum | player_flag enum |
Added
| Function | Description |
|---|---|
p:get_items() | Get table of item tables with fields: name, subclass, bucket, slot, cooldown |
p:has_item(name) | Check if player has an item by designer name (e.g. "upgrade_burst_fire") |
p:get_item_count() | Get the number of items the player has |
bucket enum | New enum: innate (-1), weapon (0), vitality (1), spirit (2) |
p:has_modifier(name) | Check if a specific modifier is active by exact name string |
p:get_modifier_names() | Get table of all active modifier name strings (requires Modifier List setting) |
p:get_modifier_count() | Get the number of active modifiers on this player |
p:get_active_projectile_speed() | Projectile speed of the currently active ability (falls back to weapon speed) |
input.snap_to(player, bone, speed?) | Convergent flick — iteratively moves to target with fresh camera reads each step. Optional projectile speed for prediction |
p:has_abilities() | Whether abilities are initialized for this player |
p:get_ability(slot) | Get ability table for a slot (works on any player, not just local) |
p:get_abilities() | Get all abilities keyed by slot enum value |
targeting.find_closest_by_distance(max_dist) | Find closest enemy by distance |
p:get_velocity() | Current velocity vector |
p:is_scoped() | Is scoped in |
p:is_in_reload() | Is reloading |
p:is_enemy() | Is an enemy |
p:is_primary_weapon_active() | Primary weapon is active |
p:is_in_melee_attack() | Is in melee attack |
p:is_(player_flag) | Check player flag (see player_flag enum) |
player_flag enum | New enum: onground, ducking, fly, frozen, etc. |
| Multiple scripts per hero | You can now assign more than one script to a hero |
Changed
| Function | Change |
|---|---|
input.move_mouse(vec2, speed?) | Smoothing is now always applied via easing curves (no more raw 1:1 movement). Speed defaults to 1.0 |
Merged
| Before | After |
|---|---|
aim.move_mouse(vec2) / aim.move_mouse_smooth(vec2, speed) | input.move_mouse(vec2, speed?) — pass optional speed (0.01-1.0) for smoothing |
Removed
| Function | Note |
|---|---|
is_shutting_down() | |
precise_sleep(ms) | |
aim.move_mouse_by(x, y) | |
ability.* table | Replaced by p:get_ability(slot) on the player object |
aim.* table | Merged into input as input.move_mouse() and input.snap_to() |
Fixed
shiv.luascript now correctly useshas_modifier_flag(modifier_flag.attached)/modifier_flag.burrowinstead of the wrong table (player_flag)
Notes
get_items()returns a table of tables; each entry hasname(string),subclass(string),bucket(int),slot(int),cooldown(float, percentage 0-100)- Use the
bucketenum to filter items by category (e.g.if item.bucket == bucket.spirit then ...) has_item()matches against the designer name, not the display namehas_modifier()works on all players regardless of settings — pass the exact modifier name (e.g."modifier_citadel_stunned")get_modifier_names()requires the Modifier List HUD setting to be enabled for name strings to be populated- The existing
modifier_flagsystem is unchanged and continues to work alongside the new per-modifier API
Docs
- Clarified
modifier_flagvsplayer_flagenum sections:modifier_flagis for gameplay state (has_modifier_flag),player_flagis for engine entity flags (is_)
