← back rust · 24793719
---

## Base globals

```cpp
inline static constexpr uintptr_t il2cpphandle = 0x87B1C0; // gchandle_get_target FN

struct rust_globals {
    uintptr_t type_info_definition_table = 0x11B6B148;
    uintptr_t base_networkable_static    = 0x1164CC90;
    uintptr_t main_camera_c              = 0x1167EF00;
    uintptr_t local_player_static        = 0x11645DB8;
    uintptr_t convar_graphics            = 0x1167EF50;
    uintptr_t game_manager_static        = 0x11721400;
};
```

## il2cpp exports

```cpp
struct il2cpp_api {
    uintptr_t domain_get              = 0x87AA90;
    uintptr_t domain_get_assemblies   = 0x87AAB0;
    uintptr_t assembly_get_image      = 0x7 8D0;
    uintptr_t class_from_name         = 0x863F60;
    uintptr_t class_get_method_from_name = 0x87A170;
    uintptr_t class_get_fields        = 0x879E90;
    uintptr_t class_get_type          = 0x756000;
    uintptr_t class_get_static_field_data = 0x2960;
    uintptr_t field_get_offset        = 0x809B20;
    uintptr_t gchandle_get_target     = 0x87B1C0;
    uintptr_t gchandle_new            = 0x87B170;
    uintptr_t gchandle_free           = 0x87B260;
    uintptr_t object_new              = 0x87BB00;
    uintptr_t string_new              = 0x87BC20;
    uintptr_t array_new               = 0x879D70;
    uintptr_t resolve_icall           = 0x879D50;
};
```

## Class typeinfo RVAs

```cpp
struct klass_rvas {
    uintptr_t BaseNetworkable = 0x1164CC90;
    uintptr_t BaseEntity      = 0x1164CCA0;
    uintptr_t BaseCombatEntity= 0x116B1310;
    uintptr_t BasePlayer      = 0x116368F0;
    uintptr_t BaseNpc         = 0x116551C0;
    uintptr_t BaseVehicle     = 0x116AB120;
    uintptr_t BuildingBlock   = 0x116A10F8;
    uintptr_t BuildingPrivlidge = 0x1170BDE8;
    uintptr_t Door            = 0x116ABD50;
    uintptr_t WorldItem       = 0x116C6FC0;
    uintptr_t MainCamera      = 0x1167EF00;
    uintptr_t PlayerEyes      = 0x11826EE8;
    uintptr_t PlayerInventory = 0x11826F08;
    uintptr_t PlayerModel     = 0x116FBBD8;
    uintptr_t ModelState      = 0x1169C908;
    uintptr_t PlayerInput     = 0x116890C0;
    uintptr_t BaseProjectile  = 0x1165AD38;
    uintptr_t Projectile      = 0x11B734E0;
    uintptr_t HeldEntity      = 0x11630228;
    uintptr_t BaseViewModel   = 0x11742730;
    uintptr_t PlayerCorpse    = 0x11B79750;
    uintptr_t LootableCorpse  = 0x11B73FC8;
    uintptr_t Item            = 0x116CFC30;
    uintptr_t ItemId          = 0x11630C78;
    uintptr_t TOD_Sky         = 0x116BDDD0;
    uintptr_t ListComponent_Projectile = 0x116C70F8;
};
```

## base_networkable

```cpp
struct base_networkable {
    uintptr_t base_networkable     = 0x1164CC90;
    uintptr_t static_fields        =       0xB8;
    uintptr_t wrapper_class_ptr    =        0x8;
    uintptr_t parent_static_fields =       0x10;
    uintptr_t hv_offset            =       0x18;
    uintptr_t entities             =       0x10;
    uintptr_t buffer_list_array    =       0x10;
    uintptr_t buffer_list_size     =       0x18;
    uintptr_t prefabID             =       0x54;
    uintptr_t prefabName           =       0x88;
    uintptr_t parentEntity         =       0x38;
    uintptr_t children             =       0x68;
    uintptr_t net                  =       0x70;
    uintptr_t globalBroadcast      =       0x58;
    uintptr_t networkRange         =       0x64;
};
```

## camera

