{
  "schemaVersion": 1,
  "animationUrl": "/assets/equipment/motions.glb",
  "fps": 30,
  "sourceRig": "CS2_MultiRig_V3.blend",
  "coordinateSystem": "glTF Y up, original rig source units (1 unit = 0.0254 m)",
  "equipmentScale": 39.37007874015748,
  "anchors": {
    "hatchet": "equipment_hatchet",
    "axe": "equipment_axe",
    "pickaxe": "equipment_pickaxe"
  },
  "clips": [
    {
      "name": "UnarmedIdle",
      "duration": 2.0,
      "fps": 30,
      "frames": 61,
      "equipment": "unarmed",
      "phase": "idle",
      "loop": true
    },
    {
      "name": "HatchetEquip",
      "duration": 0.5333333333333333,
      "fps": 120,
      "frames": 65,
      "equipment": "hatchet",
      "phase": "equip",
      "loop": false
    },
    {
      "name": "HatchetDrawQuick",
      "duration": 0.36666666666666664,
      "fps": 120,
      "frames": 45,
      "equipment": "hatchet",
      "phase": "quick",
      "loop": false
    },
    {
      "name": "HatchetIdle",
      "duration": 3.0,
      "fps": 30,
      "frames": 91,
      "equipment": "hatchet",
      "phase": "idle",
      "loop": true
    },
    {
      "name": "HatchetStow",
      "duration": 0.4,
      "fps": 120,
      "frames": 49,
      "equipment": "hatchet",
      "phase": "stow",
      "loop": false
    },
    {
      "name": "AxeEquip",
      "duration": 0.7333333333333333,
      "fps": 120,
      "frames": 89,
      "equipment": "axe",
      "phase": "equip",
      "loop": false
    },
    {
      "name": "AxeDrawQuick",
      "duration": 0.4,
      "fps": 120,
      "frames": 49,
      "equipment": "axe",
      "phase": "quick",
      "loop": false
    },
    {
      "name": "AxeIdle",
      "duration": 4.0,
      "fps": 30,
      "frames": 121,
      "equipment": "axe",
      "phase": "idle",
      "loop": true
    },
    {
      "name": "AxeStow",
      "duration": 0.5,
      "fps": 120,
      "frames": 61,
      "equipment": "axe",
      "phase": "stow",
      "loop": false
    },
    {
      "name": "HatchetSwing",
      "duration": 0.8333333333333334,
      "fps": 120,
      "frames": 101,
      "equipment": "hatchet",
      "phase": "swing",
      "loop": false
    },
    {
      "name": "AxeSwing",
      "duration": 1.1,
      "fps": 120,
      "frames": 133,
      "equipment": "axe",
      "phase": "swing",
      "loop": false
    },
    {
      "name": "AxeWhiff",
      "duration": 0.6,
      "fps": 120,
      "frames": 73,
      "equipment": "axe",
      "phase": "swing",
      "loop": false
    },
    {
      "name": "HatchetWhiff",
      "duration": 0.7333333333333333,
      "fps": 120,
      "frames": 89,
      "equipment": "hatchet",
      "phase": "swing",
      "loop": false
    },
    {
      "name": "PickaxeEquip",
      "duration": 0.7333333333333333,
      "fps": 120,
      "frames": 89,
      "equipment": "pickaxe",
      "phase": "equip",
      "loop": false
    },
    {
      "name": "PickaxeDrawQuick",
      "duration": 0.4,
      "fps": 120,
      "frames": 49,
      "equipment": "pickaxe",
      "phase": "quick",
      "loop": false
    },
    {
      "name": "PickaxeIdle",
      "duration": 4.0,
      "fps": 30,
      "frames": 121,
      "equipment": "pickaxe",
      "phase": "idle",
      "loop": true
    },
    {
      "name": "PickaxeStow",
      "duration": 0.5,
      "fps": 120,
      "frames": 61,
      "equipment": "pickaxe",
      "phase": "stow",
      "loop": false
    },
    {
      "name": "PickaxeSwing",
      "duration": 0.8666666666666667,
      "fps": 120,
      "frames": 105,
      "equipment": "pickaxe",
      "phase": "swing",
      "loop": false
    },
    {
      "name": "PickaxeWhiff",
      "duration": 0.8,
      "fps": 120,
      "frames": 97,
      "equipment": "pickaxe",
      "phase": "swing",
      "loop": false
    }
  ],
  "grips": {
    "hatchet": {
      "primaryHeightMeters": 0.0725,
      "supportHeightMeters": null
    },
    "axe": {
      "primaryHeightMeters": 0.37,
      "supportHeightMeters": 0.15
    },
    "pickaxe": {
      "primaryHeightMeters": 0.37,
      "supportHeightMeters": 0.15
    }
  },
  "notes": [
    "Grips are contact-solved: palm and every finger joint close onto the handle mesh using the evaluated Sport Gloves surface.",
    "Original rig IK and forearm twist constraints evaluated and sampled at 30 fps (idles), 120 fps (draws and stows) and each swing's own rate.",
    "Held hands are rigidly locked to the tool; equipment anchors and hand bones use the same sample clock.",
    "Swings: baked at the clip fps given per clip; they start and end on the idle t=0 pose. Keyed tool-path swings hold the hands rigidly on the grips; arm-driven swings key the arm (torso turn, clavicles, humerus, elbow, wrist) and the tool follows the hand; tool-driven swings key the tool, how each hand sits on the handle (turned about it, the top hand slid down it) and the body (torso turn, clavicles, elbow swivels), and both arms reach the hands by IK. The two-handed swing re-grips through its strike: the top hand slides down the handle as the head comes down, turning about it, and is braced against the knob hand at the bite; it slides back up in the recovery.",
    "The seam: every stow ends, and every draw starts, with both fists closed on nothing about 32 cm below the bottom of the frame, so no glove shows between one tool and the next. Transitions never play the palms-up unarmed pose; UnarmedIdle is kept as the workbench's reference for its showcase blend.",
    "1H: the fist rises with the hatchet from below the frame in one arc and settles onto the idle grip. 2H: the right fist hauls the axe up and settles it while the left hand lifts open, waits an inch off the handle, presses on and closes; the stow releases the left hand first. Draw lengths: axe 0.733 s, hatchet 0.533 s; stows: axe 0.500 s, hatchet 0.400 s.",
    "HatchetDrawQuick (0.367 s) and AxeDrawQuick (0.400 s) are the same draws, quicker, for the moment a game starts: the tool enters the frame at about 0.05 s and rises over the next 0.15 s, then settles. They end on the idle like the ordinary draws.",
    "HatchetWhiff: the hatchet swing for a click that finds no tree. Its first 0.333 s are HatchetSwing's sample for sample, up to the moment the blade would reach the bark; after that the head carries on 20 cm along its entry line, slowing from about 8 to 1.2 m/s in 0.08 s without stopping, turns round and returns to the idle (0.733 s). It has no target contact, so target.bite has no entry for it.",
    "AxeWhiff: the axe swing for a click that finds no tree. Its first 0.158 s are AxeSwing's sample for sample; after that the head carries on past the place the blade would land, slowing to about 2 m/s over 0.055 s without stopping, and loops back to the idle (0.6 s). It has no target contact, so target.bite has no entry for it; its palm contacts and slide are checked like the swing's.",
    "Target: a vertical trunk cylinder. axis is its horizontal (x, y) position in Blender Z-up rig space, in rig units (inches), under the same parent as the anchor tracks; the exported tracks are glTF Y-up (x, z, -y), so the axis maps to glTF (x, -y) on the horizontal plane. radius uses the same units. bite gives, per swing, the seconds during which the blade is inside the cylinder.",
    "Stances: while a tool is held the world (scenery, trunk, ground) is shifted horizontally by stances[tool].worldOffset, in the same rig units and frame as target.axis (glTF (x, -y) on the horizontal plane), eased in during the tool's equip and out during its stow. The tool's swing bites the trunk at target.axis + worldOffset, and its bite window is measured there.",
    "Slides: the hand point boneLocalPoint (bone-local rig inches, as contacts) stays within toleranceMeters of the tool-space segment equipmentLocalSegment (metres, glTF Y-up, as equipmentLocalPoint) for the listed clips. The segment is the locus of that point on the tool: the grip's centre on the handle axis, at the top and bottom of the slide. The top hand also turns about the handle as it re-grips, which leaves that point in place.",
    "Edges: per tool, the cutting edge in tool-local metres, glTF Y-up (the space of equipmentLocalPoint, under the anchor): mid is the edge's leading point (its most forward stretch, where it first meets the wood, and the point the swing reports track); toe and heel are the top (head end) and bottom corners of the edge. All three lie on the blade's mid-plane (z = 0); the edge faces +x.",
    "PickaxeSwing and PickaxeSwingHeavy are the pickaxe's two mining takes (Brisk, \"mine1\"; Heavy, \"mine2\"), both from the axe's reference chop: the pick's tip meets the trunk cylinder at the crosshair, 71 degrees round its flank, and stays in it about 0.12 s, then rebounds; the hands stay at the idle grips (no slide) and only roll about the haft. Each has a target.bite window and a chain.cutIn (where its low carry at the right hip has settled, and a held button cuts in). PickaxeWhiff and PickaxeWhiffHeavy are the same swings for a click that finds no rock, with no target contact. The Heavy pair is in the pack named \"pickaxeHeavy\" (packs.pickaxeHeavy.url, an animation-only glTF over the same nodes), which the game fetches only when the heavy take is asked for; `clips` lists what motions.glb itself carries."
  ],
  "contacts": [
    {
      "equipment": "hatchet",
      "bone": "hand_r",
      "boneLocalPoint": [
        -0.30556,
        2.98445,
        1.85583
      ],
      "equipmentLocalPoint": [
        0.002994,
        0.0725,
        -1.2e-05
      ],
      "clips": [
        "HatchetIdle",
        "HatchetSwing",
        "HatchetWhiff"
      ],
      "toleranceMeters": 0.005
    },
    {
      "equipment": "axe",
      "bone": "hand_r",
      "boneLocalPoint": [
        -0.2975,
        2.98445,
        2.01598
      ],
      "equipmentLocalPoint": [
        0.004115,
        0.37,
        0.0
      ],
      "clips": [
        "AxeIdle"
      ],
      "toleranceMeters": 0.005
    },
    {
      "equipment": "axe",
      "bone": "hand_l",
      "boneLocalPoint": [
        0.29391,
        2.98445,
        2.08719
      ],
      "equipmentLocalPoint": [
        -0.031113,
        0.15,
        -0.0
      ],
      "clips": [
        "AxeIdle",
        "AxeSwing",
        "AxeWhiff"
      ],
      "toleranceMeters": 0.005
    },
    {
      "equipment": "pickaxe",
      "bone": "hand_r",
      "boneLocalPoint": [
        -0.30151,
        2.98445,
        1.93625
      ],
      "equipmentLocalPoint": [
        0.011776,
        0.37,
        0.0
      ],
      "clips": [
        "PickaxeIdle",
        "PickaxeSwing",
        "PickaxeWhiff",
        "PickaxeSwingHeavy",
        "PickaxeWhiffHeavy"
      ],
      "toleranceMeters": 0.005
    },
    {
      "equipment": "pickaxe",
      "bone": "hand_l",
      "boneLocalPoint": [
        0.29942,
        2.98445,
        1.97782
      ],
      "equipmentLocalPoint": [
        0.006798,
        0.15,
        -0.0
      ],
      "clips": [
        "PickaxeIdle",
        "PickaxeSwing",
        "PickaxeWhiff",
        "PickaxeSwingHeavy",
        "PickaxeWhiffHeavy"
      ],
      "toleranceMeters": 0.005
    }
  ],
  "contactUnits": {
    "boneLocalPoint": "original rig units (inches)",
    "equipmentLocalPoint": "meters, glTF Y up",
    "equipmentLocalSegment": "meters, glTF Y up",
    "edges": "meters, glTF Y up",
    "transitions": "seconds from the clip start; seamBelowFrameCm in centimetres"
  },
  "slides": [
    {
      "equipment": "axe",
      "bone": "hand_r",
      "boneLocalPoint": [
        -0.2975,
        2.98445,
        2.01598
      ],
      "equipmentLocalSegment": [
        [
          0.004115,
          0.37,
          -0.0
        ],
        [
          -0.016992,
          0.249668,
          0.000781
        ]
      ],
      "clips": [
        "AxeSwing",
        "AxeWhiff"
      ],
      "toleranceMeters": 0.005
    }
  ],
  "target": {
    "kind": "trunk",
    "units": "rig",
    "axis": [
      18.0,
      -30.0
    ],
    "radius": 6.0,
    "bite": {
      "HatchetSwing": [
        0.3333,
        0.5333
      ],
      "AxeSwing": [
        0.1583,
        0.425
      ],
      "PickaxeSwing": [
        0.3333,
        0.45
      ],
      "PickaxeSwingHeavy": [
        0.4,
        0.5333
      ]
    }
  },
  "stances": {
    "hatchet": {
      "worldOffset": [
        -4.239,
        -0.922
      ]
    },
    "axe": {
      "worldOffset": [
        -12.0,
        -6.5
      ]
    },
    "pickaxe": {
      "worldOffset": [
        -13.7403,
        -5.4729
      ]
    }
  },
  "edges": {
    "hatchet": {
      "mid": [
        0.10114,
        0.31103,
        -1e-05
      ],
      "toe": [
        0.09055,
        0.36091,
        -1e-05
      ],
      "heel": [
        0.09617,
        0.27343,
        -1e-05
      ]
    },
    "axe": {
      "mid": [
        0.17264,
        0.61808,
        -1e-05
      ],
      "toe": [
        0.1555,
        0.7042,
        -1e-05
      ],
      "heel": [
        0.16555,
        0.56791,
        -1e-05
      ]
    },
    "pickaxe": {
      "mid": [
        0.235,
        0.615,
        0.0
      ],
      "toe": [
        0.11,
        0.70229,
        0.0
      ],
      "heel": [
        0.11,
        0.66046,
        0.0
      ]
    }
  },
  "chain": {
    "restart": 0.033,
    "cutIn": {
      "PickaxeSwing": 0.7667,
      "PickaxeSwingHeavy": 0.75
    }
  },
  "packs": {
    "pickaxeHeavy": {
      "url": "/assets/equipment/motions-pickaxe-heavy.glb",
      "clips": [
        {
          "name": "PickaxeSwingHeavy",
          "duration": 1.0666666666666667,
          "fps": 120,
          "frames": 129,
          "equipment": "pickaxe",
          "phase": "swing",
          "loop": false
        },
        {
          "name": "PickaxeWhiffHeavy",
          "duration": 0.8666666666666667,
          "fps": 120,
          "frames": 105,
          "equipment": "pickaxe",
          "phase": "swing",
          "loop": false
        }
      ]
    }
  },
  "transitions": {
    "HatchetEquip": {
      "toolEntersFrame": 0.133,
      "glovesEnterFrame": 0.183,
      "rightSeated": 0.28,
      "leftCaught": null
    },
    "HatchetDrawQuick": {
      "toolEntersFrame": 0.05,
      "glovesEnterFrame": 0.1,
      "rightSeated": 0.26,
      "leftCaught": null
    },
    "HatchetStow": {
      "glovesLeaveFrame": 0.283,
      "toolLeavesFrame": 0.333
    },
    "AxeEquip": {
      "toolEntersFrame": 0.142,
      "glovesEnterFrame": 0.25,
      "rightSeated": 0.45,
      "leftCaught": 0.55
    },
    "AxeDrawQuick": {
      "toolEntersFrame": 0.042,
      "glovesEnterFrame": 0.092,
      "rightSeated": 0.26,
      "leftCaught": 0.31
    },
    "AxeStow": {
      "glovesLeaveFrame": 0.35,
      "toolLeavesFrame": 0.425
    },
    "PickaxeEquip": {
      "toolEntersFrame": 0.142,
      "glovesEnterFrame": 0.267,
      "rightSeated": 0.45,
      "leftCaught": 0.55
    },
    "PickaxeDrawQuick": {
      "toolEntersFrame": 0.042,
      "glovesEnterFrame": 0.108,
      "rightSeated": 0.26,
      "leftCaught": 0.31
    },
    "PickaxeStow": {
      "glovesLeaveFrame": 0.325,
      "toolLeavesFrame": 0.425
    },
    "seamBelowFrameCm": 32.4
  }
}
