Rust

pinned build 25129251 · 6:06pm (EST) · 11 dumps tracked · updated 2026-09-04 22:06 UTC

Build info

game               = Rust
dump_file          = Rust_offsets_paste.cpp
il2cpphandle       = 0x11E78950
base_networkable   = 0x119536D8
main_camera_c      = 0x1191DB58
structs_on_page    = 60
fields_on_page     = 385
note               = live-verified BN/camera/belt/NR-NS/silent; hashed PWM names omitted

Base globals

inline static constexpr uintptr_t il2cpphandle = 0x11E78950;

struct rust_globals {
    inline static constexpr uintptr_t il2cpphandle            = 0x11E78950; // GameAssembly.dll RVA
    inline static constexpr uintptr_t base_networkable_static = 0x119536D8; // static-fields base
    inline static constexpr uintptr_t main_camera_c           = 0x1191DB58; // static-fields base
};

base_networkable

struct base_networkable {
    inline static constexpr uintptr_t base_networkable     = 0x119536D8;
    inline static constexpr uintptr_t static_fields        =       0xB8;
    inline static constexpr uintptr_t wrapper_class_ptr    =        0x8;
    inline static constexpr uintptr_t parent_static_fields =       0x10;
    inline static constexpr uintptr_t entities             =       0x20;
    inline static constexpr uintptr_t hv_offset            =       0x18;
};

camera

struct camera {
    inline static constexpr uintptr_t main_camera_c = 0x1191DB58;
    inline static constexpr uintptr_t camera_static =       0xB8;
    inline static constexpr uintptr_t camera_object =       0x28;
    inline static constexpr uintptr_t entity        =       0x10;
    inline static constexpr uintptr_t view_matrix   =      0x2FC; //Unity native camera state
    inline static constexpr uintptr_t position      =      0x444; //Unity native camera state
    inline static constexpr uintptr_t field_of_view =      0x170; //Unity native camera state
};

camera_state

struct camera_state {
    // unresolved (omitted): position, rotation, fov, nearPlane, farPlane, aspect
};

base_entity

struct base_entity {
    inline static constexpr uintptr_t bounds = 0x18C;
    inline static constexpr uintptr_t model  = 0x1B8;
    inline static constexpr uintptr_t flags  = 0x1C0;
    // unresolved (omitted): triggers
};

base_combat_entity

struct base_combat_entity {
    inline static constexpr uintptr_t lifestate             = 0x2A8;
    inline static constexpr uintptr_t mark_attacker_hostile = 0x2AE;
    inline static constexpr uintptr_t model                 = 0x1B8;
    inline static constexpr uintptr_t _health               = 0x2B4;
    inline static constexpr uintptr_t _maxHealth            = 0x2B8;
    inline static constexpr uintptr_t skeleton_properties   = 0x230;
};

base_player

struct base_player {
    inline static constexpr uintptr_t display_name     = 0x300;
    inline static constexpr uintptr_t player_rigidbody = 0x350;
    inline static constexpr uintptr_t player_input     = 0x518;
    inline static constexpr uintptr_t player_inventory = 0x7A8;
    inline static constexpr uintptr_t base_movement    = 0x540;
    inline static constexpr uintptr_t current_team     = 0x558;
    inline static constexpr uintptr_t cl_active_item   = 0x588;
    inline static constexpr uintptr_t player_eyes      = 0x7A0;
    inline static constexpr uintptr_t player_flags     = 0x6D8;
    inline static constexpr uintptr_t held_entity      = 0x4B8; // disabledHeldEntity
    inline static constexpr uintptr_t player_model     = 0x5B8;
    inline static constexpr uintptr_t model_state      = 0x4B0; // live — hashed type on BasePlayer
    inline static constexpr uintptr_t mounted          = 0x5E0; // EntityRef
    inline static constexpr uintptr_t metabolism       = 0x3F8;
};

player_eyes

struct player_eyes {
    inline static constexpr uintptr_t viewOffset    = 0x40; //EncryptedValue<Vector3>
    inline static constexpr uintptr_t bodyRotation  = 0x50; //silent-aim write target (NOT eyeRotation)
    inline static constexpr uintptr_t worldPosition = 0x60; //Vector3 — NOT a quaternion
    inline static constexpr uintptr_t eye_rotation  = 0x6C;
};

player_input

struct player_input {
    inline static constexpr uintptr_t rotation   = 0x34;
    inline static constexpr uintptr_t bodyAngles = 0x44;
};

player_walk_movement

struct player_walk_movement {
    // unresolved (omitted): owner, grounded, GravityMultiplier, max_slope, max_angle_climbing, max_angle_sliding, GroundAngle, GroundAngleNew, GroundTime, JumpTime, LandTime, velocity, TargetMovement, flying
};

player_visual_state

struct player_visual_state {
    // unresolved (omitted): isVisible, lastVisible, position
};

base_movement (obfuscated)

struct base_movement {
    inline static constexpr uintptr_t owner     = 0x30; // obfuscated — BasePlayer backref
    inline static constexpr uintptr_t vector3_0 = 0x38; // obfuscated — likely targetMovement / groundNormal
    inline static constexpr uintptr_t vector3_1 = 0x44; // obfuscated — likely the second movement vector
    inline static constexpr uintptr_t single_0  = 0x50; // obfuscated
    inline static constexpr uintptr_t single_1  = 0x54; // obfuscated — first Single after the Vector3 pair
    inline static constexpr uintptr_t single_2  = 0x58; // obfuscated
    inline static constexpr uintptr_t single_3  = 0x5C; // obfuscated
    inline static constexpr uintptr_t single_4  = 0x60; // obfuscated
    // unresolved (omitted): bool_0, single_5
};