```cpp
struct camera {
    uintptr_t main_camera   = 0x1167EF00;
    uintptr_t static_fields =       0xB8;
    uintptr_t camera_object =       0x38; // MOVED from 0x10
    uintptr_t entity        =       0x10;
    uintptr_t position      =      0x444; //Unity native camera state
    uintptr_t viewMatrix    =      0x2FC; //Unity native camera state
    uintptr_t projectionMatrix =   0x18C; //Unity native camera state
    uintptr_t fieldOfView   =      0x170; //Unity native camera state
    uintptr_t aspect        =      0x4E0;
    uintptr_t nearClip      =      0x3EC;
    uintptr_t farClip       =      0x3F8;
    uintptr_t worldToCameraMatrix = 0x70;
    uintptr_t cullingMask   =      0x3E8;
};
```

## base_entity / base_combat_entity

```cpp
struct base_entity {
    uintptr_t bounds       = 0x18C;
    uintptr_t model        = 0x1B8;
    uintptr_t flags        = 0x1C0;
    uintptr_t triggers     =  0xB0;
    uintptr_t position     = 0x118;
    uintptr_t SetFlag_rva  = 0x580EBC0;
};

struct base_combat_entity {
    uintptr_t skeletonProperties  = 0x230;
    uintptr_t baseProtection      = 0x238;
    uintptr_t lifestate           = 0x2A8;
    uintptr_t markAttackerHostile = 0x2AE;
    uintptr_t model               = 0x1B8;
    uintptr_t _health             = 0x2B4;
    uintptr_t _maxHealth          = 0x2B8;
};
```

## base_player

```cpp
struct base_player {
    uintptr_t clActiveItem              = 0x580;
    uintptr_t PlayerEyes                = 0x6E0;
    uintptr_t PlayerInventory           = 0x510;
    uintptr_t current_team              = 0x550;
    uintptr_t movement                  = 0x598;
    uintptr_t player_model              = 0x348;
    uintptr_t playerFlags               = 0x6D0;
    uintptr_t userID                    = 0x718;
    uintptr_t userIDString              = 0x538;
    uintptr_t display_name              = 0x6F0;
    uintptr_t player_input              = 0x340;
    uintptr_t modelState                = 0x5C0;
    uintptr_t mounted                   = 0x5D8;
    uintptr_t Belt                      = 0x3B0;
    uintptr_t _lookingAt                = 0x468;
    uintptr_t weaponMoveSpeedScale      = 0x7B0;
    uintptr_t clothingBlocksAiming      = 0x7B4;
    uintptr_t clothingMoveSpeedReduction= 0x7B8;
    uintptr_t player_rigidbody          = 0x540;
    uintptr_t frozen                    = 0x398;
    uintptr_t currentGesture            = 0x530;
    uintptr_t lastSentTick              = 0x3E8;
    uintptr_t metabolism                = 0x6E8;
    uintptr_t blueprints                = 0x310;
};
```

## ModelState

```cpp
struct model_state {
    uintptr_t flags      = 0x20;
    uintptr_t lookDir    = 0x10;
    uintptr_t waterLevel = 0x38;
};

// flags bits
// ducked 0x1  jumped 0x2  OnGround 0x4  Sleeping 0x8  sprinting 0x10
// onLadder 0x20  Flying 0x40  aiming 0x80  Mounted 0x200
// crawling 0x1000  hasParachute 0x8000
```

## player_eyes / player_input

```cpp
struct player_eyes {
    uintptr_t viewOffset   = 0x40;
    uintptr_t bodyRotation = 0x50; //silent-aim write target
    uintptr_t headAngles   = 0x60;
};

struct player_input {
    uintptr_t state      = 0x28;
    uintptr_t bodyAngles = 0x44;
    uintptr_t yaw        = 0x60;
};
```

## PlayerWalkMovement

