Changelog
2026-07-06
Changed
| Function | Change |
|---|---|
breakable_kind | values: 11 values → 12 values (+koth) |
2026-06-16
Changed
| Function | Change |
|---|---|
breakable_kind | values: 10 values → 11 values (+soul_bag) |
pickup_kind | values: 9 values → 11 values (+trooper_health, trooper_soul) |
2026-06-12
Added
| Function | Description |
|---|---|
entities.get_xp_orbs | Added to Entity Lists |
get_distance | Added to xp_orb |
get_position | Added to xp_orb |
get_extrapolated_position | Added to xp_orb |
get_velocity | Added to xp_orb |
is_hittable | Added to xp_orb |
get_time_until_hittable | Added to xp_orb |
is_hit | Added to xp_orb |
is_destroyed | Added to xp_orb |
in_screen | Added to xp_orb |
2026-06-09
Added
| Function | Description |
|---|---|
get_kind | Added to base_structure |
get_label | Added to base_structure |
get_health | Added to base_structure |
get_max_health | Added to base_structure |
get_team | Added to base_structure |
get_distance | Added to base_structure |
get_position | Added to base_structure |
is_alive | Added to base_structure |
is_enemy | Added to base_structure |
in_screen | Added to base_structure |
get_health | Added to minion |
get_max_health | Added to minion |
get_team | Added to minion |
get_distance | Added to minion |
get_position | Added to minion |
is_alive | Added to minion |
is_enemy | Added to minion |
in_screen | Added to minion |
get_kind | Added to breakable |
get_label | Added to breakable |
get_subclass_name | Added to breakable |
get_distance | Added to breakable |
get_position | Added to breakable |
is_destroyed | Added to breakable |
in_screen | Added to breakable |
get_kind | Added to pickup |
get_label | Added to pickup |
get_subclass_name | Added to pickup |
get_distance | Added to pickup |
get_position | Added to pickup |
is_destroyed | Added to pickup |
in_screen | Added to pickup |
get_health | Added to minigame |
get_max_health | Added to minigame |
get_state | Added to minigame |
get_state_label | Added to minigame |
is_critical | Added to minigame |
is_hit_window_open | Added to minigame |
get_seconds_to_next_event | Added to minigame |
get_cycle_time | Added to minigame |
get_hit_window | Added to minigame |
get_distance | Added to minigame |
get_position | Added to minigame |
is_destroyed | Added to minigame |
in_screen | Added to minigame |
get_kind | Added to jungle |
get_label | Added to jungle |
get_health | Added to jungle |
get_max_health | Added to jungle |
get_distance | Added to jungle |
get_position | Added to jungle |
is_alive | Added to jungle |
in_screen | Added to jungle |
entities.get_base_structures | Added to Entity Lists |
entities.get_minions | Added to Entity Lists |
entities.get_breakables | Added to Entity Lists |
entities.get_pickups | Added to Entity Lists |
entities.get_minigames | Added to Entity Lists |
entities.get_jungle | Added to Entity Lists |
base_structure_kind | Added to Enums |
breakable_kind | Added to Enums |
pickup_kind | Added to Enums |
jungle_kind | Added to Enums |
vault_state | Added to Enums |
2026-06-08
Added
| Function | Description |
|---|---|
keybinds.get | Added to Keybinds |
keybinds.ability1_key | Added to Keybinds |
keybinds.ability2_key | Added to Keybinds |
keybinds.ability3_key | Added to Keybinds |
keybinds.ability4_key | Added to Keybinds |
keybinds.item1_key | Added to Keybinds |
keybinds.item2_key | Added to Keybinds |
keybinds.item3_key | Added to Keybinds |
keybinds.item4_key | Added to Keybinds |
keybinds.reload_key | Added to Keybinds |
keybinds.parry_key | Added to Keybinds |
keybinds.dash_key | Added to Keybinds |
keybinds.jump_key | Added to Keybinds |
2026-06-04
Added
| Function | Description |
|---|---|
origin | Added to ray |
dir | Added to ray |
target | Added to ray |
length | Added to ray |
raytrace.is_world_loaded | Added to Raytrace |
raytrace.world | Added to Raytrace |
raytrace.sphere | Added to Raytrace |
raytrace.aabb | Added to Raytrace |
raytrace.obb | Added to Raytrace |
raytrace.capsule | Added to Raytrace |
raytrace.triangle | Added to Raytrace |
2026-06-03
Fixed
| Function | Change |
|---|---|
get_items, get_item, get_ability, get_abilities | slot field now reflects the item's current inventory slot live. Previously it was frozen to the slot the item was bought in until the item was sold or rebought. |
Changed
| Field | Change |
|---|---|
depends_on | Now accepts a table of keys ({ "a", "b" }) for multi-parent dependencies, in addition to the existing single-string form. |
depends_value | Now accepts a parallel table of ints. A scalar broadcasts to every parent. Default is 1 per parent. |
Added
- Visibility check for
depends_onis now transitive — if any ancestor in the dependency chain is hidden, descendants are hidden too. - Settings with
depends_onare auto-indented in the UI by dependency-chain depth, matching the visual hierarchy.
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_)