model_state

// model_state: CLASS NOT FOUND — no type in this build is named ModelState / Rust.ModelState / PlayerModelState, and the name-search section confirms no class name even CONTAINS "ModelState".  All offsets below are 0; BasePlayer.model_state must stay hand-mapped.
struct model_state {
    // unresolved (omitted): flags, waterFactor, groundAngle, poseType, sleeping, ducked, aiming, onLadder, position, velocity
};

player_model

struct player_model {
    inline static constexpr uintptr_t jawBone          =  0xE8;
    inline static constexpr uintptr_t neckBone         =  0xF0;
    inline static constexpr uintptr_t headBone         =  0xF8;
    inline static constexpr uintptr_t skinnedMultiMesh = 0x398;
    inline static constexpr uintptr_t heldEntity       = 0x390;
    // unresolved (omitted): position, velocity, isNpc
};

model

struct model {
    inline static constexpr uintptr_t collision      = 0x20;
    inline static constexpr uintptr_t rootBone       = 0x28;
    inline static constexpr uintptr_t headBone       = 0x30;
    inline static constexpr uintptr_t eyeBone        = 0x38;
    inline static constexpr uintptr_t animator       = 0x40;
    inline static constexpr uintptr_t skeleton       = 0x48;
    inline static constexpr uintptr_t boneTransforms = 0x50;
    inline static constexpr uintptr_t boneNames      = 0x58;
};

skinned_multi_mesh

struct skinned_multi_mesh {
    inline static constexpr uintptr_t renderers = 0x50;
    // unresolved (omitted): model
};

local_player_static

// local_player_static: CLASS NOT FOUND — LocalPlayer / Rust.LocalPlayer absent this build.  Do NOT use MainCamera's typeinfo.  Resolve the local player via BaseNetworkable entity walk / camera-proximity instead.
struct local_player_static {
    inline static constexpr uintptr_t static_fields = 0xB8;
    // unresolved (omitted): type_info, entity
};

convar_graphics

struct convar_graphics {
    inline static constexpr uintptr_t static_fields = 0xB8;
    // unresolved (omitted): type_info, fov
};

player_inventory + item_container

struct player_inventory {
    inline static constexpr uintptr_t wear = 0x28;
    inline static constexpr uintptr_t main = 0x58;
    inline static constexpr uintptr_t loot = 0x48;
    inline static constexpr uintptr_t belt = 0x78;
};

struct item_container {
    inline static constexpr uintptr_t item_list = 0x68;
    inline static constexpr uintptr_t flags     = 0x74;
};

struct item {
    inline static constexpr uintptr_t definition  = 0x28;
    inline static constexpr uintptr_t amount      = 0x8C;
    inline static constexpr uintptr_t uid         = 0xD0;
    inline static constexpr uintptr_t held_entity = 0x38; //EntityRef (0xB0 on Item is TimeSince)
};

struct item_id {
    inline static constexpr uintptr_t value = 0x10;
};

struct item_definition {
    inline static constexpr uintptr_t itemid      = 0x20;
    inline static constexpr uintptr_t shortname   = 0x28;
    inline static constexpr uintptr_t displayName = 0x40;
    inline static constexpr uintptr_t category    = 0x58;
    inline static constexpr uintptr_t stackable   = 0x78;
    inline static constexpr uintptr_t iconSprite  = 0x50;
    inline static constexpr uintptr_t rarity      = 0x94;
    inline static constexpr uintptr_t condition   = 0xB8;
};

struct item_icon {
    inline static constexpr uintptr_t static_fields = 0xB8;
    inline static constexpr uintptr_t iconImage     = 0xA8;
    // unresolved (omitted): type_info, background, itemRef
};

struct ammo_types {
    inline static constexpr uintptr_t value = 0x10;
};

held_entity + world_item

struct held_entity {
    inline static constexpr uintptr_t viewModel          = 0x200;
    inline static constexpr uintptr_t worldModelAnimator = 0x218;
    inline static constexpr uintptr_t handBone           = 0x260;
    inline static constexpr uintptr_t holdInfo           = 0x270;
    inline static constexpr uintptr_t isBuildingTool     = 0x28C;
    inline static constexpr uintptr_t forcedOwner        = 0x290;
    inline static constexpr uintptr_t hostileScore       = 0x2AC;
    inline static constexpr uintptr_t item_owner         = 0x240;
    inline static constexpr uintptr_t ownerItemUID       = 0x2E0;
};

struct world_item {
    inline static constexpr uintptr_t allowPickup = 0x200;
    inline static constexpr uintptr_t item        = 0x208;
};

base_projectile / recoil / magazine / projectile

