Skip to content

Changelog

2026-03-25

Changed

FunctionChange
targeting.compute_aim_deltaparams: 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

FunctionDescription
get_view_anglesAdded to Player Object
camera.get_positionAdded to Camera
camera.get_view_anglesAdded to Camera
camera.get_forwardAdded to Camera
camera.get_fovAdded to Camera
camera.get_screen_sizeAdded to Camera
camera.world_to_screenAdded to Camera

Changed

FunctionChange
get_abilityreturns: table → table?
targeting.compute_aim_deltaparams: target:player,bone:int,projectile_speed:float?,speed:float? → target:player,bone:int,projectile_speed:float?,speed:float?,position:vec3
slotvalues: 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

FunctionDescription
dotAdded to vec2
angle_toAdded to vec2
dotAdded to vec3
crossAdded to vec3
angle_toAdded to vec3
get_itemAdded to Player Object
is_ability_readyAdded to Player Object
is_targetableAdded to Player Object
targeting.find_all_in_rangeAdded to Targeting
targeting.smoothness_compensationAdded to Targeting
printAdded to Global Functions
wait_until_in_rangeAdded to Helper Functions
snap_to_targetAdded to Helper Functions
item_slot_to_keyAdded to Helper Functions
debounceAdded to Helper Functions
find_closest_by_predicateAdded to Helper Functions

Changed

FunctionChange
targeting.compute_aim_deltaparams: target:player,bone:int,projectile_speed:float? → target:player,bone:int,projectile_speed:float?,speed:float?
input.move_mouseparams: delta:vec2,smooth_speed:float? → delta:vec2,speed:float?,detach_factor:float?
hero_idvalues: 44 values → 45 values (+any)

Removed

FunctionNote
is_shutting_downRemoved from Global Functions
wait_for_targetRemoved from Helper Functions
printRemoved from Config

2026-03-22 (latest)

Renamed

BeforeAfter
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 enumplayer_flag enum

Added

FunctionDescription
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 enumNew 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 enumNew enum: onground, ducking, fly, frozen, etc.
Multiple scripts per heroYou can now assign more than one script to a hero

Changed

FunctionChange
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

BeforeAfter
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

FunctionNote
is_shutting_down()
precise_sleep(ms)
aim.move_mouse_by(x, y)
ability.* tableReplaced by p:get_ability(slot) on the player object
aim.* tableMerged into input as input.move_mouse() and input.snap_to()

Fixed

  • shiv.lua script now correctly uses has_modifier_flag(modifier_flag.attached) / modifier_flag.burrow instead of the wrong table (player_flag)

Notes

  • get_items() returns a table of tables; each entry has name (string), subclass (string), bucket (int), slot (int), cooldown (float, percentage 0-100)
  • Use the bucket enum to filter items by category (e.g. if item.bucket == bucket.spirit then ...)
  • has_item() matches against the designer name, not the display name
  • has_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_flag system is unchanged and continues to work alongside the new per-modifier API

Docs

  • Clarified modifier_flag vs player_flag enum sections: modifier_flag is for gameplay state (has_modifier_flag), player_flag is for engine entity flags (is_)