{
  "_about": "The player's body in one place. Read by the game (Player/Body/DescentBodyProfile.cpp) AND by the retarget script (Tools/ue/assets_14_body_anims.py). To use another model: add a profile, run Tools\\import_assets.ps1 -Only body_anims, set \"model\". Guide: Docs/PLAYER_MODEL_SWAP.md.",

  "model": "Twinblast",

  "profiles": {
    "Twinblast": {
      "_about": "Paragon Twinblast, the user's Fab pack (Content/ParagonTwinblast, never edited). The mesh faces +Y, +X is its left, +Z up.",
      "mesh": "/Game/ParagonTwinblast/Characters/Heroes/TwinBlast/Meshes/TwinBlast",
      "yaw_deg": -90.0,
      "scale": 0.922,
      "anim_folder": "/Game/Player/Twinblast/Anims",
      "eye_socket": "Eyes_Position",
      "hide_bones_own_view": ["head", "neck_01", "collar_out_l", "collar_out_r", "collar_in_l", "collar_in_r"],
      "bones": {
        "pelvis": "pelvis", "spine": "spine_01", "chest": "spine_03", "neck": "neck_01", "head": "head",
        "upperarm_r": "upperarm_r", "lowerarm_r": "lowerarm_r", "hand_r": "hand_r",
        "upperarm_l": "upperarm_l", "lowerarm_l": "lowerarm_l", "hand_l": "hand_l",
        "knee_l": "calf_l", "knee_r": "calf_r", "foot_l": "foot_l", "foot_r": "foot_r"
      },
      "material_overrides": { "M04_LowerBody": "/Game/Player/Twinblast/M_Twinblast_LegsMetal" },
      "gun_slots": ["M02_Pistol"],
      "legacy": {
        "_about": "descent.Body.AnimSet 0: the model's own pack sequences (the set of 2026-10-11). A model without one leaves this out.",
        "folder": "/Game/ParagonTwinblast/Characters/Heroes/TwinBlast/Animations",
        "scale": 0.975,
        "names": {
          "Idle": "Idle", "WalkFwd": "Walk_Fwd", "WalkBwd": "Walk_Bwd", "WalkLeft": "Walk_Left", "WalkRight": "Walk_Right",
          "JogFwd": "Jog_Fwd", "JogBwd": "Jog_Bwd", "JogLeft": "Jog_Left", "JogRight": "Jog_Right",
          "JumpStart": "Jump_Start", "JumpApex": "Jump_Apex", "FallLoop": "Jump_Fall_Loop", "Land": "Jump_Land", "IdleRelaxed": "Idle_Relaxed",
          "SwimIdle": "Jump_Fall_Loop", "SwimFwd": "Jump_Fall_Loop", "SwimLeft": "Jump_Fall_Loop", "SwimRight": "Jump_Fall_Loop",
          "Touch": "Idle", "PushButton": "Idle", "RunFwd": "Jog_Fwd"
        }
      }
    }
  },

  "animations": {
    "_about": "Situation role -> source clip on the UE5 mannequin (the user's Fab packs). The script bakes each onto the model as <anim_folder>/A_Body_<Role>; the game loads by that name. loop: repeats (else stops on its last frame). root_lock: in place, the capsule moves him. reversed: played backward. upper_body: used on the spine and arms only, over whatever the legs do.",
    "rows": [
      { "role": "Idle",        "source": "/Game/SampleAnimationPack/Animations/Unarmed/AS_M_Unarmed_Idle_01",        "loop": true,  "root_lock": true },
      { "role": "IdleRelaxed", "source": "/Game/SampleAnimationPack/Animations/Unarmed/AS_M_Unarmed_Idle_01",        "loop": true,  "root_lock": true },
      { "role": "WalkFwd",     "source": "/Game/SampleAnimationPack/Animations/Unarmed/AS_M_Unarmed_Walk_F_Loop",    "loop": true,  "root_lock": true },
      { "role": "WalkBwd",     "source": "/Game/SampleAnimationPack/Animations/Unarmed/AS_M_Unarmed_Walk_B_Loop",    "loop": true,  "root_lock": true },
      { "role": "WalkLeft",    "source": "/Game/SampleAnimationPack/Animations/Unarmed/AS_M_Unarmed_Walk_L_Loop",    "loop": true,  "root_lock": true },
      { "role": "WalkRight",   "source": "/Game/SampleAnimationPack/Animations/Unarmed/AS_M_Unarmed_Walk_R_Loop",    "loop": true,  "root_lock": true },
      { "role": "JogFwd",      "source": "/Game/FreeAnimationLibrary/Animations/Jog/anim_Jog_Loop_Fwd",              "loop": true,  "root_lock": true },
      { "role": "JogBwd",      "source": "/Game/FreeAnimationLibrary/Animations/Jog/anim_Jog_Loop_Fwd",              "loop": true,  "root_lock": true, "reversed": true },
      { "role": "JogLeft",     "source": "/Game/FreeAnimationLibrary/Animations/Jog/anim_Jog_Loop_Left_L",           "loop": true,  "root_lock": true },
      { "role": "JogRight",    "source": "/Game/FreeAnimationLibrary/Animations/Jog/anim_Jog_Loop_Right_R",          "loop": true,  "root_lock": true },
      { "role": "RunFwd",      "source": "/Game/SampleAnimationPack/Demo/Characters/Mannequins/Animations/Manny/MM_Run_Fwd", "loop": true, "root_lock": true },
      { "role": "JumpStart",   "source": "/Game/SampleAnimationPack/Demo/Characters/Mannequins/Animations/Manny/MM_Jump",      "loop": false, "root_lock": true },
      { "role": "JumpApex",    "source": "/Game/SampleAnimationPack/Demo/Characters/Mannequins/Animations/Manny/MM_Fall_Loop", "loop": false, "root_lock": true },
      { "role": "FallLoop",    "source": "/Game/SampleAnimationPack/Demo/Characters/Mannequins/Animations/Manny/MM_Fall_Loop", "loop": true,  "root_lock": true },
      { "role": "Land",        "source": "/Game/SampleAnimationPack/Demo/Characters/Mannequins/Animations/Manny/MM_Land",      "loop": false, "root_lock": true },
      { "role": "SwimIdle",    "source": "/Game/FreeAnimationLibrary/Animations/Swim/anim_SwimIdle",                 "loop": true,  "root_lock": true },
      { "role": "SwimFwd",     "source": "/Game/FreeAnimationLibrary/Animations/Swim/anim_Swim_Surface_Fwd",         "loop": true,  "root_lock": true },
      { "role": "SwimLeft",    "source": "/Game/FreeAnimationLibrary/Animations/Swim/anim_Swim_Surface_Left",        "loop": true,  "root_lock": true },
      { "role": "SwimRight",   "source": "/Game/FreeAnimationLibrary/Animations/Swim/anim_Swim_Surface_Right",       "loop": true,  "root_lock": true },
      { "role": "Touch",       "source": "/Game/FreeAnimationLibrary/Animations/Interaction/anim_Touch_R",           "loop": false, "root_lock": true, "upper_body": true },
      { "role": "PushButton",  "source": "/Game/FreeAnimationLibrary/Animations/Interaction/anim_PushButton_R",      "loop": false, "root_lock": true, "upper_body": true }
    ]
  }
}