struct base_projectile {
    inline static constexpr uintptr_t projectileVelocityScale    = 0x394;
    inline static constexpr uintptr_t automatic                  = 0x398;
    inline static constexpr uintptr_t reloadTime                 = 0x3D8;
    inline static constexpr uintptr_t canUnloadAmmo              = 0x3DC;
    inline static constexpr uintptr_t primaryMagazine            = 0x3E0;
    inline static constexpr uintptr_t fractionalReload           = 0x3E8;
    inline static constexpr uintptr_t aimSway                    = 0x400;
    inline static constexpr uintptr_t aimSwaySpeed               = 0x404;
    inline static constexpr uintptr_t recoil                     = 0x408;
    inline static constexpr uintptr_t aimCone                    = 0x418;
    inline static constexpr uintptr_t hipAimCone                 = 0x41C;
    inline static constexpr uintptr_t aimconePenaltyMax          = 0x424;
    inline static constexpr uintptr_t stancePenaltyScale         = 0x430;
    inline static constexpr uintptr_t hasADS                     = 0x434;
    inline static constexpr uintptr_t isBurstWeapon              = 0x43F;
    inline static constexpr uintptr_t canChangeFireModes         = 0x440;
    inline static constexpr uintptr_t internalBurstFireRateScale = 0x448;
    inline static constexpr uintptr_t internalBurstAimConeScale  = 0x44C;
    inline static constexpr uintptr_t aimconePenaltyPerShot      = 0x420;
    // unresolved (omitted): aimconePenalty, stancePenalty, sightAimConeScale
};

struct recoil_properties {
    inline static constexpr uintptr_t recoilYawMin             = 0x18;
    inline static constexpr uintptr_t recoilYawMax             = 0x1C;
    inline static constexpr uintptr_t recoilPitchMin           = 0x20;
    inline static constexpr uintptr_t recoilPitchMax           = 0x24;
    inline static constexpr uintptr_t timeToTakeMin            = 0x28;
    inline static constexpr uintptr_t timeToTakeMax            = 0x2C;
    inline static constexpr uintptr_t ADSScale                 = 0x30;
    inline static constexpr uintptr_t movementPenalty          = 0x34;
    inline static constexpr uintptr_t clampPitch               = 0x38;
    inline static constexpr uintptr_t pitchCurve               = 0x40;
    inline static constexpr uintptr_t yawCurve                 = 0x48;
    inline static constexpr uintptr_t useCurves                = 0x50;
    inline static constexpr uintptr_t shotsUntilMax            = 0x54;
    inline static constexpr uintptr_t maxRecoilRadius          = 0x58;
    inline static constexpr uintptr_t overrideAimconeWithCurve = 0x5C;
    inline static constexpr uintptr_t aimconeCurveScale        = 0x60;
    inline static constexpr uintptr_t aimconeCurve             = 0x68;
    inline static constexpr uintptr_t aimconeProbabilityCurve  = 0x70;
    inline static constexpr uintptr_t newRecoilOverride        = 0x80;
};

struct magazine {
    inline static constexpr uintptr_t capacity   = 0x18;
    inline static constexpr uintptr_t contents   = 0x1C;
    inline static constexpr uintptr_t ammoType   = 0x20;
    inline static constexpr uintptr_t definition = 0x10;
};

struct projectile {
    inline static constexpr uintptr_t initialVelocity          =  0x28;
    inline static constexpr uintptr_t drag                     =  0x34;
    inline static constexpr uintptr_t gravityModifier          =  0x38;
    inline static constexpr uintptr_t thickness                =  0x3C;
    inline static constexpr uintptr_t initialDistance          =  0x44;
    inline static constexpr uintptr_t initialOrientation       =  0x48;
    inline static constexpr uintptr_t changeInitialOrientation =  0x40;
    inline static constexpr uintptr_t remainInWorld            =  0x54;
    inline static constexpr uintptr_t stickProbability         =  0x58;
    inline static constexpr uintptr_t breakProbability         =  0x5C;
    inline static constexpr uintptr_t conditionLoss            =  0x60;
    inline static constexpr uintptr_t ricochetChance           =  0x64;
    inline static constexpr uintptr_t penetrationPower         =  0x68;
    inline static constexpr uintptr_t penetratesVehicles       =  0x6D;
    inline static constexpr uintptr_t waterIntegrityLoss       =  0x70;
    inline static constexpr uintptr_t damageProperties         =  0x78;
    inline static constexpr uintptr_t damageDistances          =  0x80;
    inline static constexpr uintptr_t damageMultipliers        =  0x88;
    inline static constexpr uintptr_t damageTypes              =  0x90;
    inline static constexpr uintptr_t tumbleSpeed              =  0xCC;
    inline static constexpr uintptr_t swimScale                =  0xF0;
    inline static constexpr uintptr_t swimSpeed                =  0xFC;
    inline static constexpr uintptr_t owner                    = 0x118; //obfuscated — BasePlayer backref
    inline static constexpr uintptr_t projectileID             = 0x130; //obfuscated — first Int32 after owner
    inline static constexpr uintptr_t traveledDistance         = 0x13C; //obfuscated — first Single after owner ints
    inline static constexpr uintptr_t traveledTime             = 0x140; //obfuscated — second Single after owner ints
    inline static constexpr uintptr_t sentPosition             = 0x164; //obfuscated — first Vector3 after owner
    inline static constexpr uintptr_t previousPosition         = 0x170; //obfuscated — second Vector3 (NOT velocity)
    inline static constexpr uintptr_t previousVelocity         = 0x188; //obfuscated — live velocity candidate
    inline static constexpr uintptr_t currentPosition          = 0x164; //alias of sentPosition — live pos write target
    inline static constexpr uintptr_t currentVelocity          = 0x188; //alias of previousVelocity — NOT previousPosition
    // unresolved (omitted): maxDistance
};

Weapon subclasses

