# RigProbe findings Captured with RigProbe v0.3.0 on 2026-09-24. ## Player - Animation root: `LocalPlayer/PlayerAnimator/Root`, skeleton starts at `Hips` - Animator is Generic, not Humanoid (`PlayerAControllerGenerated`, 12 layers, 271 parameters). No character in the game uses a Humanoid avatar, so Unity retargeting is not available and body swaps need a manual bone map. - The visible body is head + arms (race system) + clothing (clothing system). There is no base body mesh. - Head has 2 expression blendshapes: 0 Angry, 1 Scared. `ExpressionBlendsStartIndex` is 0. - `SkinnedMeshBoneRemapCache` (Endnight.Animation) retargets meshes onto the player rig by bone path. ## Races `PlayerRaceSystem._races` holds 8 entries, applied by list index. Entry 6 (asset `BlackBRace`) has its race field set to `BlackA`, but it has its own head and works correctly in game. | Index | Race | Asset | Head GUID | Arms GUID | |---|---|---|---|---| | 0 | White | WhiteRace | c6b5d71936b7773418409c28fbedc0a4 | 3886900e0d13c3d4f97a4795c8d0f0bb | | 1 | Black | BlackRace | 091aa8cb2ce206441b1ff4d1a3c02ab9 | 7b273beb092763143bab57f876dce75d | | 2 | Latin | LatinRace | c60e9927531d33745b61950677621768 | dca5d9c41251d324e9af4c916f91a049 | | 3 | Asian | AsianRace | a90a307a8c0607c40b68d376074715df | 3ce89e7484ac88244b1df4b6ae8a4c6f | | 4 | BlackA | BlackARace | ff992ec27e7740142a305730e65ec46a | 7b273beb092763143bab57f876dce75d | | 5 | WhiteA | WhiteARace | c67c50b0bbf49e244bb0d2ac839d9b69 | 3886900e0d13c3d4f97a4795c8d0f0bb | | 6 | BlackB | BlackBRace | 2a66a9d5f2b53cc4185d37f4b8a59b37 | b1e878151ef75294687db0e618ec4844 | | 7 | LatinA | LatinARace | 65c86538006018140835657ca528e0c1 | b1cd63fc76d99f94694fe1fc73e67f9a | ## Clothing Defaults are TacticalJacket, TacticalPants, TacticalBoots and Backpack. | Item | Asset | Slots | |---|---|---| | 402 | Backpack | Back | | 444 | TacticalRebreather | Back | | 487 | SilkPyjamas | Torso, Legs, Feet, Overcoat | | 489 | TacticalPants | Legs | | 490 | Hoodie | Torso, Overcoat | | 491 | OldJacket | Torso, Overcoat | | 492 | Tuxedo | Torso, Legs, Feet, Overcoat | | 493 | LeatherJacket | Torso, Overcoat | | 495 | TacticalJacket | Torso, Overcoat | | 499 | Wetsuit | Torso, Legs, Feet, Overcoat | | 500 | PuffyJacket | Overcoat | | 501 | TacticalBoots | Feet | | 572 | GoldenArmour | Head, Torso, Legs, Hands, Feet, Overcoat | | 639 | SpaceSuit | Torso, Legs, Feet, Overcoat | | 703 | PriestOutfit | Torso, Legs, Feet, Overcoat | | 749 | FlightAttendantUniform | Torso, Legs, Feet, Overcoat | ## Rig families Bone name overlap is against the player rig. | Family | Members | Bones | Player match | |---|---|---|---| | 3485f157 | Player | 205 | 100% | | a240987b | Player cutscene rigs | 122 | 96% | | 09b012a0 | TacticalSoldier A/B/D, BossMutantChopper | 125 | 93% | | 02a67127 | Robby cutscene | 132 | 88% | | 1b02206c | Robby (Kelvin) | 93 | 86% | | db3f3ed0 | WorkerDude posers | 94 | 86% | | c59ddba4 | GoldArmourSkeletonPosed | 60 | 75% | | 007bf83f | TimmysDad | 141 | 70% | | d31a5f4b | TacticoolCaucasianPoserRig | 158 | 65% | | 18772f39 | Male cannibals, male carry body | 91 | 0% | | e5ab1cff | Female cannibals (Angel, Brandy, Crystal, Destiny, Elise, MuddyFemale), female carry body | 67 | 0% | | fe742020 | DeadMaleA/B/C, DeadFemaleC | 89 | 0% | | 19b9a8ac | DeadFemaleB (bar, pool, gym) | 87 | 0% | | fcd908ad | HeavyMale, FacelessMale | 86 | 0% | | e53f4f23 | FatMale, FatFemale | 90 | 0% | | f8c8bc7e | Mr/Miss Puffy, Puffton bosses, puffy carry bodies | 63 | 0% | | f7fc845b | Virginia | 161 | 0% | ## Rig naming Player style: `Hips`, `Spine`, `Spine1`, `Spine2`, `Neck`, `Neck1`, `Head`, `LeftShoulder`, `LeftArm`, `LeftForeArm`, `LeftHand`, `LeftHandIndex1`, `LeftUpLeg`, `LeftLeg`, `LeftFoot`, `LeftToeBase`. `C1:` style (cannibals, dead civilians, puffies): `C1:c_hip_SC`, `C1:C_spine0_SC`, `C1:C_neck0_SC`, `C1:C_head0_SC`, `C1:L_armPrnt0_SC`, `C1:L_arm0_SC`, `C1:L_arm1_SC`, `C1:L_hand00_SC`, `C1:l_handAFingerA0_SC`, `C1:L_leg0_SC`, `C1:L_leg1_SC`, `C1:L_foot00_SC`. Civilian dead bodies add twist and helper joints (`_JNT`). Virginia uses a separate `C1:` rig with an `A` suffix (`C1:C_spineAHip_SC`, `C1:R_armA0_SC`) and face bones. ## Female assets - `LocalPlayer/CarryBody/FemaleCannibal` exists on every player, vanilla included. Main mesh `C1:Female_lp`: 14209 verts, 67 bones, blendshapes 0 scared and 1 angry. - Civilian women exist only as scene posers: `DeadFemaleBodyB/C` with separate `DeadFemaleHeadB/C`, outfits for pool, gym and bar, and `RichWomanCostume`. - Virginia: `C1:Virginia_body`, 129 bones, 20 blendshapes, outfits camosuit, dress, leather suit, tracksuit, tutu. ## Addressables catalog Decoded from `catalog.json` into `data/assets.tsv` (5523 keys, 2917 entries). Race and clothing GUIDs resolve to prefabs, for example `65c86538006018140835657ca528e0c1` is `Assets/Sons/Characters/PlayerA/Variations/LatinA/LatinAHead.prefab` and `c84bc6d4586c5f04b9eabc8d26ad54fe` is `Assets/Sons/Wearables/Clothing/TacticalJacket.prefab`. - Loadable from anywhere: all player race heads and arms (including extra variants like `WhiteHeadBalaclava`, `LatinArmsFull`, `AsianHeadNoHair`), every clothing piece, Kelvin's full wardrobe (`Assets/Sons/Characters/Robby/Robby*Addressable.prefab`), Timmy and TimmysDad parts, `FatFemaleCannibalSkin`, `FingersSkinAddressable`, `TwinsSkinAddressable`, `PlayerA/Poses/CultRobe*`, `playerARenderRig.fbx`, `VirginiaRig.fbx`. - Not addressable: the dead civilian women (`DeadFemaleBody/Head`) and the female cannibal body meshes. They only exist when their scene or actor is loaded. The female carry body on the player is the reliable source. - In-game `Locate` with a wrapped string key returns nothing and walking the main catalog crashes the game, so use the offline decode. ## Emotes The player has no emote system. `IPlayerState` has no emote field, but the Bolt event `updateMecanimRemoteState` (layer, state hash, normalizedTime) tells other clients to play a state on a remote player, so any state that already exists in the player controller can be shown to vanilla clients. Player controller `PlayerAControllerGenerated`: Generic avatar, 12 layers (Base Layer, AdditiveArms, upperBody, UpperBodyReactions, fullBodyActions, leftArm, spineAddititve2, ClientPredictionLayer, Inventory, InventoryUpperBody, Face, Blink), 1205 clips, 271 parameters. Pose and gesture states that exist on the player: | State | Layer | |---|---| | couchIdle, seatedRockIdle | fullBodyActions | | injuredLoop, standUpIdle, standup, wakeUp | fullBodyActions | | checkArms, coldIdleVar1 | upperBody | | PlayerALighterLookAt | Base Layer | | PlayerAGuitar clips | upperBody | | PlayerAAngry, PlayerAScared | Face | Kelvin (`RobbyController`, 86% bone match with the player) plays his emotes as full body states on Base Layer. Captured with `rigwatch robby`: | State | Clip | Short hash | Full hash | |---|---|---|---| | ThumbsUp | ThumbsUp | 1712013045 | -1646602863 | | ShakeHead | ShakeHead | -1770187688 | 27107153 | | (unnamed) | RobbyEmoteYes | 1721109824 | 1053072325 | | IdleScratchHead | IdleScratchHead | -628397148 | 1736991184 | | IdleSwatFly | IdleSwatFly | -331262521 | 476507385 | | IdleLookVar1 | IdleLookVar1 | 336950523 | -712749335 | Other Kelvin emote clips: NodHead, RobbyEmoteHappy, RobbyEmoteSad, RobbyEmoteNo, RobbyEmoteConfused, RobbyPointIntro, RobbyPointLoop, RobbyPointOutro, HitHeadSmall, HitHeadBig, ShakeHeadStepBack. Virginia (`VirginiaController`): LaughWithPlayer, ThumbsUpReaction, PointStanding, VirginiaEmoteHappy, VirginiaEmoteSad, VirginiaEmoteYes, VirginiaEmoteNo, VirginiaEmoteConfused. Kelvin and Virginia clips are not in the player controller, so playing them on a player (for example with a PlayableGraph clip overriding the player Animator) is only visible to modded clients. ## Data layout - `characters/` full `rigprobe` output: player, carry bodies, every actor prefab, live actors - `scene/index.tsv` and `scene/rigfamilies.txt` from `rigscene` - `scene/samples/` one JSON per scene rig family - `assets.tsv` decoded Addressables catalog