```cpp
struct player_walk_movement {
    uintptr_t capsuleHeight        =  0x78;
    uintptr_t capsuleCenter        =  0x80;
    uintptr_t capsuleHeightDucked  =  0x88;
    uintptr_t capsuleCenterDucked  =  0x90;
    uintptr_t gravityMultiplier    =  0xB0;
    uintptr_t maxAngleWalking      =  0xC0;
    uintptr_t maxAngleClimbing     =  0xC8;
    uintptr_t maxAngleSliding      =  0xD0;
    uintptr_t maxStepHeight        =  0xD8;
    uintptr_t body                 =  0xF0;
    uintptr_t capsule              =  0xF8;
    uintptr_t maxVelocity          = 0x100;
    uintptr_t groundAngle          = 0x108;
    uintptr_t groundAngleNew       = 0x110;
    uintptr_t groundTime           = 0x118;
    uintptr_t jumpTime             = 0x120;
    uintptr_t landTime             = 0x128;
    uintptr_t velocity             = 0x130;
    uintptr_t groundNormal         = 0x140;
    uintptr_t sprintForced         = 0x1B0;
    uintptr_t grounded             = 0x1C4;
    uintptr_t climbing             = 0x1CC;
    uintptr_t sliding              = 0x1D4;
    uintptr_t swimming             = 0x1DC;
    uintptr_t jumping              = 0x1EC;
    uintptr_t falling              = 0x1FC;
    uintptr_t flying               = 0x20C;
};

struct movement {
    uintptr_t adminCheat = 0x20;
    uintptr_t Owner      = 0x30;
};
```

## player_model / model / mesh

```cpp
struct player_model {
    uintptr_t _multiMesh      = 0x460; // MOVED from 0x2F0
    uintptr_t collision       =  0xD0;
    uintptr_t fullMask        = 0x208;
    uintptr_t position        = 0x2F8;
    uintptr_t newVelocity     = 0x31C;
    uintptr_t isNpc           = 0x4C0;
    uintptr_t visibleNullable =  0xC4;
};

struct skinned_multi_mesh {
    uintptr_t Renderers = 0x58;
};

struct model {
    uintptr_t rootBone       = 0x28;
    uintptr_t headBone       = 0x30;
    uintptr_t eyeBone        = 0x38;
    uintptr_t boneTransforms = 0x50;
    uintptr_t boneNames      = 0x58;
};

// Bone indices into boneTransforms
// pelvis 0x00  l_hip 0x01  l_knee 0x03  l_foot 0x04
// r_hip  0x0E  r_knee 0x10 r_foot 0x11
// spine2 0x15  spine4 0x17
// l_clavicle 0x18  l_upperarm 0x19  l_forearm 0x1A  l_hand 0x1D
// r_clavicle 0x3C  r_upperarm 0x3D  r_forearm 0x3E  r_hand 0x41
// neck   0x34  head 0x35
```

## Inventory / items

```cpp
struct player_inventory {
    uintptr_t loot          = 0x48;
    uintptr_t containerBelt = 0x38;
    uintptr_t containerMain = 0x58;
    uintptr_t containerWear = 0x60;
};

struct item_container {
    uintptr_t ItemList  = 0x60;
    uintptr_t itemCount = 0x18;
    uintptr_t flags     = 0x44;
};

struct item {
    uintptr_t info       = 0xC0;
    uintptr_t uid        = 0x70;
    uintptr_t amount     = 0x68;
    uintptr_t position   = 0x98;
    uintptr_t ammoCount  = 0x4C;
    uintptr_t HeldEntity = 0x28;
};

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

struct item_icon {
    uintptr_t type_info        = 0x116143F0;
    uintptr_t static_fields    =       0xB8;
    uintptr_t backgroundImage  =       0xE8;
    uintptr_t TryToMove_rva    = 0x41A6FA0;
    uintptr_t RunTimedAction_rva = 0x41BD000;
};
```

## held_entity / view model

```cpp
struct held_entity {
    uintptr_t viewModel            = 0x250;
    uintptr_t worldModelAnimation  = 0x218;
    uintptr_t handBone             = 0x260;
    uintptr_t holdInfo             = 0x270;
    uintptr_t isBuildingTool       = 0x28C;
    uintptr_t forcedOwner          = 0x290;
    uintptr_t hostileScore         = 0x2AC;
    uintptr_t itemOwner            = 0x200;
    uintptr_t ownerItemUID         = 0x2E0;
    uintptr_t _punches             = 0x240;
    uintptr_t viewModel_inner_off  =  0x28;
};

struct base_view_model {
    uintptr_t useViewModelCamera = 0x40;
    uintptr_t model              = 0xD0;
    uintptr_t bob                = 0xE0;
    uintptr_t lower              = 0xF0;
    uintptr_t sway               = 0xC0;
    uintptr_t ironSights         = 0xB0;
};
```