struct attack_entity {
    inline static constexpr uintptr_t deployDelay             = 0x2E8;
    inline static constexpr uintptr_t repeatDelay             = 0x2EC;
    inline static constexpr uintptr_t animationDelay          = 0x2F0;
    inline static constexpr uintptr_t effectiveRange          = 0x2F4;
    inline static constexpr uintptr_t npcDamageScale          = 0x2F8;
    inline static constexpr uintptr_t attackLengthMin         = 0x2FC;
    inline static constexpr uintptr_t attackLengthMax         = 0x300;
    inline static constexpr uintptr_t attackSpacing           = 0x304;
    inline static constexpr uintptr_t aiAimSwayOffset         = 0x308;
    inline static constexpr uintptr_t aiAimCone               = 0x30C;
    inline static constexpr uintptr_t aiOnlyInRange           = 0x310;
    inline static constexpr uintptr_t CloseRangeAddition      = 0x314;
    inline static constexpr uintptr_t MediumRangeAddition     = 0x318;
    inline static constexpr uintptr_t LongRangeAddition       = 0x31C;
    inline static constexpr uintptr_t CanUseAtMediumRange     = 0x320;
    inline static constexpr uintptr_t CanUseAtLongRange       = 0x321;
    inline static constexpr uintptr_t recoilCompDelayOverride = 0x338;
    inline static constexpr uintptr_t wantsRecoilComp         = 0x33C;
    inline static constexpr uintptr_t noHeadshots             = 0x33E;
};

struct flint_strike {
    // unresolved (omitted): successFraction, strikeRecoil, sparkFrame
};

struct base_melee {
    inline static constexpr uintptr_t canThrowAsProjectile      = 0x380;
    inline static constexpr uintptr_t canThrowAsEntity          = 0x381;
    inline static constexpr uintptr_t onlyThrowAsProjectile     = 0x384;
    inline static constexpr uintptr_t ThrowFullStack            = 0x385;
    inline static constexpr uintptr_t damageProperties          = 0x388;
    inline static constexpr uintptr_t damageTypes               = 0x390;
    inline static constexpr uintptr_t deployableDamageOverrides = 0x398;
    inline static constexpr uintptr_t maxDistance               = 0x3A0;
    inline static constexpr uintptr_t attackRadius              = 0x3A4;
    inline static constexpr uintptr_t isAutomatic               = 0x3A8;
    inline static constexpr uintptr_t blockSprintOnAttack       = 0x3A9;
    inline static constexpr uintptr_t canUntieCrates            = 0x3AA;
    inline static constexpr uintptr_t strikeFX                  = 0x3B8;
    inline static constexpr uintptr_t useStandardHitEffects     = 0x3C0;
    inline static constexpr uintptr_t aiStrikeDelay             = 0x3C4;
    inline static constexpr uintptr_t swingEffect               = 0x3C8;
    inline static constexpr uintptr_t materialStrikeFX          = 0x3D0;
    inline static constexpr uintptr_t heartStress               = 0x3D8;
    inline static constexpr uintptr_t gathering                 = 0x3E0;
};

struct base_launcher {
    inline static constexpr uintptr_t initialSpeedMultiplier = 0x4C0;
};

struct item_mod_projectile {
    inline static constexpr uintptr_t projectileObject         = 0x20;
    inline static constexpr uintptr_t numProjectiles           = 0x38;
    inline static constexpr uintptr_t projectileSpread         = 0x3C;
    inline static constexpr uintptr_t projectileVelocity       = 0x40;
    inline static constexpr uintptr_t projectileVelocitySpread = 0x44;
    inline static constexpr uintptr_t ammoType                 = 0x30;
    inline static constexpr uintptr_t ammoSubType              = 0x34;
    inline static constexpr uintptr_t useCurve                 = 0x48;
    inline static constexpr uintptr_t spreadScalar             = 0x50;
    inline static constexpr uintptr_t attackEffectOverride     = 0x58;
    inline static constexpr uintptr_t category                 = 0x68;
};

struct item_mod_container {
    inline static constexpr uintptr_t capacity            = 0x30;
    inline static constexpr uintptr_t maxStackSize        = 0x34;
    inline static constexpr uintptr_t containerVolume     = 0x38;
    inline static constexpr uintptr_t canLootInWorld      = 0x3C;
    inline static constexpr uintptr_t maxWeight           = 0x44;
    inline static constexpr uintptr_t containerFlags      = 0x4C;
    inline static constexpr uintptr_t onlyAllowedContents = 0x50;
    inline static constexpr uintptr_t onlyAllowedItemType = 0x58;
    inline static constexpr uintptr_t availableSlots      = 0x60;
    inline static constexpr uintptr_t validItemWhitelist  = 0x68;
};

Storage / loot / gather

struct storage_container {
    inline static constexpr uintptr_t inventorySlots              = 0x320;
    inline static constexpr uintptr_t panelName                   = 0x330;
    inline static constexpr uintptr_t panelTitle                  = 0x338;
    inline static constexpr uintptr_t isLootable                  = 0x32D;
    inline static constexpr uintptr_t isLockable                  = 0x32E;
    inline static constexpr uintptr_t isMonitorable               = 0x32F;
    inline static constexpr uintptr_t dropsLoot                   = 0x324;
    inline static constexpr uintptr_t dropLootDestroyPercent      = 0x328;
    inline static constexpr uintptr_t allowedContents             = 0x340;
    inline static constexpr uintptr_t allowedItem                 = 0x348;
    inline static constexpr uintptr_t maxStackSize                = 0x368;
    inline static constexpr uintptr_t needsBuildingPrivilegeToUse = 0x36C;
    inline static constexpr uintptr_t onlyAcceptCategory          = 0x398;
    inline static constexpr uintptr_t onlyOneUser                 = 0x39C;
    inline static constexpr uintptr_t dropPosition                = 0x380;
    inline static constexpr uintptr_t dropVelocity                = 0x38C;
    // unresolved (omitted): inventory
};

