//This JSON was modified by ambient (ambiennt on Discord) and Rainvay_ZCYF (@ZouChenyunfei). Please do not use this document without permission.
{
  "format_version": "1.8.0",
  "animations": {
    "animation.player.first_person.attack_rotation": { //Combination of ambient and LateLag attack rotations - if holding an item, use LateLag; if empty, use ambient
      "loop": true,
      "animation_length": 0.55,
      "anim_time_update": "(variable.attack_time * 0.55)",
      "bones": {
        "rightarm": {
          "rotation": {
            "0.0": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 : 0" ],
            "0.01": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -37.5", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 21.5", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  16.5" ],
            "0.05": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -51", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 37", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  24.75 " ],
            "0.07": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -45.5", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 47", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  27.5" ],
            "0.12": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -41", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 52.5", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  23.5" ],
            "0.17": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -40", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 48", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  22" ],
            "0.22": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -35", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 46", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  18" ],
            "0.3": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -30", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 40", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  14.5" ],
            "0.35": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -22", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 30", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  8" ],
            "0.47": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : -10", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 17.5", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  4" ],
            "0.55": [ "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -60.0 : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 40.0 : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * 20.0 :  0" ]
          },
          "position": {
            "0.0": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  0" ],
            "0.01": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -1.75", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 6.7", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  0" ],
            "0.05": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -2.4", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 6.0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  0.3" ],
            "0.07": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -3.2", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 5.1", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  0.6" ],
            "0.12": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -3.2", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 1.5", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  1.1" ],
            "0.17": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -3.2", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 0.3", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  1.4" ],
            "0.22": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -3.2", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : -2.1", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  1.5" ],
            "0.3": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -3.2", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : -4.2", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  1.6" ],
            "0.35": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -3.15", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : -5.6", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  1.8" ],
            "0.47": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : -1.4", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : -3.6", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 :  1.5" ],
            "0.55": [ "query.is_item_equipped('main_hand') ? math.clamp(-15.5 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0), -7.0, 999.0) * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 7.5 - variable.first_person_rotation_factor * variable.attack_time * 15.0 : 0", "query.is_item_equipped('main_hand') ? math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 1.75 : 0" ]
          }
        },
        "rightitem": {
          "rotation": [ "variable.first_person_rotation_factor * -60.0", "variable.first_person_rotation_factor * -30.0", "math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 280.0) * -30.0" ]
        }
      }
    },
    "animation.player.first_person.base_pose": {
      "loop": true,
      "bones": {
        "body": {
          "rotation": [ "query.target_x_rotation", "query.target_y_rotation", 0.0 ]
        }
      }
    },
    "animation.player.first_person.crossbow_equipped": {
      "loop": true,
      "override_previous_animation": true,
      "bones": {
        "leftarm": {
          "position": [ "-q.get_default_bone_pivot('leftarm',0) + 8.0 - variable.item_use_normalized * 7.0", "-q.get_default_bone_pivot('leftarm',1) + 21.5 + variable.short_arm_offset_left / 8.0 + variable.item_use_normalized * 1.0", "-q.get_default_bone_pivot('leftarm',2) + 6.0 - (1.0 - variable.item_use_normalized)" ],
          "rotation": [ 215.0 , 245.0, 20.0 ],
          "scale": 0.4
        },
        "leftitem": {
          "position": [ "q.get_default_bone_pivot('leftarm',0) - q.get_default_bone_pivot('leftitem',0)", "q.get_default_bone_pivot('leftarm',1) - q.get_default_bone_pivot('leftitem',1)", "q.get_default_bone_pivot('leftarm',2) - q.get_default_bone_pivot('leftitem',2)" ],
          "rotation": [ "query.target_x_rotation", "query.target_y_rotation", 0.0 ],
          "relative_to": {
            "rotation": "entity"
          }
        },
        "rightarm": {
          "position": [ "-q.get_default_bone_pivot('rightarm',0)", "-q.get_default_bone_pivot('rightarm',1)", "-q.get_default_bone_pivot('rightarm',2)" ]
        },
        "rightitem": {
          "position": [ "q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0) + 8.0", "q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1) + 14.0", "q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2) + 12.0 + query.item_remaining_use_duration('main_hand', 1.0) * 1.5" ],
          "rotation": [ "query.target_x_rotation", "query.target_y_rotation", 0.0 ],
          "relative_to": {
            "rotation": "entity"
          }
        }
      }
    },
    "animation.player.first_person.crossbow_hold": { //Holding loaded crossbow (Only for arm posing - use "animation.crossbow.wield_first_person" in "crossbow.animation.json" for item posing)
      "loop": true,
      "bones": {
        "rightitem": {
          "position": [ 0.0, 0.0, 0.0 ]
        }
      }
    },
    "animation.player.first_person.empty_hand": { //This animation is now always active and required for all attachables. Variables are used so the map animations can cancel out this animation without breaking offhand attachables.
      "loop": true,
      "bones": {
        "leftarm": {
          "position": [ "variable.left_arm_pos_x = -q.get_default_bone_pivot('leftarm',0) - 8.0; return variable.left_arm_pos_x;", "variable.left_arm_pos_y = -q.get_default_bone_pivot('leftarm',1) + 14.5; return variable.left_arm_pos_y;", "variable.left_arm_pos_z = -q.get_default_bone_pivot('leftarm',2) + 10.5; return variable.left_arm_pos_z;" ],
          "rotation": [ "variable.left_arm_rot_x = 180.0 + 96.0 + variable.is_using_vr * 7.5; return variable.left_arm_rot_x;", "variable.left_arm_rot_y = 180.0 - 40.0 + variable.is_using_vr * 7.5; return variable.left_arm_rot_y;", "variable.left_arm_rot_z = 90.0 - 26.0 + variable.is_using_vr * 2.5; return variable.left_arm_rot_z;" ]
        },
        "leftitem": {
          "position": [ "q.get_default_bone_pivot('leftarm',0) - q.get_default_bone_pivot('leftitem',0)", "q.get_default_bone_pivot('leftarm',1) - q.get_default_bone_pivot('leftitem',1)", "q.get_default_bone_pivot('leftarm',2) - q.get_default_bone_pivot('leftitem',2)" ],
          "rotation": [ "query.target_x_rotation", "query.target_y_rotation", 0.0 ],
          "relative_to": {
            "rotation": "entity"
          }
        },
        "rightarm": {
          "position": [ "variable.right_arm_pos_x = -q.get_default_bone_pivot('rightarm',0) + 8.0; return variable.right_arm_pos_x;", "variable.right_arm_pos_y = -q.get_default_bone_pivot('rightarm',1) + 14.5; return variable.right_arm_pos_y;", "variable.right_arm_pos_z = -q.get_default_bone_pivot('rightarm',2) + 10.5; return variable.right_arm_pos_z;" ],
          "rotation": [ "variable.right_arm_rot_x = 96.0 + variable.is_using_vr * 7.5; return variable.right_arm_rot_x;", "variable.right_arm_rot_y = -40.0 + variable.is_using_vr * 7.5; return variable.right_arm_rot_y;", "variable.right_arm_rot_z = 90.0 + 26.0 + variable.is_using_vr * -2.5; return variable.right_arm_rot_z;" ]
        },
        //
        // Unused - this item animation cancels out the effects of the hand position on the item so we don't need to cancel out the hand position in every attachable file
        //
        // Before any rotation weirdness, subtract the item pivot from the arm pivot to center the item on the arm pivot
        //
        // x = q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0)
        // y = q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1)
        // z = q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2)
        //
        // Used https://www.andre-gaschler.com/rotationconverter/ to generate rotation matrix with XYZ Euler angles 96, 40, 116 for non-VR and 103.5, 32.5, 113.5 for VR (in degrees)
        // Note: the y axis rotation is the negative of the hand rotation - Minecraft's first-person axes are not a right-handed system, so the negative y accounts for that
        // Left-multipled the resulting rotation matrix on the negative of the hand position (to bring the item back to [0,0,0]).
        // This realigns the axes so changing the x component of each x'/y'/z' aligns with the camera x axis.
        //
        //   Rotation matrix: [ cos(b)cos(c)                       -cos(b)sin(c)                        -sin(b)       ]
        //                    [ -sin(a)sin(b)cos(c)+cos(a)sin(c)   sin(a)sin(b)sin(c)+cos(a)cos(c)      -sin(a)cos(b) ]
        //                    [ cos(a)sin(b)cos(c)+sin(a)sin(c)    -cos(a)sin(b)sin(c)+sin(a)cos(c)     cos(a)cos(b)  ]
        //
        //   ...where a = hand rotation about x, b = hand rotation about y (matches hand y rotation (not negative), as the matrix itself has been changed to account for this), c = hand rotation about z
        //
        //   This matrix allows position transformation between any two sets of first-person axes! - align any axes back to the camera, regardless of parent
        //
        //   Onto vector: [ -8.0  ]
        //                [ -14.5 ]
        //                [ -10.5 ]
        //
        //   ...the negative of the right hand position offset (left hand uses +8.0 instead)
        //
        //"position": [ //Verbose trig version, best for testing
        //  "q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0) + ((math.cos(v.right_arm_rot_y) * math.cos(v.right_arm_rot_z))                                                                                            * -8.0 + (-math.cos(v.right_arm_rot_y) * math.sin(v.right_arm_rot_z))                                                                                           * -14.5 + (-math.sin(v.right_arm_rot_y))                               * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1) + ((-math.sin(v.right_arm_rot_x) * math.sin(v.right_arm_rot_y) * math.cos(v.right_arm_rot_z) + math.cos(v.right_arm_rot_x) * math.sin(v.right_arm_rot_z)) * -8.0 + (math.sin(v.right_arm_rot_x) * math.sin(v.right_arm_rot_y) * math.sin(v.right_arm_rot_z) + math.cos(v.right_arm_rot_x) * math.cos(v.right_arm_rot_z))  * -14.5 + (-math.sin(v.right_arm_rot_x) * math.cos(v.right_arm_rot_y)) * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2) + ((math.cos(v.right_arm_rot_x) * math.sin(v.right_arm_rot_y) * math.cos(v.right_arm_rot_z) + math.sin(v.right_arm_rot_x) * math.sin(v.right_arm_rot_z))  * -8.0 + (-math.cos(v.right_arm_rot_x) * math.sin(v.right_arm_rot_y) * math.sin(v.right_arm_rot_z) + math.sin(v.right_arm_rot_x) * math.cos(v.right_arm_rot_z)) * -14.5 + (math.cos(v.right_arm_rot_x) * math.cos(v.right_arm_rot_y))  * -10.5)"
        //],
        //
        //"position": [ //Precalculated - variable.is_using_vr == 0
        //  "q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0) + (-0.3358 * -8.0 - 0.6885 * -14.5 + 0.6428 * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1) + (-0.3742 * -8.0 - 0.5287 * -14.5 - 0.7618 * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2) + ( 0.8644 * -8.0 - 0.4964 * -14.5 - 0.0801 * -10.5)"
        //],
        //
        //"position": [ //Precalculated - variable.is_using_vr == 1
        //  "q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0) + (-0.3363 * -8.0 - 0.7734 * -14.5 + 0.5373 * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1) + (-0.4224 * -8.0 - 0.3860 * -14.5 - 0.8201 * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2) + ( 0.8417 * -8.0 - 0.5028 * -14.5 - 0.1969 * -10.5)"
        //],
        //
        //"position": [ //Precalculated - for normal and VR
        //  "q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0) + ((variable.is_using_vr ? -0.3363 : -0.3358) * -8.0 + (variable.is_using_vr ? -0.7734 : -0.6885) * -14.5 + (variable.is_using_vr ?  0.5373 :  0.6428) * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1) + ((variable.is_using_vr ? -0.4224 : -0.3742) * -8.0 + (variable.is_using_vr ? -0.3860 : -0.5287) * -14.5 + (variable.is_using_vr ? -0.8201 : -0.7618) * -10.5)",
        //  "q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2) + ((variable.is_using_vr ?  0.8417 :  0.8644) * -8.0 + (variable.is_using_vr ? -0.5028 : -0.4964) * -14.5 + (variable.is_using_vr ? -0.1969 : -0.0801) * -10.5)"
        //],
        //
        "rightitem": {
          "position": [ "q.get_default_bone_pivot('rightarm',0) - q.get_default_bone_pivot('rightitem',0)", "q.get_default_bone_pivot('rightarm',1) - q.get_default_bone_pivot('rightitem',1)", "q.get_default_bone_pivot('rightarm',2) - q.get_default_bone_pivot('rightitem',2)" ],
          "rotation": [ "query.target_x_rotation", "query.target_y_rotation", 0.0 ],
          "relative_to": {
            "rotation": "entity"
          }
        }
      }
    },
    "animation.player.first_person.map_hold": {
      "loop": true,
      "bones": {
        "leftarm": {
          "position": [ "-17.75 + variable.is_vertical_splitscreen * 7.0 - variable.left_arm_pos_x", "-9.75 - variable.map_angle * 8.0 + variable.is_vertical_splitscreen * 0.6 + variable.short_arm_offset_left - variable.left_arm_pos_y", "10.0 - variable.map_angle * 8.0 + variable.short_arm_offset_left - variable.left_arm_pos_z" ],
          "rotation": [ "40.0 - variable.left_arm_rot_x", "-22.5 - variable.left_arm_rot_y", "-152.5 - variable.left_arm_rot_z" ],
          "scale": [ 1.20, 1.20, 1.20 ]
        },
        "rightarm": {
          "position": [ "17.25 + variable.is_vertical_splitscreen * 7.0 - variable.right_arm_pos_x", "-9.75 - variable.map_angle * 8.0 + variable.is_vertical_splitscreen * 0.6 + variable.short_arm_offset_right - variable.right_arm_pos_y", "10.0 - variable.map_angle * 8.0 + variable.short_arm_offset_right - variable.right_arm_pos_z" ],
          "rotation": [ "40.0 - variable.right_arm_rot_x", "22.5 - variable.right_arm_rot_y", "152.5 - variable.right_arm_rot_z" ],
          "scale": [ 1.20, 1.20, 1.20 ]
        }
      }
    },
    "animation.player.first_person.map_hold_attack": {
      "loop": true,
      "bones": {
        "leftarm": {
          "position": [ "math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0) * 2.0", "math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time)) * 3.75 - variable.first_person_rotation_factor * variable.attack_time * 1.25", "math.sin(variable.first_person_rotation_factor * variable.attack_time * 1.0) * 5.75" ]
        },
        "rightarm": {
          "position": [ "(variable.first_person_rotation_factor * variable.attack_time * 6.0) * (-3.0 + variable.short_arm_offset_right * 0.25)", "(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * 6.0) * (1.85 - variable.short_arm_offset_right * 0.125)", "math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 5.25" ],
          "rotation": [ "variable.map_angle * 90.0", 0.0, "variable.attack_time * (30 + variable.short_arm_offset_right * 5)" ]
        }
      }
    },
    "animation.player.first_person.map_hold_main_hand": {
      "loop": true,
      "bones": {
        "rightarm": {
          "position": [ "14.50 - variable.is_vertical_splitscreen * 0.75 - variable.right_arm_pos_x", "-8.25 + 1.4 * variable.short_arm_offset_right + math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) * 2.75 - variable.first_person_rotation_factor * variable.attack_time * 3.0 - variable.is_horizontal_splitscreen - variable.right_arm_pos_y", "11.5 + math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 3.5 + variable.is_horizontal_splitscreen * 3.5 - variable.right_arm_pos_z" ],
          "rotation": [ "195.0 - variable.right_arm_rot_x", "182.5 - variable.right_arm_rot_y", "-5.0 - variable.right_arm_rot_z" ],
          "scale": [ 0.75, 0.75, 0.75 ]
        }
      }
    },
    "animation.player.first_person.map_hold_off_hand": {
      "loop": true,
      "bones": {
        "leftarm": {
          "position": [ "-14.50 + variable.is_horizontal_splitscreen * 2.0 + variable.is_vertical_splitscreen * 8.7 - variable.left_arm_pos_x", "-8.250 + 1.4 * variable.short_arm_offset_left - variable.left_arm_pos_y", "11.50 + variable.is_horizontal_splitscreen * 0.5 - variable.left_arm_pos_z" ],
          "rotation": [ "195.0 - variable.left_arm_rot_x", "182.5 - variable.left_arm_rot_y", "2.5 - variable.left_arm_rot_z" ],
          "scale": [ 0.75, 0.75, 0.75 ]
        }
      }
    },
    "animation.player.first_person.vr_attack_rotation": {
      "loop": true,
      "bones": {
        "rightarm": {
          "position": [ "5.0 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 112.0)", "(math.sin(variable.first_person_rotation_factor * (1.0 - variable.attack_time) * (1.0 - variable.attack_time) * 200.0) - 0.8) * 8.75 + 5.0", "math.sin(variable.first_person_rotation_factor * variable.attack_time * 120.0) * 15.0" ],
          "rotation": [ "30.7 * math.sin(variable.first_person_rotation_factor * variable.attack_time * -180.0 - 45.0) * 1.5", 0.0, "21.8 * math.sin(variable.first_person_rotation_factor * variable.attack_time * 200.0 + 30.0) * 1.25" ]
        }
      }
    },
    "animation.player.first_person.walk": {
      "loop": true,
      "bones": {
        "leftarm": {
          "position": [ 0.0, 0.0, 0.0 ]
        },
        "rightarm": {
          "position": [ 0.0, 0.0, 0.0 ]
        }
      }
    }
  }
}