## Weapons / ballistics

```cpp
struct base_projectile {
    uintptr_t aimCone                    = 0x410;
    uintptr_t hipAimCone                 = 0x414;
    uintptr_t aimSway                    = 0x3F8;
    uintptr_t aimSwaySpeed               = 0x3FC;
    uintptr_t recoil                     = 0x400;
    uintptr_t projectileVelocityScale    = 0x38C;
    uintptr_t automatic                  = 0x390;
    uintptr_t reloadTime                 = 0x3D0;
    uintptr_t primaryMagazine            = 0x3D8;
    uintptr_t fractionalReload           = 0x3E0;
    uintptr_t aimconeCurve               = 0x408;
    uintptr_t aimconePenaltyPerShot      = 0x418;
    uintptr_t aimConePenaltyMax          = 0x41C;
    uintptr_t aimconePenaltyRecoverTime  = 0x420;
    uintptr_t aimconePenaltyRecoverDelay = 0x424;
    uintptr_t stancePenaltyScale         = 0x428;
    uintptr_t hasADS                     = 0x42C;
    uintptr_t noAimingWhileCycling       = 0x42D;
    uintptr_t manualCycle                = 0x42E;
    uintptr_t needsCycle                 = 0x434;
    uintptr_t isBurstWeapon              = 0x437;
    uintptr_t canChangeFireModes         = 0x438;
    uintptr_t internalBurstFireRateScale = 0x440;
    uintptr_t internalBurstAimConeScale  = 0x444;
    uintptr_t stancePenalty              = 0x450;
    uintptr_t aimconePenalty             = 0x458;
    uintptr_t cachedModHash              = 0x468;
    uintptr_t sightAimConeScale          = 0x46C;
    uintptr_t sightAimConeOffset         = 0x470;
    uintptr_t hipAimConeScale            = 0x474;
    uintptr_t hipAimConeOffset           = 0x478;
    uintptr_t isReloading                = 0x47C;
    uintptr_t ShotFired_rva              = 0x6E64230;
    uintptr_t SetAmmoCount_rva           = 0x6E641C0;
    uintptr_t BeginCycle_rva             = 0x6E67820;
};

struct recoil_properties {
    uintptr_t recoilYawMin                     = 0x18;
    uintptr_t recoilYawMax                     = 0x1C;
    uintptr_t recoilPitchMin                   = 0x20;
    uintptr_t recoilPitchMax                   = 0x24;
    uintptr_t timeToTakeMin                    = 0x28;
    uintptr_t timeToTakeMax                    = 0x2C;
    uintptr_t ADSScale                         = 0x30;
    uintptr_t movementPenalty                  = 0x34;
    uintptr_t clampPitch                       = 0x38;
    uintptr_t pitchCurve                       = 0x40;
    uintptr_t yawCurve                         = 0x48;
    uintptr_t overrideAimconeWithCurve         = 0x5C;
    uintptr_t aimconeCurveScale                = 0x60;
    uintptr_t aimconeProbabilityCurve          = 0x70;
    uintptr_t ammoAimconeScaleMultiProjectile  = 0x78;
    uintptr_t ammoAimconeScaleSingleProjectile = 0x7C;
    uintptr_t newRecoilOverride                = 0x80;
};

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

struct projectile {
    uintptr_t initialVelocity       =  0x28;
    uintptr_t drag                  =  0x34;
    uintptr_t gravityModifier       =  0x38;
    uintptr_t thickness             =  0x3C;
    uintptr_t initialDistance       =  0x44;
    uintptr_t currentPosition       =  0x48;
    uintptr_t swimScale             =  0xF0;
    uintptr_t swimSpeed             =  0xFC;
    uintptr_t currentVelocity       =  0xD0;
    uintptr_t hitTest               = 0x108;
    uintptr_t mod                   = 0x110;
    uintptr_t owner                 = 0x118;
    uintptr_t projectileID          =  0x20;
    uintptr_t traveledDistance      = 0x13C;
    uintptr_t traveledTime          = 0x140;
    uintptr_t previousTraveledTime  = 0x158;
    uintptr_t sentPosition          = 0x15C;
    uintptr_t previousPosition      = 0x168;
    uintptr_t previousVelocity      = 0x180;
    uintptr_t maxDistance           = 0x1A4;
    uintptr_t sourceProjectilePrefab= 0x1D8;
};

struct item_mod_projectile {
    uintptr_t projectileObject         = 0x20;
    uintptr_t ammoType                 = 0x30;
    uintptr_t projectileSpread         = 0x3C;
    uintptr_t projectileVelocity       = 0x40;
    uintptr_t projectileVelocitySpread = 0x44;
    uintptr_t useCurve                 = 0x48;
    uintptr_t spreadScalar             = 0x50;
    uintptr_t category                 = 0x68;
};

struct base_melee {
    uintptr_t damageProperties     = 0x388;
    uintptr_t maxDistance          = 0x3A0;
    uintptr_t attackRadius         = 0x3A4;
    uintptr_t blockSprintOnAttack  = 0x3A9;
    uintptr_t gathering            = 0x3E0;
    uintptr_t canThrowAsProjectile = 0x380;
};

struct base_launcher {
    uintptr_t initialSpeedMultiplier = 0x4B8;
};

struct attack_entity {
    uintptr_t repeatDelay    = 0x2EC;
    uintptr_t nextAttackTime = 0x340;
};

struct flint_strike {
    uintptr_t successFraction   = 0x4B8;
    uintptr_t strikeRecoil      = 0x4C0;
    uintptr_t _didSparkThisFrame= 0x4C8;
};

struct hit_test {
    uintptr_t type            = 0xA4;
    uintptr_t attackray       = 0xB8;
    uintptr_t rayhit          = 0x40;
    uintptr_t damageproperties= 0xB0;
    uintptr_t gameobject      = 0x38;
    uintptr_t collider        = 0x28;
    uintptr_t hittransform    = 0x88;
    uintptr_t hitpart         = 0x80;
    uintptr_t hitdistance     = 0x90;
    uintptr_t radius          = 0xAC;
    uintptr_t didhit          = 0xA0;
    uintptr_t hitpoint        = 0x18;
    uintptr_t hitnormal       = 0x6C;
    uintptr_t hitentity       = 0x78;
    uintptr_t ignoreentity    = 0xD0;
};
```

