Base globals
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
// 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;
}