Changelog#
All notable changes to the Xenon Plugin SDK will be documented in this file.
Format follows Keep a Changelog.
[Unreleased]#
Added#
GetWidowCharge()— Widowmaker sniper scope charge level- Aim Control API — full aim system for plugins, matching the internal aimbot's mechanics:
AimSetDirection(dir)— instantly set the view direction vectorAimGetDirection()— read the current view direction vectorAimSetAngles(pitch, yaw)— instantly set view angles in radiansAimGetAngles()— read current view angles (pitch, yaw) in radiansAimAtPosition(target, stiffness)— aim at a world position with critically-damped spring smoothingAimAtBone(entityIndex, boneId, stiffness)— aim at an entity's bone with spring smoothingAimResetSmoothing()— reset spring velocity (call on target switch)AimHitsHitbox(entityIndex, hitboxScale)— check if current aim intersects entity hitboxes (returns BodySlot or -1)atan2f(y, x)— math helper for angle calculations (was missing from freestanding WASM)
Changed#
aim_to/aim_to_bonehost bindings are now functional (were stubs). Third arg is spring stiffness (0 = instant).- Breaking: Renamed skill fields and functions for accuracy:
PluginEntity.skill1Cd/skill2Cd/skillECd→skill1Active/skill2Active/skill3Active(these are active-state flags, not cooldowns)GetSkill1Cooldown()/GetSkill2Cooldown()/GetSkillECooldown()→IsSkill1Active()/IsSkill2Active()/IsSkill3Active()(now returnbool)- WASM imports renamed:
get_skill1_cooldown→is_skill1_active,get_skill2_cooldown→is_skill2_active,get_skill_e_cooldown→is_skill3_active
Added (previous)#
Entity::GetTotalHealth()— alias forGetHealth()(total HP including all pools)Entity::IsFullHealth()— returns true if health >= maxHealthEntity::GetOverhealth()— returns current overhealth amountEntity::GetArmor()— returns current armorEntity::GetBarrier()— returns current barrierEntity::GetForward()— returns the entity's forward-facing direction vectorEntity::IsTargetable()— returns true if entity can be targeted (not invulnerable/phased)Entity::IsReloading()— returns true if the entity is currently reloadingEntity::GetHitboxCount()— returns the number of hitboxes for this entityEntity::GetHitbox(index, out)— retrieves a single hitbox by indexEntity::GetHitboxes(out, maxCount)— retrieves all hitboxes into a buffer, returns countEntity::GetLerpHistory(out, maxCount)— retrieves server tick position history (newest first)Hitboxstruct — hitbox data with boneIndex, radius, bodySlot, isCapsule, worldPos, capsuleEndLerpEntrystruct — tick + position pair for lerp historyBodySlotnamespace — body region classification constants (Head, Neck, Body, Chest, etc.)PluginEntity.overhealth— overhealth field in raw entity dataPluginEntity.hitboxCount— hitbox count in raw entity dataPluginEntity.isTargetable— targetability flag in raw entity dataPluginEntity.isReloading— reload state flag in raw entity dataPluginEntity.forward— forward direction vector in raw entity dataWeaponInfo.reloading— explicit reload state in weapon infoWeaponInfo.skillBlocked— ability-blocked state in weapon info
Added (previous)#
GetCameraPosition()— returns world-space camera position (extracted from VP matrix)GetCameraForward()— returns normalized camera forward direction (derived from VP matrix)GetViewMatrix(float* out16)— copies the raw 4x4 view-projection matrix (row-major)GetUltCharge()— returns local player ult charge percentage (0-100)IsUltReady()— returns true if ult charge >= 100%IsUltActive()— returns true if ultimate is currently activeIsSkill1Active()/IsSkill2Active()/IsSkill3Active()— returns true if skill is active (renamed fromGetSkill*Cooldown)GetHeroState()— returns bitmask withHeroState::Ulting(0x1) andHeroState::Reloading(0x2)GetRailgunCharge()/GetIllariCharge()/GetHanzoCharge()— hero-specific charge valuesGetLookupSkill(lookupId)— generic skill value lookup by IDSkillIdnamespace with known lookup IDs (UltCharge,SojournCharge,IllariCharge,HanzoCharge,SombraAmmo)HeroStatenamespace with bitmask flags (Ulting,Reloading)Entity::GetUltCharge(),IsUltActive(),IsSkill1Active(),IsSkill2Active(),IsSkill3Active()accessorsGetWeaponInfo(inputFlags, out)— query local player weapon state (valid, useable, shootable, hasGravity, projectile speed)WeaponInfostruct withhasGravityfield andInputFlagconstants (PrimaryFire,SecondaryFire,ScopedShoot,Skill1,Skill2,Ultimate,PrimaryRelease)Color::Lerp(a, b, t)— linear interpolation between colorsColor::HealthGradient(percent, alpha)— red→yellow→green health colorVector3::RotatedY(yaw)— rotate vector around Y axisDraw::TextShadow()— text with 1px shadow for readabilityDraw::TextCentered()— roughly centered text with shadowDraw::RectCorners()— tactical corner bracket rectangleImGui::ColorSliders(label, color)— 4-slider RGBA color pickerConfig::GetColor(key, default)/Config::SetColor(key, color)— load/save Color as 4 int keysIsIngame()— check if currently in a matchGetMapId()— current map identifierGetSensitivity()— in-game mouse sensitivityLogDebug(msg),LogWarning(msg),LogError(msg)— log level wrappers in Core.hppGetCurrentHero()— returns the local player's current hero pool IDEntity::GetBoundsMin()/Entity::GetBoundsMax()— AABB accessor aliases (same as GetDelta1/GetDelta2)Raycast(from, to)— world-space line trace, returnsRaycastResultwith hit position, fraction, and hit flagIsPointVisible(from, to)— quick LOS check between two world points (fraction > 0.98 = visible)IsRaycastReady()— check if the native raycast system is initializedRaycastResultstruct withIsHit()andIsVisible()helpersGameButtonnamespace — game-level button constants (LMouse, RMouse, Jump, Crouch, Skill1, Skill2, Ult, Reload, Melee, etc.)GetClientPing()/GetServerPing()— query current network latency in msPressGameButton(bit)/ReleaseGameButton(bit)— inject game-level button inputs
Changed#
PluginEntity.ultChargenow returns real ult charge for the local player (was always 0)PluginEntity.ultActivenow returns real ult active state (was always 0)PluginEntity.skill1Active/skill2Active/skill3Active.xnow returns 1.0 when skill is active (was always 0; renamed fromskill1Cd/skill2Cd/skillECd)GetCrosshairPosition()now returns screen center instead of(0, 0)IsAimKeyDown()now checks right mouse button instead of returning falseenemy_esp.cpp— refactored to use SDK drawing helpers (removed ~55 lines of local boilerplate)enemy_outlines.cpp— refactored to useColor,ImGui::ColorSliders,Config::GetColor/SetColorenemy_glow_outlines.cpp— refactored to useColor,Config::GetColor/SetColor- Clarified
SetOutlineGlowcomment — it is equivalent toSetOutline, uses the glow import path internally
[1.0.0] — 2026-02-28#
Initial documented release. SDK headers, build system, and examples.
Core#
Log,GetTime,IsKeyDown,ScreenSize,ScreenCenter,WorldToScreen
Entity#
Entityclass with full state queries (health, position, bones, visibility, team)Players()range iterator,LocalPlayer(),GetPlayer(),GetPlayerCount()FindBestTarget(flags),FindBestTargetInFov(fov, bone, flags)CalcAngle,GetHeroName,PredictPosition,GetFovTo,GetScreenOffsetTo,GetClosestBoneInFovSetOutline,SetOutlineGlow+ Visible/Occluded shorthandsTargetFlagsnamespace (Enemy, Team, Visible, LowHP)
Drawing#
Draw::Line,Circle,CircleFilled,Rect,RectFilled,Text,HealthBar
ImGui#
Checkbox,SliderFloat,SliderInt,Combo,CollapsingHeader,Separator,Hotkey
Config#
GetBool,GetFloat,GetInt,SetBool,SetFloat,SetInt,Save
Types#
Vector2,Vector3,Color,Team,EntityTypeBonenamespace (actual game skeleton indices)HeroIdnamespace (all heroes through Jetpack Cat)VKkey constants,OutlineType,PluginFlags
Build#
build.bat— single-file and batch compilation--libraryflag for library plugins- Dependency system with
XENON_PLUGIN_INFO_DEPS