## Storage / loot / gather

```cpp
struct storage_container {
    uintptr_t inventorySlots              = 0x320;
    uintptr_t dropsLoot                   = 0x324;
    uintptr_t dropLootDestroyPercent      = 0x328;
    uintptr_t isLootable                  = 0x32D;
    uintptr_t isLockable                  = 0x32E;
    uintptr_t isMonitorable               = 0x32F;
    uintptr_t panelName                   = 0x330;
    uintptr_t panelTitle                  = 0x338;
    uintptr_t allowedContents             = 0x340;
    uintptr_t allowedItem                 = 0x348;
    uintptr_t maxStackSize                = 0x368;
    uintptr_t needsBuildingPrivilegeToUse = 0x36C;
    uintptr_t dropPosition                = 0x380;
    uintptr_t dropVelocity                = 0x38C;
    uintptr_t onlyAcceptCategory          = 0x398;
    uintptr_t onlyOneUser                 = 0x39C;
};

struct loot_container {
    uintptr_t destroyOnEmpty               = 0x3A8;
    uintptr_t lootDefinition               = 0x3B0;
    uintptr_t maxDefinitionsToSpawn        = 0x3B8;
    uintptr_t minSecondsBetweenRefresh     = 0x3BC;
    uintptr_t maxSecondsBetweenRefresh     = 0x3C0;
    uintptr_t initialLootSpawn             = 0x3C4;
    uintptr_t xpLootedScale                = 0x3C8;
    uintptr_t scrapAmount                  = 0x3D4;
    uintptr_t LootSpawnSlots               = 0x3E0;
    uintptr_t SpawnType                    = 0x3E8;
    uintptr_t clanScoreEventForFirstLooter = 0x3EC;
};

struct hackable_locked_crate {
    uintptr_t hackSeconds = 0x410;
    uintptr_t timerText   = 0x400;
};

struct ore_resource_entity {
    uintptr_t bonusPrefab        = 0x258;
    uintptr_t finishEffect       = 0x260;
    uintptr_t bonusFailEffect    = 0x268;
    uintptr_t useHotspotMinigame = 0x270;
    uintptr_t bonusSound         = 0x278;
    uintptr_t heightOffset       = 0x280;
};

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

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

struct growable_entity {
    uintptr_t Properties    = 0x348;
    uintptr_t SourceItemDef = 0x350;
    uintptr_t state         = 0x358;
    uintptr_t plantSkin     = 0x338;
};

struct world_item {
    uintptr_t allowPickup = 0x200;
    uintptr_t item        = 0x208;
};
```