struct loot_container {
    inline static constexpr uintptr_t destroyOnEmpty               = 0x3A8;
    inline static constexpr uintptr_t lootDefinition               = 0x3B0;
    inline static constexpr uintptr_t maxDefinitionsToSpawn        = 0x3B8;
    inline static constexpr uintptr_t minSecondsBetweenRefresh     = 0x3BC;
    inline static constexpr uintptr_t maxSecondsBetweenRefresh     = 0x3C0;
    inline static constexpr uintptr_t initialLootSpawn             = 0x3C4;
    inline static constexpr uintptr_t xpLootedScale                = 0x3C8;
    inline static constexpr uintptr_t scrapAmount                  = 0x3D4;
    inline static constexpr uintptr_t LootSpawnSlots               = 0x3E0;
    inline static constexpr uintptr_t SpawnType                    = 0x3E8;
    inline static constexpr uintptr_t clanScoreEventForFirstLooter = 0x3EC;
    // unresolved (omitted): inventory
};

struct ore_resource_entity {
    inline static constexpr uintptr_t bonusPrefab        = 0x248;
    inline static constexpr uintptr_t finishEffect       = 0x250;
    inline static constexpr uintptr_t bonusFailEffect    = 0x258;
    inline static constexpr uintptr_t useHotspotMinigame = 0x260;
    inline static constexpr uintptr_t bonusSound         = 0x268;
    inline static constexpr uintptr_t heightOffset       = 0x270;
};

struct resource_entity {
    inline static constexpr uintptr_t startHealth         = 0x200;
    inline static constexpr uintptr_t baseProtection      = 0x208;
    inline static constexpr uintptr_t skipDecorComponents = 0x214;
};

struct collectible_entity {
    inline static constexpr uintptr_t itemName                     = 0x200;
    inline static constexpr uintptr_t itemList                     = 0x208;
    inline static constexpr uintptr_t pickupEffect                 = 0x210;
    inline static constexpr uintptr_t xpScale                      = 0x218;
    inline static constexpr uintptr_t suppressGatherRateMultiplier = 0x21C;
};

struct growable_entity {
    inline static constexpr uintptr_t Properties    = 0x348;
    inline static constexpr uintptr_t SourceItemDef = 0x350;
    inline static constexpr uintptr_t state         = 0x358; // obfuscated name — matched by PlantProperties.State type
    inline static constexpr uintptr_t plantSkin     = 0x2E0; // obfuscated name — matched by PlantSkin type
    // unresolved (omitted): genes
};

Traps / turrets / explosives

struct auto_turret {
    inline static constexpr uintptr_t authorizedPlayers = 0x3A8; // obfuscated name — matched by HashSet<System.UInt64> type
    inline static constexpr uintptr_t target            = 0x4A0;
    inline static constexpr uintptr_t sightRange        = 0x4D8;
    inline static constexpr uintptr_t aimCone           = 0x538;
    inline static constexpr uintptr_t targetTrigger     = 0x480;
    inline static constexpr uintptr_t gun_fire_effect   = 0x3F0;
    inline static constexpr uintptr_t bulletEffect      = 0x3F8;
    inline static constexpr uintptr_t bulletSpeed       = 0x400;
    inline static constexpr uintptr_t laserBeam         = 0x420;
    inline static constexpr uintptr_t playAmbientSounds = 0x410;
    // unresolved (omitted): booting, peacekeeper
};

struct gun_trap {
    inline static constexpr uintptr_t gun_fire_effect = 0x3A8;
    inline static constexpr uintptr_t bulletEffect    = 0x3B0;
    inline static constexpr uintptr_t triggeredEffect = 0x3B8;
    inline static constexpr uintptr_t muzzlePos       = 0x3C0;
    inline static constexpr uintptr_t eyeTransform    = 0x3C8;
    inline static constexpr uintptr_t numPellets      = 0x3D0;
    inline static constexpr uintptr_t aimCone         = 0x3D4;
    inline static constexpr uintptr_t sensorRadius    = 0x3D8;
    inline static constexpr uintptr_t ammoType        = 0x3E0;
    inline static constexpr uintptr_t trigger         = 0x3E8;
    // unresolved (omitted): inventory
};

struct flame_turret {
    inline static constexpr uintptr_t upper             = 0x3A8;
    inline static constexpr uintptr_t arc               = 0x3B0;
    inline static constexpr uintptr_t triggeredDuration = 0x3B4;
    inline static constexpr uintptr_t flameRange        = 0x3B8;
    inline static constexpr uintptr_t flameRadius       = 0x3BC;
    inline static constexpr uintptr_t fuelPerSec        = 0x3C0;
    inline static constexpr uintptr_t eyeTransform      = 0x3C8;
    inline static constexpr uintptr_t damagePerSec      = 0x3D0;
    inline static constexpr uintptr_t trigger           = 0x3F0;
};

