- Status
- Offline
- Joined
- Mar 3, 2026
- Messages
- 447
- Reaction score
- 7
Facepunch keeps shifting pointers, so it is time to refresh your headers. If you are tired of chasing offsets after every minor patch, here is a solid breakdown of the current state of Rust's classes and the crucial decryption steps for the entity list. This is the technical meat required to get your RPM/WPM logic back on track.
Global Class Pointers
Essential starting points for any internal or external project digging into the Il2cpp structure:
BasePlayer & Movement
Crucial for ESP and local player manipulation. Note the updated offsets for PlayerInput and BaseMovement.
Weaponry & Projectile Logic
For those tuning recoil compensation or aimcone manipulation:
Decryption Routines
Handling GCHandles and the two-step BaseNetworkable chain is where most developers trip up. Here is the logic for resolving the Il2cpp handles and bypassing the XOR/Shift mutations on the entity list. If you are pasting this, make sure your kernel read wrapper is solid.
Notes on Implementation
Make sure your driver is handling RPM correctly for the GCHandle resolution. The static `GCHandleBase` is the anchor for resolving object handles to actual pointers. If you are seeing zeroed out pointers in your entity loop, double-check your bitmask logic in the `Il2cppGetHandle` implementation. The sky and atmosphere pointers are also included for those doing brightness or night-mode tweaks.
Anyone managed to optimize the entity list loop without hitting the handle limit?
Global Class Pointers
Essential starting points for any internal or external project digging into the Il2cpp structure:
Code:
BaseNetworkable_Class = 0xE4AAA90
MainCamera_Class = 0xE4BACE8
TOD_Sky_Class = 0xE4EF0D8
GCHandleBase = 0xE7DF910
HeldEntityClass = 0xE4BEEA0
BasePlayer & Movement
Crucial for ESP and local player manipulation. Note the updated offsets for PlayerInput and BaseMovement.
- CurrentTeam: 0x4B8
- PlayerModel: 0x500
- DisplayName: 0x668
- PlayerEyes: 0x6F8
- BaseMovement: 0x4A0
- Inventory: 0x730
- ClActiveItem: 0x4E8
- ModelState: 0x660
Weaponry & Projectile Logic
For those tuning recoil compensation or aimcone manipulation:
- RecoilProperties: 0x3A8
- AimCone: 0x3B8
- ProjectileVelocityScale: 0x334
- ReloadTime: 0x378
- RepeatDelay: 0x294
- HipAimCone: 0x3BC
- Automatic: 0x338
Decryption Routines
Handling GCHandles and the two-step BaseNetworkable chain is where most developers trip up. Here is the logic for resolving the Il2cpp handles and bypassing the XOR/Shift mutations on the entity list. If you are pasting this, make sure your kernel read wrapper is solid.
Code:
namespace pub {
// ── Global class pointers ──
constexpr uint64_t BaseNetworkable_Class = 0xE4AAA90; // updated 2026-04-13
constexpr uint64_t MainCamera_Class = 0xE4BACE8; // updated 2026-04-13
constexpr uint64_t TOD_Sky_Class = 0xE4EF0D8; // updated 2026-04-13
constexpr uint64_t GCHandleBase = 0xE7DF910; // updated 2026-04-13
constexpr uint64_t HeldEntityClass = 0xE4BEEA0;
constexpr uint64_t ListComponent_Projectile_Class = 0xE46A190; // updated 2026-04-13
// ── BaseNetworkable chain ──
namespace BN {
constexpr uint64_t PrefabID = 0x30;
constexpr uint64_t StaticField = 0xB8;
constexpr uint64_t ClientEntities = 0x28; // updated
constexpr uint64_t EntityDict = 0x10;
constexpr uint64_t EntityListInner = 0x10;
constexpr uint64_t BufferList = 0x10;
constexpr uint64_t ListCount = 0x18;
} // namespace BN
// ── EntityList / generic List ──
namespace EL {
constexpr uint64_t BaseOffset = 0x10;
constexpr uint64_t SizeOffset = 0x18;
constexpr uint64_t FirstElement = 0x20;
} // namespace EL
namespace List {
constexpr uintptr_t Items = 0x10;
constexpr uintptr_t Size = 0x18;
constexpr uintptr_t First = 0x20;
} // namespace List
// ── ListComponent ──
namespace ListComp {
constexpr uintptr_t InternalList = 0x18;
}
// ── BasePlayer ──
namespace BP {
constexpr uintptr_t CurrentTeam = 0x4B8;
constexpr uintptr_t Flags = 0x630;
constexpr uintptr_t Input = 0x700; // updated 2026-04-13 (player_input)
constexpr uintptr_t PlayerModel = 0x500; // updated 2026-04-13 (player_model)
constexpr uintptr_t DisplayName = 0x668; // updated 2026-04-13 (display_name)
constexpr uintptr_t Inventory = 0x730;
constexpr uintptr_t PlayerEyes = 0x6F8;
constexpr uintptr_t PlayerMovement = 0x4A0; // updated 2026-04-13 (base_movement)
constexpr uintptr_t ClActiveItem = 0x4E8;
constexpr uintptr_t UserID = 0x498; // updated 2026-04-13 (steam_id)
constexpr uintptr_t ClothingBlocksAiming = 0x714;
constexpr uintptr_t ClothingMoveSpeedReduction = 0x718;
constexpr uintptr_t ModelState = 0x660; // updated 2026-04-13 (model_state)
constexpr uintptr_t BaseMovement = 0x4A0; // updated 2026-04-13 (base_movement)
constexpr uintptr_t Metabolism = 0x3A0;
constexpr uintptr_t Blueprints = 0x300;
constexpr uintptr_t WeaponMoveSpeedScale = 0x700;
constexpr uintptr_t EggVision = 0x718;
constexpr uintptr_t VisiblePlayerList = 0x600;
} // namespace BP
// ── ModelState ──
namespace MS {
constexpr uintptr_t Flags = 0x10; // updated 2026-04-13 (model_state::flags)
}
// ── BaseMovement ──
namespace BM {
constexpr uintptr_t TargetMovement = 0x3C;
constexpr uintptr_t GravityMultiplier = 0xB0;
constexpr uintptr_t GroundAngle = 0xF0;
constexpr uintptr_t Flying = 0x198;
} // namespace BM
// ── PlayerInput ──
namespace PIn {
constexpr uintptr_t BodyAngles = 0x44;
}
// ── BaseCombatEntity ──
namespace BCE {
constexpr uintptr_t LifeState = 0x270; // updated
constexpr uintptr_t Health = 0x278; // updated
constexpr uintptr_t MaxHealth = 0x208;
} // namespace BCE
// ── PlayerModel ──
namespace PM {
constexpr uintptr_t IsVisible = 0x94;
constexpr uintptr_t MultiMesh = 0x1F0; // updated 2026-04-13 (skinned_mesh_renderer)
constexpr uintptr_t Position = 0x1F8;
constexpr uintptr_t Velocity = 0x21C;
constexpr uintptr_t Rotation = 0x228;
constexpr uintptr_t IsNpc = 0x3DD;
constexpr uintptr_t InGesture = 0x1E8;
constexpr uintptr_t GestureConfig = 0x270;
constexpr uintptr_t RendererList = 0x4B0;
constexpr uintptr_t HeadBone = 0x48;
constexpr uintptr_t BoneTransforms = 0x60;
constexpr uintptr_t Mode = 0x68;
} // namespace PM
// ── SkinnedMultiMesh ──
namespace SMM {
constexpr uintptr_t Renderers = 0x40; // updated 2026-04-13 (skinned_mesh_renderer::list)
}
// ── Renderer ──
namespace Rend {
constexpr uintptr_t MaterialList = 0x148;
}
// ── ItemContainer ──
namespace IC {
constexpr uintptr_t ItemList = 0x70; // updated from 0x20
constexpr uintptr_t ContainerBelt = 0x28;
constexpr uintptr_t Capacity = 0x14;
} // namespace IC
// ── Item ──
namespace Itm {
constexpr uintptr_t Info = 0x98; // updated (ItemDefinition)
constexpr uintptr_t Amount = 0x94;
constexpr uintptr_t HeldEntity = 0x38; // updated
constexpr uintptr_t HeldEntity1 = 0x68; // updated (heldEntity_2)
constexpr uintptr_t ItemUID = 0x90; // updated
constexpr uintptr_t AmmoCount = 0x20;
constexpr uintptr_t ParentContainer = 0x78;
} // namespace Itm
// ── TranslationPhrase ──
namespace TP {
constexpr uintptr_t English = 0x20;
}
// ── Camera ──
namespace Cam {
constexpr uint64_t StaticField = 0xB8;
constexpr uint64_t Instance = 0xA0; // updated 2026-04-13 (main_camera::instance)
constexpr uint64_t Buffer = 0x10;
constexpr uint64_t ViewMatrix = 0x30C;
} // namespace Cam
// ── Model ──
namespace Mdl {
constexpr uintptr_t Collision = 0x20;
constexpr uintptr_t RootBone = 0x28;
constexpr uintptr_t HeadBone = 0x30;
constexpr uintptr_t EyeBone = 0x38;
constexpr uintptr_t Animator = 0x40;
constexpr uintptr_t Skeleton = 0x48;
constexpr uintptr_t BoneTransforms = 0x50;
constexpr uintptr_t BoneNames = 0x58;
} // namespace Mdl
// ── BaseEntity ──
namespace BE {
constexpr uintptr_t Model = 0xF0;
constexpr uintptr_t Bounds = 0xC0;
constexpr uintptr_t BaseObject = 0x10;
constexpr uintptr_t EntityObject = 0x30;
constexpr uintptr_t Transform = 0x8;
constexpr uintptr_t VisualState = 0x38;
constexpr uintptr_t VSPosition = 0x90;
constexpr uintptr_t BoneTransform = 0x50;
constexpr uintptr_t LifeState = 0x268;
constexpr uintptr_t PrefabId = 0x30;
} // namespace BE
// ── BaseCollision ──
namespace BColl {
constexpr uintptr_t Owner = 0x20;
constexpr uintptr_t Model = 0xF0;
} // namespace BColl
// ── PlayerInventory ──
namespace Inv {
constexpr uintptr_t Loot = 0x48;
constexpr uintptr_t ContainerBelt = 0x58; // updated from 0x28
constexpr uintptr_t ContainerWear = 0x38; // updated from 0x60
constexpr uintptr_t ContainerMain = 0x68; // updated from 0x78
constexpr uintptr_t ItemContainer = 0x38;
} // namespace Inv
// ── ItemDefinition ──
namespace IDef {
constexpr uintptr_t ItemID = 0x20;
constexpr uintptr_t ShortName = 0x28;
constexpr uintptr_t DisplayName = 0x40;
constexpr uintptr_t Category = 0x58;
constexpr uintptr_t ItemMods = 0x170;
} // namespace IDef
// ── Sky ──
namespace Sky {
constexpr uintptr_t CycleHour = 0x10;
}
// ── HackableLockedCrate ──
namespace HLC {
constexpr uintptr_t TimerText = 0x3D0;
}
// ── BuildingBlock ──
namespace BB {
constexpr uintptr_t Grade = 0x318; // updated from 0x328
}
// ── BaseProjectile ──
namespace Wpn {
constexpr uintptr_t DamageScale = 0x32C; // updated
constexpr uintptr_t DistanceScale = 0x330; // updated
constexpr uintptr_t ProjectileVelocityScale = 0x334; // updated
constexpr uintptr_t Automatic = 0x338; // updated
constexpr uintptr_t UsableByTurret = 0x339; // updated
constexpr uintptr_t TurretDamageScale = 0x33C; // updated
constexpr uintptr_t ReloadTime = 0x378; // updated
constexpr uintptr_t CanUnloadAmmo = 0x37C; // updated
constexpr uintptr_t PrimaryMagazine = 0x380; // updated
constexpr uintptr_t FractionalReload = 0x388; // updated
constexpr uintptr_t RepeatDelay = 0x294; // updated
constexpr uintptr_t AimSway = 0x3A0; // updated
constexpr uintptr_t AimSwaySpeed = 0x3A4; // updated
constexpr uintptr_t RecoilProperties = 0x3A8; // updated
constexpr uintptr_t AimconeCurve = 0x3B0; // updated
constexpr uintptr_t AimCone = 0x3B8; // updated
constexpr uintptr_t HipAimCone = 0x3BC; // updated
constexpr uintptr_t AimConePenaltyPerShot = 0x3C0; // updated
constexpr uintptr_t AimConePenaltyMax = 0x3C4; // updated
constexpr uintptr_t StancePenaltyScale = 0x3D0; // updated
constexpr uintptr_t HasADS = 0x3D4; // updated
constexpr uintptr_t NoAimingWhileCycling = 0x3D5; // updated
constexpr uintptr_t ManualCycle = 0x3D6; // updated
constexpr uintptr_t IsBurstWeapon = 0x3DF; // updated
constexpr uintptr_t CanChangeFireModes = 0x3E0; // updated
constexpr uintptr_t InternalBurstRecoilScale = 0x3E4; // updated
constexpr uintptr_t InternalBurstFireRateScale = 0x3E8; // updated
constexpr uintptr_t InternalBurstAimConeScale = 0x3EC; // updated
constexpr uintptr_t NumShotsFired = 0x3F4; // updated
constexpr uintptr_t NoiseRadius = 0x328; // updated
constexpr uintptr_t NoHeadshots = 0x2E6; // updated
constexpr uintptr_t DeployDelay = 0x290; // updated
constexpr uintptr_t Aiming = 0x3B6; // new
constexpr uintptr_t IsReloading = 0x3B8; // new
constexpr uintptr_t SightAimConeScale = 0x3B0; // same
constexpr uintptr_t HipAimConeScale = 0x414; // new
constexpr uintptr_t ViewModelRef = 0x270; // new
constexpr uintptr_t CreatedProjectiles = 0x3F0;
} // namespace Wpn
// ── RecoilProperties ──
namespace Recoil {
constexpr uintptr_t YawMin = 0x18;
constexpr uintptr_t YawMax = 0x1C;
constexpr uintptr_t PitchMin = 0x20;
constexpr uintptr_t PitchMax = 0x24;
constexpr uintptr_t AimconeCurveScale = 0x60;
constexpr uintptr_t OverrideNew = 0x80;
constexpr uintptr_t MovementPenalty = 0x34;
} // namespace Recoil
// ── Projectile ──
namespace Proj {
constexpr uintptr_t Drag = 0x34;
constexpr uintptr_t GravityMod = 0x38;
constexpr uintptr_t Thickness = 0x3C;
constexpr uintptr_t CurrentVelocity = 0x28;
constexpr uintptr_t CurrentPosition = 0x48;
constexpr uintptr_t SentPosition = 0x178;
constexpr uintptr_t Owner = 0x1D8; // updated
constexpr uintptr_t Mod = 0x1D0;
} // namespace Proj
// ── ItemModProjectile ──
namespace IMP {
constexpr uintptr_t Spread = 0x3C;
constexpr uintptr_t Velocity = 0x40;
} // namespace IMP
// ── BaseMelee ──
namespace Melee {
constexpr uintptr_t MaxDistance = 0x338;
constexpr uintptr_t AttackRadius = 0x33C;
constexpr uintptr_t BlockSprintOnAttack = 0x341;
} // namespace Melee
// ── BaseMountable ──
namespace Mount {
constexpr uintptr_t EyePositionOverride = 0x2B8;
constexpr uintptr_t EyeCenterOverride = 0x2C0;
constexpr uintptr_t PitchClamp = 0x2CC;
constexpr uintptr_t YawClamp = 0x2D4;
constexpr uintptr_t CanWieldItems = 0x2DC;
constexpr uintptr_t RelativeViewAngles = 0x2DD;
constexpr uintptr_t MountAnchor = 0x2E8;
constexpr uintptr_t MountLOSVertOffset = 0x2F0;
constexpr uintptr_t MountPose = 0x2F8;
constexpr uintptr_t MaxMountDistance = 0x2FC;
constexpr uintptr_t DismountPositions = 0x300;
constexpr uintptr_t CheckPlayerLosOnMount = 0x308;
constexpr uintptr_t DisableMeshCulling = 0x309;
constexpr uintptr_t AllowHeadLook = 0x30A;
constexpr uintptr_t IgnoreVehicleParent = 0x30B;
constexpr uintptr_t LegacyDismount = 0x30C;
constexpr uintptr_t WearWhileMounted = 0x310;
constexpr uintptr_t ModifiesPlayerCollider = 0x318;
constexpr uintptr_t CustomPlayerCollider = 0x31C;
constexpr uintptr_t ClippingAndVisChecks = 0x334;
constexpr uintptr_t ClippingChecksLocation = 0x338;
constexpr uintptr_t MountSoundDef = 0x340;
constexpr uintptr_t SwapSoundDef = 0x348;
constexpr uintptr_t DismountSoundDef = 0x350;
constexpr uintptr_t DismountHoldType = 0x358;
constexpr uintptr_t EyePosOverride = 0x360;
constexpr uintptr_t MountTimeStatType = 0x370;
constexpr uintptr_t AllowedGestures = 0x374;
constexpr uintptr_t CanDrinkWhileMounted = 0x378;
constexpr uintptr_t AllowSleeperMounting = 0x379;
constexpr uintptr_t AnimateClothInLocal = 0x37A;
constexpr uintptr_t MountedCameraMode = 0x37C;
constexpr uintptr_t RigidBody = 0x380;
constexpr uintptr_t SideLeanAmount = 0x38C;
constexpr uintptr_t Anchor = 0x388;
constexpr uintptr_t IsMobile = 0x389;
} // namespace Mount
// ── IronSights ──
namespace ADS {
constexpr uintptr_t ZoomFactor = 0x2C;
}
// ── BaseViewModel ──
namespace VM {
constexpr uintptr_t UseVMCamera = 0x40;
}
// ── ViewModel ──
namespace VMdl {
constexpr uintptr_t TypeInfo = 0xE453F18; // updated 2026-04-13 (item_icon_c)
constexpr uintptr_t Instance = 0xA8;
constexpr uintptr_t AnimationEvents = 0xA8;
constexpr uintptr_t TargetEntity = 0x28;
constexpr uintptr_t ViewModelPrefab = 0x20;
}
// ── ViewmodelBob ──
namespace VMBob {
constexpr uintptr_t BobSpeedWalk = 0x20;
constexpr uintptr_t BobSpeedRun = 0x24;
constexpr uintptr_t BobAmountWalk = 0x28;
constexpr uintptr_t BobAmountRun = 0x2C;
constexpr uintptr_t LeftOffsetRun = 0x30;
} // namespace VMBob
// ── ViewmodelLower ──
namespace VMLower {
constexpr uintptr_t LowerOnSprint = 0x20;
constexpr uintptr_t LowerWhenCantAttack = 0x21;
} // namespace VMLower
// ── CompoundBowWeapon ──
namespace CompBow {
constexpr uintptr_t StringHoldDurationMax = 0x470;
constexpr uintptr_t StringBonusVelocity = 0x47C;
constexpr uintptr_t CurrentHoldProgress = 0x474;
} // namespace CompBow
// ── FlashbangOverlay ──
namespace Flash {
constexpr uintptr_t PostProcessVolume = 0x20;
constexpr uintptr_t BurnIntensityCurve = 0x28;
constexpr uintptr_t WhiteoutIntensityCurve = 0x30;
constexpr uintptr_t DeafLoopDef = 0x38;
} // namespace Flash
// ── PlayerWalkMovement ──
namespace PWM {
constexpr uintptr_t ZeroFrictionMaterial = 0x60;
constexpr uintptr_t HighFrictionMaterial = 0x68;
constexpr uintptr_t MaxAngleWalking = 0x214;
} // namespace PWM
// ── String ──
namespace Str {
constexpr uintptr_t StringLength = 0x10;
constexpr uintptr_t FirstChar = 0x14;
} // namespace Str
// ── SkinSet ──
namespace SkinS {
constexpr uintptr_t Label = 0x18;
constexpr uintptr_t SkinColour = 0x20;
constexpr uintptr_t HairCollection = 0x28;
constexpr uintptr_t Head = 0x30;
constexpr uintptr_t Torso = 0x38;
constexpr uintptr_t Legs = 0x40;
constexpr uintptr_t Feet = 0x48;
constexpr uintptr_t Hands = 0x50;
constexpr uintptr_t CensoredTorso = 0x58;
constexpr uintptr_t CensoredLegs = 0x60;
constexpr uintptr_t HeadMaterial = 0x68;
constexpr uintptr_t BodyMaterial = 0x70;
constexpr uintptr_t EyeMaterial = 0x78;
} // namespace SkinS
// ── SkinSetCollection ──
namespace SkinSC {
constexpr uintptr_t Skins = 0x18;
}
// ── SkinReplacement ──
namespace SkinR {
constexpr uintptr_t SkinReplacementType = 0x10;
constexpr uintptr_t TargetReplacement = 0x18;
} // namespace SkinR
// ── Skinnable ──
namespace Skn {
constexpr uintptr_t Name = 0x18;
constexpr uintptr_t ItemName = 0x20;
constexpr uintptr_t EntityPrefab = 0x28;
constexpr uintptr_t EntityPrefabName = 0x30;
constexpr uintptr_t ViewmodelPrefab = 0x48;
constexpr uintptr_t ViewmodelPrefabName = 0x50;
constexpr uintptr_t MeshDownloads = 0x58;
constexpr uintptr_t MeshDownloadPaths = 0x60;
constexpr uintptr_t Category = 0x58;
constexpr uintptr_t HideInWorkshopUpload = 0x6C;
constexpr uintptr_t Groups = 0x80;
} // namespace Skn
// ── FOV (ConvarGraphics) ──
constexpr uint64_t ConvarGraphics_Base = 0xE4E2C88; // updated
namespace ConvarGfx {
constexpr uintptr_t FOV = 0x1E4; // updated
}
// ── TOD Sky ──
namespace TodSky {
constexpr uintptr_t Cycle = 0x40;
constexpr uintptr_t Night = 0x60;
constexpr uintptr_t Atmosphere = 0x50;
constexpr uintptr_t Day = 0x58;
constexpr uintptr_t Sun = 0x68;
constexpr uintptr_t Moon = 0x70;
constexpr uintptr_t Stars = 0x78;
constexpr uintptr_t Clouds = 0x80;
constexpr uintptr_t Light = 0x88;
constexpr uintptr_t Fog = 0x90;
constexpr uintptr_t Ambient = 0x98;
constexpr uintptr_t Reflection = 0xA0;
constexpr uintptr_t Initialized = 0xA8;
constexpr uintptr_t Components = 0xB8;
} // namespace TodSky
namespace TodCycle {
constexpr uintptr_t Hour = 0x10;
}
namespace TodNight {
constexpr uintptr_t LightColor = 0x20;
constexpr uintptr_t RayColor = 0x28;
constexpr uintptr_t SkyColor = 0x30;
constexpr uintptr_t CloudColor = 0x38;
constexpr uintptr_t FogColor = 0x40;
constexpr uintptr_t AmbientColor = 0x48;
constexpr uintptr_t LightIntensity = 0x50;
constexpr uintptr_t ShadowStrength = 0x58;
constexpr uintptr_t AmbientMultiplier = 0x60; // updated from 0x5C
constexpr uintptr_t ReflectionMultiplier = 0x64;
} // namespace TodNight
namespace TodAmbient {
constexpr uintptr_t Saturation = 0x14;
}
// ── TOD_AtmosphereParameters ──
namespace TodAtmo {
constexpr uintptr_t RayleighMultiplier = 0x10;
constexpr uintptr_t MieMultiplier = 0x14;
constexpr uintptr_t Brightness = 0x18;
constexpr uintptr_t Contrast = 0x1C;
constexpr uintptr_t Directionality = 0x28;
constexpr uintptr_t Fogginess = 0x2C;
} // namespace TodAtmo
// ── TOD_CloudParameters ──
namespace TodCloud {
constexpr uintptr_t Size = 0x10;
constexpr uintptr_t Opacity = 0x14;
constexpr uintptr_t Coverage = 0x18;
constexpr uintptr_t Sharpness = 0x1C;
constexpr uintptr_t Coloring = 0x20;
constexpr uintptr_t Attenuation = 0x24;
constexpr uintptr_t Saturation = 0x28;
constexpr uintptr_t Scattering = 0x2C;
constexpr uintptr_t Brightness = 0x30;
} // namespace TodCloud
// ── TOD_MoonParameters ──
namespace TodMoon {
constexpr uintptr_t MeshSize = 0x10;
constexpr uintptr_t MeshBrightness = 0x18;
constexpr uintptr_t MeshContrast = 0x20;
constexpr uintptr_t HaloSize = 0x24;
constexpr uintptr_t HaloBrightness = 0x28;
constexpr uintptr_t Position = 0x1F8;
} // namespace TodMoon
// ── PlayerEyes ──
namespace PEyes {
constexpr uintptr_t ViewOffset = 0x40;
constexpr uintptr_t BodyRotation = 0x50;
constexpr uintptr_t EyeOffset = 0x28;
} // namespace PEyes
// ── Weapon extras ──
namespace WpnEx {
constexpr uintptr_t DeployDelay = 0x288;
constexpr uintptr_t SuccessFraction = 0x458; // FlintStrikeWeapon
constexpr uintptr_t AttackReady = 0x458;
constexpr uintptr_t ArrowBack = 0x45C;
constexpr uintptr_t WasAiming = 0x468;
constexpr uintptr_t DidSparkThisFrame = 0x468;
} // namespace WpnEx
// ── HeldEntity ──
namespace HE {
constexpr uintptr_t ViewModel = 0x270;
} // namespace HE
// ── BaseViewModel ──
namespace BVM {
constexpr uintptr_t UseViewModelCamera = 0x40;
constexpr uintptr_t IronSights = 0x90;
} // namespace BVM
// ── Chains (raw pointer chain offsets) ──
namespace Chains {
constexpr uintptr_t BaseNetworkable_Static = 0xB8;
constexpr uintptr_t BufferList = 0x20;
constexpr uintptr_t Camera = 0x78; // updated
constexpr uintptr_t Camera_1 = 0x78;
constexpr uintptr_t Camera_2 = 0x10;
constexpr uintptr_t Camera_Static = 0xB8;
constexpr uintptr_t ClientEntities = 0x10; // updated from 0x38
constexpr uintptr_t EntityList = 0x10;
constexpr uintptr_t GameManager_1 = 0x40;
constexpr uintptr_t TodSky_Step1 = 0xB8;
constexpr uintptr_t TodSky_Step2 = 0xC8;
constexpr uintptr_t TodSky_Step3 = 0x10;
constexpr uintptr_t TodSky_Step4 = 0x20;
} // namespace Chains
// ── ModelState Namespace ──
namespace ModelStateFlags {
constexpr uint32_t Ducked = 1;
constexpr uint32_t Sleeping = 8; // bit 3
constexpr uint32_t Sprinting = 16; // bit 4
constexpr uint32_t OnGround = 4; // bit 2
} // namespace ModelStateFlags
// ── PlayerFlags ──
namespace PlayerFlags {
constexpr uint32_t Ducking = 1;
constexpr uint32_t Sleeping = 16;
constexpr uint32_t Wounded = 64;
constexpr uint32_t Dead = 128;
}
// ── Prefab IDs ──
namespace PrefabIds {
constexpr uint32_t Stone1 = 4124824587U;
constexpr uint32_t Stone2 = 960501790U;
constexpr uint32_t Stone3 = 723721358U;
constexpr uint32_t Stone4 = 266547145U;
constexpr uint32_t Metal1 = 3774647716U;
constexpr uint32_t Metal2 = 3345228353U;
constexpr uint32_t Metal3 = 4225479497U;
constexpr uint32_t Metal4 = 3327726152U;
constexpr uint32_t Sulfur1 = 3058967796U;
constexpr uint32_t Sulfur2 = 152562243U;
constexpr uint32_t Sulfur3 = 2204178116U;
constexpr uint32_t Sulfur4 = 1227527004U;
constexpr uint32_t Wood = 2891219449U;
constexpr uint32_t CollectStone = 2422310333U;
constexpr uint32_t CollectMetal = 4060169083U;
constexpr uint32_t CollectSulfur = 2972237931U;
constexpr uint32_t CollectWood = 2107058515U;
constexpr uint32_t Hemp = 3497054888U;
constexpr uint32_t DroppedItem1 = 545786656U;
constexpr uint32_t DroppedItem2 = 3255145925U;
constexpr uint32_t Bear = 1799741974U;
constexpr uint32_t PolarBear = 749308997U;
constexpr uint32_t Boar = 502341109U;
constexpr uint32_t Chicken = 152398164U;
constexpr uint32_t Stag = 1378621008U;
constexpr uint32_t Wolf = 2288788453U;
constexpr uint32_t Horse = 2626468473U;
} // namespace PrefabIds
} // namespace pub
DECRYPTIONS
// ── GCHandle resolution ──
static uint64_t Il2cppGetHandle(int32_t ObjectHandleID) {
if (ObjectHandleID <= 0) return 0;
uint64_t rdi_1 = (uint64_t)(uint32_t)ObjectHandleID >> 3;
uint64_t rcx_1 = ((uint32_t)ObjectHandleID & 7) - 1;
uint64_t baseAddr = g_GameAssembly + pub::GCHandleBase + 0x28 * rcx_1;
uint32_t limit = Km::Read<uint32_t>(baseAddr + 0x10);
if (rdi_1 < limit) {
uint64_t objAddr = Km::Read<uint64_t>(baseAddr);
uint32_t bitMask = Km::Read<uint32_t>(objAddr + ((rdi_1 >> 5) << 2));
if (testBITD(bitMask, rdi_1 & 0x1f)) {
uint64_t objectArray = Km::Read<uint64_t>(baseAddr + 0x8) + (rdi_1 << 3);
return Km::Read<uint64_t>(objectArray);
}
}
return 0;
}
// BaseNetworkable1 decrypt (first step in entity list chain)
// Updated 2026-04-13: XOR 0x1E7771E, <<6/>>0x1A, sub 0x1118D90C
static uint64_t DecryptEntityList1(uint64_t a1) {
if (!a1 || a1 < 0x10000) return 0;
uintptr_t rax = Km::Read<uintptr_t>(a1 + 0x18);
if (!rax) return 0;
uint32_t* rdx = (uint32_t*)&rax;
uint32_t r8d = 0x2;
do {
uint32_t eax = *(uint32_t*)(rdx);
rdx = (uint32_t*)((uint8_t*)rdx + 0x4);
eax = eax ^ 0x1E7771E;
uint32_t ecx = eax;
eax = eax << 0x6;
ecx = ecx >> 0x1A;
ecx = ecx | eax;
ecx = ecx - 0x1118D90C;
*((uint32_t*)rdx - 1) = ecx;
--r8d;
} while (r8d);
return Il2cppGetHandle(static_cast<int32_t>(rax));
}
// BaseNetworkable2 decrypt (second step in entity list chain)
// Updated 2026-04-13: XOR 0xF651832A, add 0x87D72C46, <<4/>>0x1C
static uint64_t DecryptEntityList2(uint64_t a1) {
if (!a1 || a1 < 0x10000) return 0;
uintptr_t rax = Km::Read<uintptr_t>(a1 + 0x18);
if (!rax) return 0;
uint32_t* rdx = (uint32_t*)&rax;
uint32_t r8d = 0x2;
do {
uint32_t eax = *(uint32_t*)(rdx);
rdx = (uint32_t*)((uint8_t*)rdx + 0x4);
eax = eax ^ 0xF651832A;
eax = eax + 0x87D72C46;
uint32_t ecx = eax;
eax = eax << 0x4;
ecx = ecx >> 0x1C;
ecx = ecx | eax;
*((uint32_t*)rdx - 1) = ecx;
--r8d;
} while (r8d);
return Il2cppGetHandle(static_cast<int32_t>(rax));
}
Notes on Implementation
Make sure your driver is handling RPM correctly for the GCHandle resolution. The static `GCHandleBase` is the anchor for resolving object handles to actual pointers. If you are seeing zeroed out pointers in your entity loop, double-check your bitmask logic in the `Il2cppGetHandle` implementation. The sky and atmosphere pointers are also included for those doing brightness or night-mode tweaks.
Anyone managed to optimize the entity list loop without hitting the handle limit?