## Traps / turrets / explosives

```cpp
struct auto_turret {
    uintptr_t authorizedPlayers = 0x3C8;
    uintptr_t lastYawRotation   = 0x440;
    uintptr_t muzzlePos         = 0x4B0;
    uintptr_t gun_yaw           = 0x4C8;
    uintptr_t gun_pitch         = 0x4D0;
    uintptr_t sightRange        = 0x4D8;
};

struct gun_trap {
    uintptr_t gunfireeffect   = 0x3A8;
    uintptr_t bulletEffect    = 0x3B0;
    uintptr_t triggeredEffect = 0x3B8;
    uintptr_t muzzlePos       = 0x3C0;
    uintptr_t eyeTransform    = 0x3C8;
    uintptr_t numPellets      = 0x3D0;
    uintptr_t aimCone         = 0x3D4;
    uintptr_t sensorRadius    = 0x3D8;
    uintptr_t ammoType        = 0x3E0;
    uintptr_t trigger         = 0x3E8;
};

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

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

## Corpses / vehicles

```cpp
struct player_corpse {
    uintptr_t playerSteamID  = 0x318;
    uintptr_t playerName     = 0x320;
    uintptr_t clientClothing = 0x350;
};

struct lootable_corpse {
    uintptr_t playerSteamID = 0x318;
    uintptr_t _playerName   = 0x320;
};

struct base_vehicle {
    uintptr_t mountPoints             = 0x3F0;
    uintptr_t shouldShowHudHealth     = 0x3B2;
    uintptr_t ignoreDamageFromOutside = 0x3E4;
};

struct base_mountable {
    uintptr_t pitchClamp    = 0x2FC;
    uintptr_t yawClamp      = 0x304;
    uintptr_t canWieldItems = 0x30C;
};

struct patrol_helicopter {
    uintptr_t weakspots         = 0x2D0;
    uintptr_t rotorPivot        = 0x2D8;
    uintptr_t mainRotor         = 0x2E0;
    uintptr_t tailRotor         = 0x2F8;
    uintptr_t rocket_tube_left  = 0x310;
    uintptr_t rocket_tube_right = 0x318;
    uintptr_t left_gun_yaw      = 0x320;
    uintptr_t left_gun_pitch    = 0x328;
    uintptr_t myAI              = 0x3B8;
    uintptr_t spotlightTarget   = 0x410;
};

struct bradley_apc {
    uintptr_t engineSound           = 0x2D0;
    uintptr_t chasisLurchAngleDelta = 0x318;
    uintptr_t chasisLurchSpeedDelta = 0x31C;
    uintptr_t viewDistance          = 0x3C4;
    uintptr_t searchRange           = 0x3C8;
};
```

## Unity / containers

```cpp
struct unity_object      { uintptr_t m_CachedPtr = 0x10; };
struct unity_component   { uintptr_t game_object = 0x20; };
struct unity_string      { uintptr_t length = 0x10; uintptr_t first_char = 0x14; };

struct unity_game_object {
    uintptr_t components               = 0x20;
    uintptr_t component_count          = 0x30;
    uintptr_t component_stride         = 0x10;
    uintptr_t component_ptr_in_entry   =  0x8;
    uintptr_t component_handle_in_native = 0x18;
};