struct timed_explosive {
    inline static constexpr uintptr_t timerAmountMin         = 0x200;
    inline static constexpr uintptr_t timerAmountMax         = 0x204;
    inline static constexpr uintptr_t minExplosionRadius     = 0x208;
    inline static constexpr uintptr_t explosionRadius        = 0x20C;
    inline static constexpr uintptr_t explodeOnContact       = 0x210;
    inline static constexpr uintptr_t canStick               = 0x211;
    inline static constexpr uintptr_t onlyDamageParent       = 0x213;
    inline static constexpr uintptr_t damageTypes            = 0x278;
    inline static constexpr uintptr_t explosionEffectOffset  = 0x224;
    inline static constexpr uintptr_t explosionMatchesNormal = 0x230;
};

Building / locks / stability / decay

struct building_block {
    inline static constexpr uintptr_t grade          = 0x350;
    inline static constexpr uintptr_t gradeSecondary = 0x354; // obfuscated — second BuildingGrade.Enum slot
    inline static constexpr uintptr_t construction   = 0x318; // obfuscated name — matched by exact Construction type
    inline static constexpr uintptr_t cachedMesh     = 0x360; // obfuscated name — matched by MeshCollider type
    inline static constexpr uintptr_t meshRenderer   = 0x320; // obfuscated name — matched by MeshRenderer type
    inline static constexpr uintptr_t skin           = 0x370; // obfuscated name — matched by ConstructionSkin type
    inline static constexpr uintptr_t CullBushes     = 0x378;
};

struct door {
    inline static constexpr uintptr_t knockEffect    = 0x358;
    inline static constexpr uintptr_t canTakeLock    = 0x360;
    inline static constexpr uintptr_t hasHatch       = 0x361;
    inline static constexpr uintptr_t canTakeCloser  = 0x362;
    inline static constexpr uintptr_t canTakeKnocker = 0x363;
    inline static constexpr uintptr_t canNpcOpen     = 0x364;
    inline static constexpr uintptr_t canHandOpen    = 0x365;
    inline static constexpr uintptr_t isSecurityDoor = 0x366;
    inline static constexpr uintptr_t canReverseOpen = 0x367;
};

struct code_lock {
    inline static constexpr uintptr_t keyEnterDialog    = 0x240;
    inline static constexpr uintptr_t effectUnlocked    = 0x248;
    inline static constexpr uintptr_t effectLocked      = 0x250;
    inline static constexpr uintptr_t effectDenied      = 0x258;
    inline static constexpr uintptr_t effectCodeChanged = 0x260;
    inline static constexpr uintptr_t effectShock       = 0x268;
    inline static constexpr uintptr_t keyCodeEntry      = 0x228; // obfuscated name — matched by KeyCodeEntry type
    inline static constexpr uintptr_t hasCode           = 0x270; // obfuscated — first System.Boolean on CodeLock, VERIFY before use
    // unresolved (omitted): code
};

struct stability_entity {
    inline static constexpr uintptr_t grounded        = 0x308;
    inline static constexpr uintptr_t stability       = 0x30C; // obfuscated — only Single declared on StabilityEntity
    inline static constexpr uintptr_t cachedStability = 0x310; // obfuscated — first Int32 declared on StabilityEntity
};

struct decay_entity {
    inline static constexpr uintptr_t canBeDemolished      = 0x2D0;
    inline static constexpr uintptr_t debrisPrefab         = 0x2D8;
    inline static constexpr uintptr_t debrisRotationOffset = 0x2E0;
    inline static constexpr uintptr_t DebrisPositions      = 0x2F0;
    inline static constexpr uintptr_t timePlaced           = 0x2FC;
    inline static constexpr uintptr_t upkeep               = 0x300; // obfuscated name — matched by Upkeep type (was 'decay'/'buildingPrivilege')
};

struct building_privilege {
    // unresolved (omitted): inventory, authorizedPlayers, protectedMinutes, upkeepPeriodMinutes
};

struct key_lock {
    // unresolved (omitted): keyCode, firstKeyCreated
};

Corpses / sleeping bag

struct base_corpse {
    inline static constexpr uintptr_t prefabRagdoll          = 0x2D0;
    inline static constexpr uintptr_t parentEnt              = 0x2D8;
    inline static constexpr uintptr_t blockDamageIfNotGather = 0x2F0;
    inline static constexpr uintptr_t ragdoll                = 0x2E0; // obfuscated name — matched by Ragdoll type
    inline static constexpr uintptr_t resourceDispenser      = 0x2F8; // obfuscated name — matched by ResourceDispenser type
};

struct lootable_corpse {
    inline static constexpr uintptr_t playerName    = 0x308; // obfuscated — first System.String on LootableCorpse
    inline static constexpr uintptr_t playerSteamID = 0x318; // obfuscated — first System.UInt64 on LootableCorpse
    // unresolved (omitted): containers
};

struct player_corpse {
    inline static constexpr uintptr_t playerName    = 0x308; // obfuscated — first System.String on PlayerCorpse
    inline static constexpr uintptr_t playerSteamID = 0x318; // obfuscated — first System.UInt64 on PlayerCorpse
    inline static constexpr uintptr_t containers    = 0x350;
};

struct sleeping_bag {
    inline static constexpr uintptr_t niceName                 = 0x368;
    inline static constexpr uintptr_t renameDialog             = 0x348;
    inline static constexpr uintptr_t assignDialog             = 0x350;
    inline static constexpr uintptr_t secondsBetweenReuses     = 0x358;
    inline static constexpr uintptr_t perPlayerRespawnCooldown = 0x35C;
    inline static constexpr uintptr_t spawnOffset              = 0x370;
    inline static constexpr uintptr_t respawnCooldowns         = 0x310; // obfuscated name — matched by Dictionary<UInt64,Single> type
    inline static constexpr uintptr_t deployerUserID           = 0x3C0; // obfuscated — first System.UInt64 on SleepingBag
};

