← back
rust · 24253723
## Base globals
```cpp
struct rust_globals {
uintptr_t il2cpphandle = 0x1017C260; // GameAssembly.dll RVA
uintptr_t base_networkable_static = 0xFCD2240; // static-fields base
uintptr_t main_camera_c = 0xFCB7488; // static-fields base
};
```
## base_networkable
```cpp
struct base_networkable {
uintptr_t static_fields = 0xB8;
uintptr_t wrapper_class_ptr = 0x8;
uintptr_t parent_static_fields = 0x10;
uintptr_t entities = 0x10;
uintptr_t hv_offset = 0x18;
};
```
## camera
```cpp
struct camera {
uintptr_t camera_static = 0xB8;
uintptr_t camera_object = 0x8;
uintptr_t entity = 0x10;
uintptr_t view_matrix = 0x2FC; // Unity native camera state
uintptr_t position = 0x444; // Unity native camera state
uintptr_t field_of_view = 0x170; // Unity native camera state
uintptr_t culling_mask = 0x3E8; // Unity native camera state
};
```
## base_entity
```cpp
struct base_entity {
uintptr_t flags = 0x1B0;
};
```
## base_combat_entity
```cpp
struct base_combat_entity {
uintptr_t lifestate = 0x298;
uintptr_t model = 0x1A8;
uintptr_t _health = 0x2A4;
uintptr_t _maxHealth = 0x2A8;
};
```
## base_player
```cpp
struct base_player {
uintptr_t cl_active_item = 0x568;
uintptr_t player_eyes = 0x5F8;
uintptr_t player_inventory = 0x4D0;
uintptr_t current_team = 0x538;
uintptr_t base_movement = 0x4E0;
uintptr_t player_model = 0x6F0;
uintptr_t player_flags = 0x6B8;
uintptr_t display_name = 0x2D8;
uintptr_t player_input = 0x3A8;
};
```
## player_eyes
```cpp
struct player_eyes {
uintptr_t viewOffset = 0x60;
uintptr_t bodyRotation = 0x50;
uintptr_t worldPosition = 0x0;
};
```
## player_input
```cpp
struct player_input {
uintptr_t bodyAngles = 0x44;
};
```
## player_walk_movement
```cpp
struct player_walk_movement {
uintptr_t GroundAngle = 0x70; // hardcoded — reverify
uintptr_t GroundAngleNew = 0x78; // hardcoded — reverify
uintptr_t GroundTime = 0x80; // hardcoded — reverify
uintptr_t JumpTime = 0x88; // hardcoded — reverify
uintptr_t LandTime = 0x90; // hardcoded — reverify
uintptr_t GravityMultiplier = 0x98; // hardcoded — reverify
uintptr_t TargetMovement = 0x128; // hardcoded — reverify
};
```
## player_model
```cpp
struct player_model {
uintptr_t jawBone = 0xE8;
uintptr_t neckBone = 0xF0;
uintptr_t headBone = 0xF8;
uintptr_t skinnedMultiMesh = 0x448;
uintptr_t position = 0x498; // heuristic — last-pair Vector3
uintptr_t velocity = 0x4FC; // heuristic — last-pair Vector3
};
```
## model
```cpp
struct model {
uintptr_t collision = 0x20;
uintptr_t rootBone = 0x28;
uintptr_t headBone = 0x30;
uintptr_t eyeBone = 0x38;
uintptr_t animator = 0x40;
uintptr_t skeleton = 0x48;
uintptr_t boneTransforms = 0x50;
uintptr_t boneNames = 0x58;
};
```
## player_inventory
```cpp
struct player_inventory {
uintptr_t main = 0x38;
uintptr_t belt = 0x58;
uintptr_t wear = 0x30;
};
```
## item_container
```cpp
struct item_container {
uintptr_t item_list = 0x58;
};
```
## item
```cpp
struct item {
uintptr_t definition = 0x70;
uintptr_t amount = 0xF8;
uintptr_t uid = 0x40;
uintptr_t held_entity = 0x0;
};
```
## item_definition
```cpp
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;
};
```
## world_item
```cpp
struct world_item {
uintptr_t allowPickup = 0x1F0;
uintptr_t item = 0x1F8;
};
```
## held_entity
```cpp
struct held_entity {
uintptr_t viewModel = 0x1F0;
uintptr_t worldModelAnimator = 0x208;
uintptr_t handBone = 0x250;
uintptr_t holdInfo = 0x260;
uintptr_t isBuildingTool = 0x27C;
uintptr_t forcedOwner = 0x280;
uintptr_t hostileScore = 0x29C;
uintptr_t item_owner = 0x230;
uintptr_t ownerItemUID = 0x2D0;
};
```
## base_projectile
```cpp
struct base_projectile {
uintptr_t projectileVelocityScale = 0x37C;
uintptr_t automatic = 0x380;
uintptr_t reloadTime = 0x3C0;
uintptr_t primaryMagazine = 0x3C8;
uintptr_t aimSway = 0x3E8;
uintptr_t aimSwaySpeed = 0x3EC;
uintptr_t recoil = 0x3F0;
uintptr_t aimCone = 0x400;
uintptr_t hipAimCone = 0x404;
uintptr_t aimconePenaltyPerShot = 0x408;
uintptr_t stancePenaltyScale = 0x418;
uintptr_t hasADS = 0x41C;
uintptr_t isBurstWeapon = 0x427;
uintptr_t canChangeFireModes = 0x428;
uintptr_t internalBurstFireRateScale = 0x430;
uintptr_t internalBurstAimConeScale = 0x434;
uintptr_t canUnloadAmmo = 0x3C4;
uintptr_t fractionalReload = 0x3D0;
};
```
## recoil_properties
```cpp
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 useCurves = 0x50;
uintptr_t shotsUntilMax = 0x54;
uintptr_t maxRecoilRadius = 0x58;
uintptr_t overrideAimconeWithCurve = 0x5C;
uintptr_t aimconeCurveScale = 0x60;
uintptr_t aimconeCurve = 0x68;
uintptr_t aimconeProbabilityCurve = 0x70;
uintptr_t newRecoilOverride = 0x80;
};
```
## convar_graphics
```cpp
struct convar_graphics {
uintptr_t type_info = 0x0;
uintptr_t static_fields = 0xB8;
uintptr_t fov = 0x0;
};
```
## BaseNetworkable decryption
Two variants ship on this build. Which one is live depends on the current wrapper's static-fields layout — probe both and take whichever survives the `il2cpp_get_handle` at the tail.
```cpp
// Variant 0 — add / rot-right / add-const / xor
uintptr_t decrypt_base_networkable_0(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);
ecx = ecx + 0xB97F1AE1;
eax = ecx;
ecx = ecx << 0x1D;
eax = eax >> 0x3;
ecx = ecx | eax;
ecx = ecx + 0x32BEE2A5;
ecx = ecx ^ 0xE58A30D8;
*((std::uint32_t*)rdx - 1) = ecx;
--r8d;
} while (r8d);
return il2cpp_get_handle(rax);
}
```
```cpp
// Variant 1 — rot-left / xor / rot-left / xor
uintptr_t decrypt_base_networkable_1(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 << 0xA;
eax = eax >> 0x16;
ecx = ecx | eax;
ecx = ecx ^ 0xF6BF245D;
eax = ecx;
ecx = ecx << 0xF;
eax = eax >> 0x11;
ecx = ecx | eax;
ecx = ecx ^ 0x9BBD4311;
*((std::uint32_t*)rdx - 1) = ecx;
--r8d;
} while (r8d);
return il2cpp_get_handle(rax);
}
```