struct unity_transform {
    uintptr_t indirect_ptr_off = 0x28;
    uintptr_t world_pos_off    = 0x90;
};

struct system_list {
    uintptr_t array               = 0x10;
    uintptr_t size                = 0x18;
    uintptr_t array_first_element = 0x20;
};

struct dictionary {
    uintptr_t entries = 0x18;
    uintptr_t count   = 0x20;
    // entry: hashCode 0x0, key 0x8, value 0x10, stride 0x18
    // array: length 0x18, data 0x20
};

struct convar_graphics {
    uintptr_t type_info = 0x1167EF50;
    uintptr_t instance  =       0xB8;
    uintptr_t _fov      =      0x100;
};

struct local_player_static {
    uintptr_t local_player  = 0x11645DB8;
    uintptr_t static_fields =       0xB8;
    uintptr_t entity        =        0x0;
};
```

---

## Decryption routines

Every routine changed **shape** this build. The previous `xor/add/xor/sub`
chains are gone — all five are now `rotate / xor / rotate` (PlayerEyes uses an
**add** where the others use xor). The `+0x10` gate is also gone; these read
`+0x18` directly.

```cpp
// client_entities — rol 27, xor 0xD12F9B81, rol 5
uintptr_t decryption::client_entities(uint64_t a1)
{
    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);
        eax = ecx;
        ecx = ecx << 0x1B;
        eax = eax >> 0x5;
        ecx = ecx | eax;
        ecx = ecx ^ 0xD12F9B81;
        eax = ecx;
        ecx = ecx << 0x5;
        eax = eax >> 0x1B;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

// entity_list — rol 15, xor 0xE2181B93, rol 8
uintptr_t decryption::entity_list(uint64_t a1)
{
    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);
        eax = ecx;
        ecx = ecx << 0xF;
        eax = eax >> 0x11;
        ecx = ecx | eax;
        ecx = ecx ^ 0xE2181B93;
        eax = ecx;
        ecx = ecx << 0x8;
        eax = eax >> 0x18;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

// clActiveItem — rol 9, xor 0x1BD156A0, rol 20  (value in place, no handle)
uintptr_t decryption::clActiveItem(uint64_t a1)
{
    std::uint32_t* rdx = (std::uint32_t*)&a1;
    std::uint32_t r9d = 0x2;
    std::uint32_t eax, edx;
    do {
        edx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        edx = (edx << 0x9) | (edx >> 0x17);
        edx = edx ^ 0x1BD156A0;
        edx = (edx << 0x14) | (edx >> 0xC);
        *((std::uint32_t*)rdx - 1) = edx;
        --r9d;
    } while (r9d);
    return a1;
}

// PlayerInventory — rol 4, xor 0x9C994DA2, rol 6
uintptr_t decryption::PlayerInventory(uint64_t a1)
{
    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);
        eax = ecx;
        ecx = ecx << 0x4;
        eax = eax >> 0x1C;
        ecx = ecx | eax;
        ecx = ecx ^ 0x9C994DA2;
        eax = ecx;
        ecx = ecx << 0x6;
        eax = eax >> 0x1A;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

// PlayerEyes — rol 9, ADD 0x2915FB8C, rol 19   (note: add, not xor)
uintptr_t decryption::PlayerEyes(uint64_t a1)
{
    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);
        eax = ecx;
        ecx = ecx << 0x9;
        eax = eax >> 0x17;
        ecx = ecx | eax;
        ecx = ecx + 0x2915FB8C;
        eax = ecx;
        ecx = ecx << 0x13;
        eax = eax >> 0xD;
        ecx = ecx | eax;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp_get_handle(rax);
}

// FOV
inline uint32_t decryption::decrypt_fov(uint32_t val) {
    val -= 0xEC8CD6E;
    val = (val << 0x2) | (val >> 0x1E);
    val -= 0x4703126B;
    return val;
}

inline uint32_t decryption::encrypt_fov(uint32_t val) {
    val += 0x4703126B;
    val = (val >> 0x2) | (val << 0x1E);
    val += 0xEC8CD6E;
    return val;
}
```