Vehicles

struct base_vehicle {
    inline static constexpr uintptr_t mountPoints             = 0x3F0;
    inline static constexpr uintptr_t shouldShowHudHealth     = 0x3B2;
    inline static constexpr uintptr_t ignoreDamageFromOutside = 0x3E4;
    // unresolved (omitted): checkVehicleIsOnGround
};

struct patrol_helicopter {
    inline static constexpr uintptr_t weakspots         = 0x2D0;
    inline static constexpr uintptr_t rotorPivot        = 0x2D8;
    inline static constexpr uintptr_t mainRotor         = 0x2E0;
    inline static constexpr uintptr_t tailRotor         = 0x2F8;
    inline static constexpr uintptr_t rocket_tube_left  = 0x310;
    inline static constexpr uintptr_t rocket_tube_right = 0x318;
    inline static constexpr uintptr_t left_gun_yaw      = 0x320;
    inline static constexpr uintptr_t left_gun_pitch    = 0x328;
    inline static constexpr uintptr_t spotlightTarget   = 0x410;
    inline static constexpr uintptr_t myAI              = 0x3D0; // obfuscated name — matched by PatrolHelicopterAI type
};

struct bradley_apc {
    inline static constexpr uintptr_t viewDistance          = 0x3C4;
    inline static constexpr uintptr_t searchRange           = 0x3C8;
    inline static constexpr uintptr_t engineSound           = 0x2D0;
    inline static constexpr uintptr_t chasisLurchAngleDelta = 0x318;
    inline static constexpr uintptr_t chasisLurchSpeedDelta = 0x31C;
    // unresolved (omitted): targetTrigger
};

Decryption routines

