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
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
};
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;
};
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
};
struct camera_state {
// unresolved (omitted): position, rotation, fov, nearPlane, farPlane, aspect
};
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
};
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;
};
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;
};
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;
};
struct player_input {
inline static constexpr uintptr_t rotation = 0x34;
inline static constexpr uintptr_t bodyAngles = 0x44;
};
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
};
struct player_visual_state {
// unresolved (omitted): isVisible, lastVisible, position
};
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: 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
};
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
};
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;
};
struct skinned_multi_mesh {
inline static constexpr uintptr_t renderers = 0x50;
// unresolved (omitted): model
};
// 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
};
struct convar_graphics {
inline static constexpr uintptr_t static_fields = 0xB8;
// unresolved (omitted): type_info, fov
};
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;
};
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;
};
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
};
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;
};
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
};
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;
};
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
};
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
};
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
};
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;
}