uintptr_t decryption::client_entities(uint64_t a1) {
    if (!driver.read<uint8_t>(a1 + 0x10))
        return 0;
    std::uintptr_t rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t* rdx = (std::uint32_t*)&rax;
    std::uint32_t r8d = 0x2;
    std::uint32_t eax, ecx;
    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        ecx = ecx + 0x7A62B45D;
        ecx = ecx ^ 0xDDF0990B;
        eax = ecx;
        ecx = ecx << 0x1B;
        eax = eax >> 0x5;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

uintptr_t decryption::visiblePlayerList(uint64_t a1) {
    if (!driver.read<uint8_t>(a1 + 0x10))
        return 0;
    std::uintptr_t rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t* rdx = (std::uint32_t*)&rax;
    std::uint32_t r8d = 0x2;
    std::uint32_t eax, ecx;
    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        ecx = ecx + 0x7A62B45D;
        ecx = ecx ^ 0xDDF0990B;
        eax = ecx;
        ecx = ecx << 0x1B;
        eax = eax >> 0x5;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

uintptr_t decryption::entity_list(uint64_t a1) {
    if (!driver.read<uint8_t>(a1 + 0x10))
        return 0;
    std::uintptr_t rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t* rdx = (std::uint32_t*)&rax;
    std::uint32_t r8d = 0x2;
    std::uint32_t eax, ecx;
    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        ecx = ecx ^ 0x18EE70EF;
        eax = ecx;
        ecx = ecx << 0x1;
        eax = eax >> 0x1F;
        ecx = ecx | eax;
        ecx = ecx ^ 0xDF94DFA3;
        ecx = ecx + 0x2A6262F8;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

uintptr_t decryption::clActiveItem(uint64_t a1) {
    std::uintptr_t rax = a1;
    std::uint32_t* rdx = (std::uint32_t*)&rax;
    std::uint32_t r8d = 0x2;
    std::uint32_t eax, ecx;
    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        ecx = ecx ^ 0x537C2A57;
        ecx = ecx + 0xE00025B3;
        eax = ecx;
        ecx = ecx << 0x12;
        eax = eax >> 0xE;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return rax;
}

uintptr_t decryption::PlayerInventory(uint64_t a1) {
    if (!driver.read<uint8_t>(a1 + 0x10))
        return 0;
    std::uintptr_t rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t* rdx = (std::uint32_t*)&rax;
    std::uint32_t r8d = 0x2;
    std::uint32_t eax, ecx;
    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        ecx = ecx ^ 0x599E0586;
        ecx = ecx + 0x4D4857BE;
        ecx = ecx ^ 0x78A90F1F;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

uintptr_t decryption::PlayerEyes(uint64_t a1) {
    if (!driver.read<uint8_t>(a1 + 0x10))
        return 0;
    std::uintptr_t rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t* rdx = (std::uint32_t*)&rax;
    std::uint32_t r8d = 0x2;
    std::uint32_t eax, ecx;
    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        ecx = ecx ^ 0xB48F505B;
        ecx = ecx + 0x57105657;
        ecx = ecx ^ 0xCCA5777B;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

uint32_t decryption::encrypt_fov(float input) {
    uint32_t v = std::bit_cast<uint32_t>(input);
    v = (v << 2) | (v >> 30);
    v ^= 0xBF1B783Du;
    v = (v << 5) | (v >> 27);
    return v;
}

uint32_t decryption::decrypt_fov(uint32_t v) {
    v = (v << 27) | (v >> 5);
    v ^= 0xBF1B783Du;
    v = (v << 30) | (v >> 2);
    return v;
}

// --- PlayerWalkMovement scalar crypts (fingerprint build 24614784) ---
uint32_t decryption::PlayerWalkMovement::encrypt_capsule_height(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value = (value << 4) | (value >> 28);
    value ^= 0x4E67773Du;
    value = (value << 26) | (value >> 6);
    return value;
}

float decryption::PlayerWalkMovement::decrypt_capsule_height(uint32_t value) {
    value = (value << 6) | (value >> 26);
    value ^= 0x4E67773Du;
    value = (value << 28) | (value >> 4);
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_capsule_center(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value ^= 0xA63219C8u;
    value = (value << 10) | (value >> 22);
    value += 0x7983BF63u;
    return value;
}

float decryption::PlayerWalkMovement::decrypt_capsule_center(uint32_t value) {
    value -= 0x7983BF63u;
    value = (value << 22) | (value >> 10);
    value ^= 0xA63219C8u;
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_gravity_multiplier(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value = (value << 6) | (value >> 26);
    value ^= 0x0BF29DB8u;
    value -= 0x14C9A8CCu;
    return value;
}

float decryption::PlayerWalkMovement::decrypt_gravity_multiplier(uint32_t value) {
    value += 0x14C9A8CCu;
    value ^= 0x0BF29DB8u;
    value = (value << 26) | (value >> 6);
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_ground_angle(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value = (value << 10) | (value >> 22);
    value -= 0x75B6E603u;
    value ^= 0x883CD959u;
    value += 0x5EF50FCAu;
    return value;
}

float decryption::PlayerWalkMovement::decrypt_ground_angle(uint32_t value) {
    value -= 0x5EF50FCAu;
    value ^= 0x883CD959u;
    value += 0x75B6E603u;
    value = (value << 22) | (value >> 10);
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_ground_angles_new(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value ^= 0xA89B4487u;
    value += 0x271F08A0u;
    value = (value << 15) | (value >> 17);
    value += 0x35634C3Bu;
    return value;
}

float decryption::PlayerWalkMovement::decrypt_ground_angles_new(uint32_t value) {
    value -= 0x35634C3Bu;
    value = (value << 17) | (value >> 15);
    value -= 0x271F08A0u;
    value ^= 0xA89B4487u;
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_ground_time(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value += 0x5ED8266Au;
    value = (value << 24) | (value >> 8);
    value ^= 0x975CE3D8u;
    value = (value << 22) | (value >> 10);
    return value;
}

float decryption::PlayerWalkMovement::decrypt_ground_time(uint32_t value) {
    value = (value << 10) | (value >> 22);
    value ^= 0x975CE3D8u;
    value = (value << 8) | (value >> 24);
    value -= 0x5ED8266Au;
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_jump_time(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value = (value << 7) | (value >> 25);
    value -= 0x075CBAD0u;
    value = (value << 7) | (value >> 25);
    return value;
}

float decryption::PlayerWalkMovement::decrypt_jump_time(uint32_t value) {
    value = (value << 25) | (value >> 7);
    value += 0x075CBAD0u;
    value = (value << 25) | (value >> 7);
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_land_time(float plain) {
    uint32_t value = std::bit_cast<uint32_t>(plain);
    value ^= 0x5D22278Eu;
    value = (value << 14) | (value >> 18);
    value -= 0x10EB2F11u;
    value = (value << 23) | (value >> 9);
    return value;
}

float decryption::PlayerWalkMovement::decrypt_land_time(uint32_t value) {
    value = (value << 9) | (value >> 23);
    value += 0x10EB2F11u;
    value = (value << 18) | (value >> 14);
    value ^= 0x5D22278Eu;
    return std::bit_cast<float>(value);
}

uint32_t decryption::PlayerWalkMovement::encrypt_sprint_forced(bool plain) {
    uint32_t value = plain ? 1u : 0u;
    value += 0x379EE2C7u;
    value ^= 0x66ECADA2u;
    value += 0x49823E40u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::decrypt_sprint_forced(uint32_t value) {
    value -= 0x49823E40u;
    value ^= 0x66ECADA2u;
    value -= 0x379EE2C7u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::encrypt_grounded(bool plain) {
    uint32_t value = plain ? 1u : 0u;
    value ^= 0x4E950628u;
    value += 0x5025DDFAu;
    value ^= 0xE0887AA0u;
    value -= 0x69094678u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::decrypt_grounded(uint32_t value) {
    value += 0x69094678u;
    value ^= 0xE0887AA0u;
    value -= 0x5025DDFAu;
    value ^= 0x4E950628u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::encrypt_jumping(bool plain) {
    uint32_t value = plain ? 1u : 0u;
    value ^= 0x49358FC0u;
    value = (value << 12) | (value >> 20);
    value ^= 0xA5DCEB94u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::decrypt_jumping(uint32_t value) {
    value ^= 0xA5DCEB94u;
    value = (value << 20) | (value >> 12);
    value ^= 0x49358FC0u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::encrypt_flying(bool plain) {
    uint32_t value = plain ? 1u : 0u;
    value = (value << 10) | (value >> 22);
    value += 0x41C361D3u;
    value = (value << 4) | (value >> 28);
    value += 0x7BA47834u;
    return value;
}

uint32_t decryption::PlayerWalkMovement::decrypt_flying(uint32_t value) {
    value -= 0x7BA47834u;
    value = (value << 28) | (value >> 4);
    value -= 0x41C361D3u;
    value = (value << 22) | (value >> 10);
    return value;
}