]> Untitled Git - william-skin.git/commitdiff
Basic player functionality
authorClifton Palmer <clifton.james.palmer@protonmail.com>
Fri, 29 Nov 2024 14:35:35 +0000 (16:35 +0200)
committerClifton Palmer <clifton.james.palmer@protonmail.com>
Fri, 29 Nov 2024 14:35:35 +0000 (16:35 +0200)
player/player.gd [new file with mode: 0644]
player/player.tscn [new file with mode: 0644]
project.godot
test/test.gd [new file with mode: 0644]
test/test.tscn [new file with mode: 0644]
ux/debug_draw_3d.gd [new file with mode: 0644]
ux/debug_overlay.gd [new file with mode: 0644]
ux/debug_stats.gd [new file with mode: 0644]
ux/lockon_indicator.tscn [new file with mode: 0644]
william.gd
william.tscn

diff --git a/player/player.gd b/player/player.gd
new file mode 100644 (file)
index 0000000..6c78b21
--- /dev/null
@@ -0,0 +1,338 @@
+class_name Player
+extends CharacterBody3D
+
+
+# signals
+signal camera_lockon
+
+
+# player settings
+@export_group("Movement")
+@export var walk_speed := 5.0
+@export var jog_speed := 10.0
+@export var air_speed := 3.0
+@export var acceleration := 30.0
+@export var jump_speed := 6.0
+@export var rotation_speed := 10.0
+@export var fall_speed := 1.2
+@export var idle_timeout := 5.0
+@export var hard_landing_limit := 10.0
+
+
+@export_group("Camera")
+@export_range(1.0, 10.0) var camera_distance := 2.0
+@export_range(0.0, 100.0) var camera_lockon_radius := 40.0
+@export_enum("locked", "unlocked") var camera_mode: String
+@export_range(0.0, 50.0) var lockon_sensitivity := 0.2
+@export_range(0.0, 1.0) var mouse_sensitivity := 0.25
+@export_range(0.0, 10.0) var joystick_sensitivity_x := 4.0
+@export_range(0.0, 10.0) var joystick_sensitivity_y := 2.0
+
+
+@export_group("Expressions")
+@export_range(1.0, 100.0) var head_rotation_speed := 5.0
+
+
+@onready var _camera_pivot: Node3D = $cameraPivot
+@onready var _camera_spring: SpringArm3D = $cameraPivot/SpringArm3D
+@onready var _camera: Camera3D = $cameraPivot/SpringArm3D/Camera3D
+@onready var _skin: WilliamSkin = %WilliamSkin
+@onready var _debug: CanvasLayer = %DebugOverlay
+
+
+# class variables
+var _player_speed := walk_speed
+var _camera_input_direction := Vector2.ZERO
+var _last_movement_direction := rotation
+var _idle_time := 0.0
+var _camera_lockon_node: Node3D = null
+var _lockon_direction: Vector3 = Vector3.ZERO
+var _lockon_indicator_scene = load("res://ux/lockon_indicator.tscn")
+var _lockon_instance: Node3D = _lockon_indicator_scene.instantiate()
+
+var _head_track_arr: Array[Node3D] = []
+
+enum {LOCKON_LEFT, LOCKON_CENTER, LOCKON_RIGHT}
+var _lockon_shift := LOCKON_CENTER
+
+enum {CAMERA_MOUSE_INPUT, CAMERA_JOYSTICK_INPUT}
+var _camera_input_method := CAMERA_MOUSE_INPUT
+
+enum _states {FREE, POSING, TALKING}
+var _player_state := _states.FREE
+
+
+# inherited functions
+func _ready() -> void:
+       _camera_spring.spring_length = camera_distance
+       
+       # debug
+       _debug.draw.add_vector(self, "velocity", 1, 3, Color(0,1,0,1))
+       _debug.draw.add_vector(self, "_lockon_direction", 1, 2, Color(1,0,0,1))
+       _debug.draw.add_vector(_camera_pivot, "rotation", 1, 3, Color(1,0,1,1))
+       _debug.draw.add_vector(self, "_last_movement_direction", 1, 3, Color(1,0,0,1))
+       
+       _debug.stats.add_property(self, "velocity", "")
+       _debug.stats.add_property(self, "_idle_time", "round")
+       _debug.stats.add_property(self, "_lockon_shift", "round")
+       _debug.stats.add_property(self, "_head_track_to", "")
+       _debug.stats.add_property(self, "_head_track_arr", "")
+
+
+func _input(event: InputEvent) -> void:
+       if event.is_action_pressed("camera-lockon"):
+               camera_lockon.emit()
+       elif event.is_action_pressed("player-run"):
+               _player_speed = jog_speed
+       elif event.is_action_released("player-run"):
+               _player_speed = walk_speed
+       elif event.is_action_pressed("player-pose"):
+               _player_state = _states.POSING
+       elif event.is_action_released("player-pose"):
+               _player_state = _states.FREE
+       elif event.is_action_pressed("player-action"):
+               # TODO: contextual action
+               if _player_state == _states.FREE:
+                       _player_state = _states.TALKING
+                       velocity = Vector3.ZERO
+               elif _player_state == _states.TALKING:
+                       _player_state = _states.FREE
+
+
+func _unhandled_input(event: InputEvent) -> void:
+       # If user clicks on the window, capture the mouse and direct the camera with it
+       if Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED:
+               return
+               
+               #_camera_input_direction *= mouse_sensitivity
+       if event is InputEventMouseMotion:
+               _camera_input_method = CAMERA_MOUSE_INPUT
+               _camera_input_direction = event.screen_relative * mouse_sensitivity
+       elif event is InputEventJoypadMotion:
+               _camera_input_method = CAMERA_JOYSTICK_INPUT
+               _camera_input_direction = Input.get_vector("camera-left", "camera-right", "camera-up", "camera-down")
+               if _camera_input_direction == Vector2.ZERO:
+                       _lockon_shift = LOCKON_CENTER
+               _camera_input_direction *= Vector2(joystick_sensitivity_x, -joystick_sensitivity_y)
+
+
+# class functions 
+func _physics_process(delta: float) -> void:
+       _process_player(delta)
+       _process_camera(delta)
+
+
+func is_camera_locked() -> bool:
+       return camera_mode == "locked"
+
+
+func set_camera_lockon(arr: Array[Node]) -> void:
+       if _camera_lockon_node:
+               _camera_lockon_node.remove_child(_lockon_instance)
+
+       if not is_camera_locked() or _lockon_shift != LOCKON_CENTER:
+               # pick closest lockon point to center of camera view
+               # must be within lockon radius
+               var shortest_target_angle = _camera.fov / 360 * 2 * PI 
+               for n: Node3D in arr:
+                       if _camera_lockon_node == n:
+                               continue
+                               
+                       var target_dir := _camera_pivot.global_position - n.global_position
+                       if target_dir.length() < camera_lockon_radius:
+                               var target_angle = shortest_target_angle
+                               if _lockon_shift == LOCKON_CENTER:
+                                       var camera_dir = _camera.global_position - _camera_pivot.global_position
+                                       target_angle = target_dir.angle_to(camera_dir)
+                               else:
+                                       # check to make sure if lockon switch is a node to the left if player pressed left,
+                                       # else lockon switch to something to the right
+                                       target_angle = target_dir.signed_angle_to(_lockon_direction, Vector3.UP)
+                                       if _lockon_shift == LOCKON_RIGHT and target_angle <= 0:
+                                               continue
+                                       if _lockon_shift == LOCKON_LEFT and target_angle >= 0:
+                                               continue
+                                               
+                                       target_angle = abs(target_angle)
+                               if target_angle < shortest_target_angle:
+                                       shortest_target_angle = target_angle
+                                       _camera_lockon_node = n
+               
+               if _camera_lockon_node:
+                       _camera_lockon_node.add_child(_lockon_instance)
+                       camera_mode = "locked"
+       else:
+               camera_mode = "unlocked"
+               _camera_lockon_node = null
+               _lockon_direction = Vector3.ZERO
+               
+               # TODO: move all skin stuff to its own reset function
+               _skin.move_forward()
+               _skin.set_hips_direction(0)
+               
+               # always reset shift to center!
+               _lockon_shift = LOCKON_CENTER
+
+
+func _process_camera(delta: float) -> void:
+       if not is_camera_locked():
+               # vertical camera rotation
+               _camera_pivot.rotation.x += _camera_input_direction.y * delta
+               _camera_pivot.rotation.x = clamp(_camera_pivot.rotation.x, -PI / 6, PI / 3)
+
+               # horizontal camera rotation
+               _camera_pivot.rotation.y -= _camera_input_direction.x * delta
+
+               # reset mouse movement vector if mouse input
+               if _camera_input_method == CAMERA_MOUSE_INPUT:
+                       _camera_input_direction = Vector2.ZERO
+       else:
+               # camera should lerp to a set height
+               _camera_pivot.rotation.x = lerp(_camera_pivot.rotation.x, 0.0, delta)
+               _camera_pivot.rotation.z = lerp(_camera_pivot.rotation.z, 0.0, delta)
+               
+               # keep camera pivot pointed towards locked object
+               if _camera_lockon_node:
+                       # calculate target vector between node position and player
+                       var lock_vector := _camera_pivot.global_position - _camera_lockon_node.global_position
+                       _lockon_direction = lock_vector
+                       lock_vector.y = 0
+                       var target_angle = Vector3.BACK.signed_angle_to(lock_vector, Vector3.UP)
+                       _camera_pivot.global_rotation.y = lerp_angle(_camera_pivot.global_rotation.y, target_angle, rotation_speed * delta)
+                               
+                       # if player indicates right or left, emit lockon signal again to collect array and split it
+                       if _camera_input_direction.x < -lockon_sensitivity and _lockon_shift != LOCKON_LEFT:
+                               _lockon_shift = LOCKON_LEFT
+                               camera_lockon.emit()
+                       elif _camera_input_direction.x > lockon_sensitivity and _lockon_shift != LOCKON_RIGHT:
+                               _lockon_shift = LOCKON_RIGHT
+                               camera_lockon.emit()
+
+
+# Get the XZ input direction based on player's input relative to the camera
+func _get_player_move_direction() -> Vector3:
+       var input_dir := Input.get_vector("player-left", "player-right", "player-forward", "player-backward")
+       var forward := _camera.global_basis.z
+       var right := _camera.global_basis.x
+       var move_direction := (forward * input_dir.y + right * input_dir.x).normalized()
+       move_direction.y = 0
+       return move_direction
+
+
+func _process_player_floor(move_direction: Vector3, delta: float) -> void:
+       # if player is landing, then just return
+       if _skin.current_state() == "landing":
+               return
+       elif _skin.current_state() == "fall":
+               if velocity.length() > hard_landing_limit:
+                       velocity = Vector3.ZERO
+                       _skin.landing()
+                       return
+               else:
+                       _skin.move_forward()
+       
+       # if we're not stuck, then it's okay to set the velocity
+       velocity = velocity.move_toward(move_direction * _player_speed, acceleration * delta)   
+       
+       # if player jumps, then we're done
+       if Input.is_action_just_pressed("player-jump"):
+               velocity.y = jump_speed
+               _idle_time = 0.0
+               _skin.jump()
+               return
+
+       # also, if we're moving, we're not idle
+       # last movement direction required for skin orientation
+       if move_direction.length() < 0.2:
+               if velocity == Vector3.ZERO:
+                       _idle_time += delta
+               if _idle_time > idle_timeout:
+                       _skin.idle()
+                       return
+       else:
+               _last_movement_direction = move_direction
+               _idle_time = 0.0
+
+       # now handle skin rotation and animation
+       var movement_speed := Vector3(velocity.x, 0, velocity.z).length()
+       _skin.movement_speed(movement_speed)
+       
+       # if camera is unlocked, rotate whole skin to face movement direction
+       # else, rotate to face camera pivot global Y direction
+       var skin_target_angle := Vector3.BACK.signed_angle_to(_last_movement_direction, Vector3.UP)
+       
+       # lean into momentum just a little bit
+       _skin.rotation.z = lerp_angle(
+               _skin.rotation.z,
+               clamp(_last_movement_direction.signed_angle_to(velocity, Vector3.UP) * movement_speed * 0.08, -PI/4, PI/ 4),
+               rotation_speed * delta * 0.25
+               )
+
+       if not is_camera_locked():
+               _skin.move_forward()
+                       
+               _skin.global_rotation.y = lerp_angle(
+                       _skin.global_rotation.y, 
+                       skin_target_angle, 
+                       rotation_speed * delta
+                       )
+       else: # camera is locked
+               var movement_angle := _skin.global_rotation.y - skin_target_angle
+               if abs(movement_angle) < (PI / 2):
+                       _skin.move_forward()
+               else:
+                       _skin.move_backward()
+                       
+               _skin.global_rotation.y = lerp_angle(
+                       _skin.global_rotation.y, 
+                       _camera_pivot.global_rotation.y - PI, 
+                       rotation_speed * delta)
+                       
+               # hips rotate towards the direction of movement
+               # else hips rotate toward skin global Y direction
+               # if moving backwards, then target_angle is inverted 
+               if movement_speed > 0.1:
+                       var target_hips_dir := lerp_angle(
+                                       _skin.global_rotation.y + _skin.get_hips_direction(), 
+                                       skin_target_angle if abs(movement_angle) < (PI / 2) else (skin_target_angle - PI), 
+                                       rotation_speed * delta
+                                       ) - _skin.global_rotation.y
+                       _skin.set_hips_direction(target_hips_dir)
+               else:
+                       _skin.set_hips_direction(lerp_angle(_skin.get_hips_direction(), 0, rotation_speed * delta))
+
+
+func _process_player_falling(move_direction: Vector3, delta: float) -> void:
+       velocity += get_gravity() * fall_speed * delta
+       velocity += move_direction * air_speed * delta
+       _skin.fall()
+
+
+func _process_player(delta: float) -> void:
+       var move_direction := _get_player_move_direction()
+
+       if is_on_floor():
+               if _player_state == _states.POSING:
+                       _skin.pose()
+               elif _player_state == _states.TALKING:
+                       _skin.talk()
+               else:
+                       _process_player_floor(move_direction, delta)
+       else:
+               _process_player_falling(move_direction, delta)
+       
+       move_and_slide()
+
+
+func _on_head_turn_area_entered(area: Area3D) -> void:
+       for node in area.get_parent().get_children().filter(func(c): return c.is_in_group("player_head_turn")):
+               var i = _head_track_arr.find(node)
+               if i < 0:
+                       _head_track_arr.append(node)
+
+
+func _on_head_turn_area_exited(area: Area3D) -> void:
+       for node in area.get_parent().get_children().filter(func(c): return c.is_in_group("player_head_turn")):
+               var i = _head_track_arr.find(node)
+               if i >= 0:
+                       _head_track_arr.remove_at(i)
diff --git a/player/player.tscn b/player/player.tscn
new file mode 100644 (file)
index 0000000..ebef779
--- /dev/null
@@ -0,0 +1,69 @@
+[gd_scene load_steps=10 format=3 uid="uid://cp6xm8gp6csx"]
+
+[ext_resource type="Script" path="res://player/player.gd" id="1_h17j6"]
+[ext_resource type="PackedScene" uid="uid://2tvylmtejq0u" path="res://william.tscn" id="1_sujn1"]
+[ext_resource type="Script" path="res://ux/debug_draw_3d.gd" id="3_4m0p1"]
+[ext_resource type="Script" path="res://ux/debug_overlay.gd" id="3_lokna"]
+[ext_resource type="Script" path="res://ux/debug_stats.gd" id="5_n0cdm"]
+
+[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_2yjd0"]
+
+[sub_resource type="SphereShape3D" id="SphereShape3D_4dtvp"]
+
+[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_frf40"]
+dof_blur_far_enabled = true
+dof_blur_far_distance = 20.0
+
+[sub_resource type="CylinderShape3D" id="CylinderShape3D_ntdse"]
+radius = 5.0
+
+[node name="player" type="CharacterBody3D"]
+script = ExtResource("1_h17j6")
+camera_mode = "unlocked"
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
+shape = SubResource("CapsuleShape3D_2yjd0")
+
+[node name="WilliamSkin" parent="." instance=ExtResource("1_sujn1")]
+unique_name_in_owner = true
+transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.027907, 0)
+
+[node name="cameraPivot" type="Node3D" parent="."]
+
+[node name="SpringArm3D" type="SpringArm3D" parent="cameraPivot"]
+transform = Transform3D(1, 0, 0, 0, 0.946525, 0.322629, 0, -0.322629, 0.946525, 0, 1.588, 0)
+shape = SubResource("SphereShape3D_4dtvp")
+
+[node name="Camera3D" type="Camera3D" parent="cameraPivot/SpringArm3D"]
+attributes = SubResource("CameraAttributesPractical_frf40")
+fov = 80.0
+
+[node name="headTurn" type="Area3D" parent="."]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="headTurn"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
+shape = SubResource("CylinderShape3D_ntdse")
+
+[node name="DebugOverlay" type="CanvasLayer" parent="."]
+unique_name_in_owner = true
+visible = false
+script = ExtResource("3_lokna")
+
+[node name="DebugDraw3D" type="Control" parent="DebugOverlay"]
+layout_mode = 3
+anchors_preset = 0
+offset_right = 40.0
+offset_bottom = 40.0
+script = ExtResource("3_4m0p1")
+
+[node name="DebugStats" type="MarginContainer" parent="DebugOverlay"]
+offset_right = 40.0
+offset_bottom = 40.0
+script = ExtResource("5_n0cdm")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="DebugOverlay/DebugStats"]
+layout_mode = 2
+
+[connection signal="area_entered" from="headTurn" to="." method="_on_head_turn_area_entered"]
+[connection signal="area_exited" from="headTurn" to="." method="_on_head_turn_area_exited"]
index 5e79132adf1d69cf929d6f61b8bc262845b95955..f304173a87e2902086ba612418da268c77644b59 100644 (file)
@@ -11,5 +11,63 @@ config_version=5
 [application]
 
 config/name="test"
 [application]
 
 config/name="test"
+run/main_scene="res://test/test.tscn"
 config/features=PackedStringArray("4.3", "Forward Plus")
 config/icon="res://icon.svg"
 config/features=PackedStringArray("4.3", "Forward Plus")
 config/icon="res://icon.svg"
+
+[display]
+
+window/size/viewport_width=3456
+window/size/viewport_height=1944
+
+[input]
+
+player-left={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
+]
+}
+player-right={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
+]
+}
+player-forward={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null)
+]
+}
+player-backward={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
+]
+}
+left_click={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
+]
+}
+camera-lockon={
+"deadzone": 0.5,
+"events": []
+}
+player-run={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+]
+}
+player-pose={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
+]
+}
+player-action={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null)
+]
+}
+player-jump={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
+]
+}
diff --git a/test/test.gd b/test/test.gd
new file mode 100644 (file)
index 0000000..9780536
--- /dev/null
@@ -0,0 +1,14 @@
+extends Node3D
+
+
+@onready var player = $player
+
+
+func _input(event: InputEvent) -> void:
+       if event.is_action_pressed("left_click"):
+               Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
+       elif event.is_action_pressed("ui_cancel"):
+               if Input.mouse_mode == Input.MOUSE_MODE_VISIBLE:
+                       get_tree().quit()
+               else:
+                       Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
diff --git a/test/test.tscn b/test/test.tscn
new file mode 100644 (file)
index 0000000..11371fd
--- /dev/null
@@ -0,0 +1,35 @@
+[gd_scene load_steps=6 format=3 uid="uid://c0pxmaobqvkh4"]
+
+[ext_resource type="PackedScene" uid="uid://cp6xm8gp6csx" path="res://player/player.tscn" id="1_apkq8"]
+[ext_resource type="Script" path="res://test/test.gd" id="1_qjknf"]
+
+[sub_resource type="PlaneMesh" id="PlaneMesh_w7hmo"]
+size = Vector2(20, 20)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hkn0r"]
+albedo_color = Color(0.374491, 0.329823, 0.326247, 1)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_hby1n"]
+data = PackedVector3Array(10, 0, 10, -10, 0, 10, 10, 0, -10, -10, 0, 10, -10, 0, -10, 10, 0, -10)
+
+[node name="Test" type="Node3D"]
+script = ExtResource("1_qjknf")
+
+[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
+transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 4.18999, 0)
+shadow_enabled = true
+
+[node name="player" parent="." instance=ExtResource("1_apkq8")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.200905, 0, 1.53554)
+
+[node name="map" type="Node3D" parent="."]
+
+[node name="MeshInstance3D" type="MeshInstance3D" parent="map"]
+mesh = SubResource("PlaneMesh_w7hmo")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_hkn0r")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="map/MeshInstance3D"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="map/MeshInstance3D/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_hby1n")
diff --git a/ux/debug_draw_3d.gd b/ux/debug_draw_3d.gd
new file mode 100644 (file)
index 0000000..65d512f
--- /dev/null
@@ -0,0 +1,49 @@
+extends Control
+
+
+class Vector:
+       var object  # The node to follow
+       var property  # The property to draw
+       var scale  # Scale factor
+       var width  # Line width
+       var color  # Draw color
+
+       func _init(_object, _property, _scale, _width, _color) -> void:
+               object = _object
+               property = _property
+               scale = _scale
+               width = _width
+               color = _color
+
+       func draw(node: Control, camera: Camera3D) -> void:
+               var start = camera.unproject_position(object.global_transform.origin)
+               var endv = object.global_transform.origin + object.get(property) * scale
+               var end = camera.unproject_position(endv)
+               if start != end:
+                       node.draw_line(start, end, color, width)
+                       if camera.is_position_in_frustum(endv):
+                               node.draw_triangle(end, start.direction_to(end), width * 2, color)
+
+
+var vectors = []  # Array to hold all registered values.
+
+func draw_triangle(pos: Vector2, dir: Vector2, length: float, color: Color) -> void:
+       var a = pos + dir.rotated(-PI / 2) * length
+       var b = pos + dir * length
+       var c = pos + dir.rotated(PI / 2) * length
+       var points = PackedVector2Array([a, b, c])
+       draw_polygon(points, PackedColorArray([color]))
+
+
+func _process(_delta: float) -> void:
+       queue_redraw()
+
+
+func _draw() -> void:
+       var camera = get_viewport().get_camera_3d()
+       for vector in vectors:
+               vector.draw(self, camera)
+
+
+func add_vector(object, property, vscale, width, color) -> void:
+       vectors.append(Vector.new(object, property, vscale, width, color))
diff --git a/ux/debug_overlay.gd b/ux/debug_overlay.gd
new file mode 100644 (file)
index 0000000..9358517
--- /dev/null
@@ -0,0 +1,18 @@
+extends CanvasLayer
+
+
+@onready var draw = $DebugDraw3D
+@onready var stats = $DebugStats
+
+
+func _ready():
+       if not InputMap.has_action("toggle_debug"):
+               InputMap.add_action("toggle_debug")
+               var ev = InputEventKey.new()
+               ev.physical_keycode = KEY_BACKSLASH
+               InputMap.action_add_event("toggle_debug", ev)
+
+
+func _input(event):
+       if event.is_action_pressed("toggle_debug"):
+               self.visible = not self.visible
diff --git a/ux/debug_stats.gd b/ux/debug_stats.gd
new file mode 100644 (file)
index 0000000..28880dd
--- /dev/null
@@ -0,0 +1,60 @@
+extends MarginContainer
+
+
+class Property:
+       var num_format = "%4.2f"
+       var object  # The object being tracked.
+       var property  # The property to display (NodePath).
+       var label_ref  # A reference to the Label.
+       var display  # Display option (rounded, etc.)
+
+       func _init(_object, _property, _label, _display):
+               object = _object
+               property = _property
+               label_ref = _label
+               display = _display
+
+       func set_label():
+               # Sets the label's text.
+               var s = object.name + "/" + property + " : "
+               var p = object.get_indexed(property)
+               match display:
+                       "":
+                               s += str(p)
+                       "length":
+                               s += num_format % p.length()
+                       "round":
+                               match typeof(p):
+                                       TYPE_INT, TYPE_FLOAT:
+                                               s += num_format % p
+                                       TYPE_VECTOR2, TYPE_VECTOR3:
+                                               s += str(p.round())
+               label_ref.text = s
+
+var props = []  # An array of the tracked properties.
+var _labelSettings: LabelSettings = null
+
+
+func _ready() -> void:
+       _labelSettings = LabelSettings.new()
+       _labelSettings.font_size = 25
+
+
+func _process(_delta):
+       if not visible:
+               return
+       for prop in props:
+               prop.set_label()
+
+
+func add_property(object, property, display):
+       var label = Label.new()
+       label.label_settings = _labelSettings
+       $VBoxContainer.add_child(label)
+       props.append(Property.new(object, property, label, display))
+
+
+func remove_property(object, property):
+       for prop in props:
+               if prop.object == object and prop.property == property:
+                       props.erase(prop)
diff --git a/ux/lockon_indicator.tscn b/ux/lockon_indicator.tscn
new file mode 100644 (file)
index 0000000..dbec09e
--- /dev/null
@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=3 uid="uid://c3e31ok0vb5j1"]
+
+[sub_resource type="SphereMesh" id="SphereMesh_bi6pp"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ydpbn"]
+no_depth_test = true
+emission_enabled = true
+emission = Color(1, 1, 1, 1)
+emission_energy_multiplier = 16.0
+disable_receive_shadows = true
+fixed_size = true
+
+[node name="LockonIndicator" type="Node3D"]
+
+[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
+transform = Transform3D(0.01, 0, 0, 0, 0.01, 0, 0, 0, 0.01, 0, 0, 0)
+layers = 2
+gi_mode = 0
+mesh = SubResource("SphereMesh_bi6pp")
+surface_material_override/0 = SubResource("StandardMaterial3D_ydpbn")
index d4554c9162dee82263ad807a0592806ef6d02549..f9fcac5e131b4f301cbb6ccdcc40ee5651552bec 100644 (file)
+class_name WilliamSkin 
 extends Node3D
 
 
 extends Node3D
 
 
-# Called when the node enters the scene tree for the first time.
+@onready var animation_tree: AnimationTree = $AnimationTree
+@onready var skeleton: Skeleton3D = $base/rig/Skeleton3D
+
+
+# get tracking bones from skeleton
+var _eye_left_index  := -1
+var _eye_right_index := -1
+var _eye_track_target: Vector3 = Vector3.ZERO
+
+var _head_index := -1
+var _head_track_target: Vector3 = Vector3.ZERO
+
+
 func _ready() -> void:
 func _ready() -> void:
-       pass # Replace with function body.
+       _eye_left_index = skeleton.find_bone("DEF-eye.L")
+       _eye_right_index = skeleton.find_bone("DEF-eye.R")
+       _head_index = skeleton.find_bone("DEF-spine.006")
+
+
+func _process(_delta: float) -> void:
+       if _eye_track_target != Vector3.ZERO:
+               _process_eyes_tracking()
+       if _head_track_target != Vector3.ZERO:
+               _process_head_tracking()
+
+
+# manage eye tracking
+func set_eyes_target(target: Vector3) -> void:
+       _eye_track_target = target
+
 
 
+func _process_eyes_tracking() -> void:
+       # TODO: this is broken!
+       for i in [_eye_left_index, _eye_right_index]:
+               var bone_pose: Transform3D = skeleton.global_transform * skeleton.get_bone_global_pose(i)
+               bone_pose = bone_pose.looking_at(_eye_track_target)
+               var axis: Vector3 = bone_pose.basis.x
+               bone_pose = bone_pose.rotated_local(axis, -PI/2)
+               #skeleton.set_bone_global_pose_override(i, skeleton.global_transform.affine_inverse() * bone_pose, 1, true)
+               # ^^^ this sets the bone position relative to its rest position, not after animation!
 
 
-# Called every frame. 'delta' is the elapsed time since the previous frame.
-func _process(delta: float) -> void:
+
+# TODO: manage head tracking
+func set_head_target(target: Vector3) -> void:
+       _head_track_target = target
+
+
+func _process_head_tracking() -> void:
        pass
        pass
+
+
+# manage talking and expressions
+func talk() -> void:
+       animation_tree.set("parameters/motion/transition_request", "talk")
+
+
+# manage vectored movement
+func current_state() -> String:
+       return animation_tree.get("parameters/motion/current_state")
+
+
+func set_hips_direction(direction: float) -> void:
+       animation_tree.set("parameters/hips_direction/blend_position", clamp(direction, -PI / 2, PI / 2))
+
+
+func get_hips_direction() -> float:
+       return animation_tree.get("parameters/hips_direction/blend_position")
+
+
+func pose() -> void:
+       animation_tree.set("parameters/motion/transition_request", "pose")
+
+
+func idle() -> void:
+       animation_tree.set("parameters/motion/transition_request", "idle")
+
+
+func move_forward() -> void:
+       animation_tree.set("parameters/motion/transition_request", "forward")
+
+
+func move_backward() -> void:
+       animation_tree.set("parameters/motion/transition_request", "backward")
+
+
+func movement_speed(speed: float) -> void:
+       animation_tree.set("parameters/forward/blend_position", speed)
+       animation_tree.set("parameters/backward/blend_position", speed)
+
+
+func jump() -> void:
+       animation_tree.set("parameters/motion/transition_request", "fall")
+
+
+func fall() -> void:
+       animation_tree.set("parameters/motion/transition_request", "fall")
+
+
+func landing() -> void:
+       animation_tree.set("parameters/motion/transition_request", "landing")
index d486de2e10cee7f05668006b71d605aa315ee0af..4ac8a853255ad1ed9f30f4b79e49d8cd94184aac 100644 (file)
@@ -1,4 +1,4 @@
-[gd_scene load_steps=22 format=3 uid="uid://2tvylmtejq0u"]
+[gd_scene load_steps=23 format=3 uid="uid://2tvylmtejq0u"]
 
 [ext_resource type="PackedScene" uid="uid://cd5n7um55x8ph" path="res://model/william.glb" id="1_adkxn"]
 [ext_resource type="Script" path="res://william.gd" id="2_0p3og"]
 
 [ext_resource type="PackedScene" uid="uid://cd5n7um55x8ph" path="res://model/william.glb" id="1_adkxn"]
 [ext_resource type="Script" path="res://william.gd" id="2_0p3og"]
@@ -20,6 +20,9 @@ animation = &"idle/talking2"
 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_b851n"]
 animation = &"idle/yelling"
 
 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_b851n"]
 animation = &"idle/yelling"
 
+[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_13bj0"]
+animation = &"idle/posing"
+
 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_3lsfi"]
 animation = &"move/falling"
 
 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_3lsfi"]
 animation = &"move/falling"
 
@@ -54,30 +57,15 @@ animation = &"move/run"
 blend_point_0/node = SubResource("AnimationNodeAnimation_58tc5")
 blend_point_0/pos = 0.0
 blend_point_1/node = SubResource("AnimationNodeAnimation_4hgi4")
 blend_point_0/node = SubResource("AnimationNodeAnimation_58tc5")
 blend_point_0/pos = 0.0
 blend_point_1/node = SubResource("AnimationNodeAnimation_4hgi4")
-blend_point_1/pos = 3.0
+blend_point_1/pos = 5.0
 blend_point_2/node = SubResource("AnimationNodeAnimation_onqbo")
 blend_point_2/node = SubResource("AnimationNodeAnimation_onqbo")
-blend_point_2/pos = 8.0
+blend_point_2/pos = 10.0
 blend_point_3/node = SubResource("AnimationNodeAnimation_3lefl")
 blend_point_3/pos = 15.0
 min_space = 0.0
 max_space = 15.0
 sync = true
 
 blend_point_3/node = SubResource("AnimationNodeAnimation_3lefl")
 blend_point_3/pos = 15.0
 min_space = 0.0
 max_space = 15.0
 sync = true
 
-[sub_resource type="AnimationNodeTransition" id="AnimationNodeTransition_rgwlt"]
-xfade_time = 0.5
-input_0/name = "talk"
-input_0/auto_advance = true
-input_0/break_loop_at_end = true
-input_0/reset = true
-input_1/name = "talk2"
-input_1/auto_advance = true
-input_1/break_loop_at_end = true
-input_1/reset = true
-input_2/name = "yell"
-input_2/auto_advance = true
-input_2/break_loop_at_end = true
-input_2/reset = true
-
 [sub_resource type="AnimationNodeTransition" id="AnimationNodeTransition_vbrx5"]
 xfade_time = 0.25
 input_0/name = "fall"
 [sub_resource type="AnimationNodeTransition" id="AnimationNodeTransition_vbrx5"]
 xfade_time = 0.25
 input_0/name = "fall"
@@ -104,9 +92,28 @@ input_5/name = "talk"
 input_5/auto_advance = false
 input_5/break_loop_at_end = false
 input_5/reset = true
 input_5/auto_advance = false
 input_5/break_loop_at_end = false
 input_5/reset = true
+input_6/name = "pose"
+input_6/auto_advance = false
+input_6/break_loop_at_end = false
+input_6/reset = true
+
+[sub_resource type="AnimationNodeTransition" id="AnimationNodeTransition_rgwlt"]
+xfade_time = 0.5
+input_0/name = "talk"
+input_0/auto_advance = true
+input_0/break_loop_at_end = true
+input_0/reset = true
+input_1/name = "talk2"
+input_1/auto_advance = true
+input_1/break_loop_at_end = true
+input_1/reset = true
+input_2/name = "yell"
+input_2/auto_advance = true
+input_2/break_loop_at_end = true
+input_2/reset = true
 
 [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_uygj1"]
 
 [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_uygj1"]
-graph_offset = Vector2(-627.603, 136.455)
+graph_offset = Vector2(-672.256, 18.5249)
 nodes/Animation/node = SubResource("AnimationNodeAnimation_3lsfi")
 nodes/Animation/position = Vector2(-230, -100)
 "nodes/Animation 2/node" = SubResource("AnimationNodeAnimation_wa16o")
 nodes/Animation/node = SubResource("AnimationNodeAnimation_3lsfi")
 nodes/Animation/position = Vector2(-230, -100)
 "nodes/Animation 2/node" = SubResource("AnimationNodeAnimation_wa16o")
@@ -116,110 +123,129 @@ nodes/Animation/position = Vector2(-230, -100)
 "nodes/Animation 4/node" = SubResource("AnimationNodeAnimation_8ufbv")
 "nodes/Animation 4/position" = Vector2(-180, 760)
 "nodes/Animation 5/node" = SubResource("AnimationNodeAnimation_ry6ix")
 "nodes/Animation 4/node" = SubResource("AnimationNodeAnimation_8ufbv")
 "nodes/Animation 4/position" = Vector2(-180, 760)
 "nodes/Animation 5/node" = SubResource("AnimationNodeAnimation_ry6ix")
-"nodes/Animation 5/position" = Vector2(-190, 920)
+"nodes/Animation 5/position" = Vector2(-190, 900)
 "nodes/Animation 6/node" = SubResource("AnimationNodeAnimation_b851n")
 "nodes/Animation 6/node" = SubResource("AnimationNodeAnimation_b851n")
-"nodes/Animation 6/position" = Vector2(-190, 1070)
-nodes/BlendSpace1D/node = SubResource("AnimationNodeBlendSpace1D_4rddd")
-nodes/BlendSpace1D/position = Vector2(-230, 200)
-"nodes/BlendSpace1D 2/node" = SubResource("AnimationNodeBlendSpace1D_h1uk8")
-"nodes/BlendSpace1D 2/position" = Vector2(-240, 520)
-nodes/Transition/node = SubResource("AnimationNodeTransition_rgwlt")
-nodes/Transition/position = Vector2(80, 790)
+"nodes/Animation 6/position" = Vector2(-180, 1030)
+"nodes/Animation 7/node" = SubResource("AnimationNodeAnimation_13bj0")
+"nodes/Animation 7/position" = Vector2(630, 620)
+nodes/backward/node = SubResource("AnimationNodeBlendSpace1D_h1uk8")
+nodes/backward/position = Vector2(-240, 520)
+nodes/forward/node = SubResource("AnimationNodeBlendSpace1D_4rddd")
+nodes/forward/position = Vector2(-230, 200)
 nodes/motion/node = SubResource("AnimationNodeTransition_vbrx5")
 nodes/motion/node = SubResource("AnimationNodeTransition_vbrx5")
-nodes/motion/position = Vector2(470, 140)
-nodes/output/position = Vector2(800, 160)
-node_connections = [&"Transition", 0, &"Animation 4", &"Transition", 1, &"Animation 5", &"Transition", 2, &"Animation 6", &"motion", 0, &"Animation", &"motion", 1, &"Animation 2", &"motion", 2, &"BlendSpace1D", &"motion", 3, &"Animation 3", &"motion", 4, &"BlendSpace1D 2", &"motion", 5, &"Transition", &"output", 0, &"motion"]
+nodes/motion/position = Vector2(860, 80)
+nodes/output/position = Vector2(1190, 100)
+nodes/talking/node = SubResource("AnimationNodeTransition_rgwlt")
+nodes/talking/position = Vector2(80, 790)
+node_connections = [&"motion", 0, &"Animation", &"motion", 1, &"Animation 2", &"motion", 2, &"forward", &"motion", 3, &"Animation 3", &"motion", 4, &"backward", &"motion", 5, &"talking", &"motion", 6, &"Animation 7", &"output", 0, &"motion", &"talking", 0, &"Animation 4", &"talking", 1, &"Animation 5", &"talking", 2, &"Animation 6"]
 
 [node name="william" instance=ExtResource("1_adkxn")]
 script = ExtResource("2_0p3og")
 
 [node name="Skeleton3D" parent="base/rig" index="0"]
 
 [node name="william" instance=ExtResource("1_adkxn")]
 script = ExtResource("2_0p3og")
 
 [node name="Skeleton3D" parent="base/rig" index="0"]
-bones/0/position = Vector3(0.016649, 0.969333, -0.121985)
-bones/0/rotation = Quaternion(0.172743, -0.0126947, -0.0137409, 0.984789)
-bones/1/rotation = Quaternion(-0.0644764, -6.12701e-10, -1.49245e-08, 0.997919)
-bones/2/rotation = Quaternion(-0.0577586, -0.0243685, 0.0220824, 0.997789)
+bones/0/position = Vector3(-0.0543097, 0.945187, -0.097963)
+bones/0/rotation = Quaternion(0.154592, 0.0141124, -0.0023227, 0.987875)
+bones/1/rotation = Quaternion(-0.0644764, 2.34048e-09, -1.32068e-08, 0.997919)
+bones/1/scale = Vector3(1, 1, 1)
+bones/2/rotation = Quaternion(-0.0636345, -0.0204647, 0.0164624, 0.997628)
 bones/2/scale = Vector3(1, 1, 1)
 bones/2/scale = Vector3(1, 1, 1)
-bones/3/rotation = Quaternion(0.0198853, -0.0773104, 0.0218743, 0.996569)
+bones/3/rotation = Quaternion(0.0146275, -0.0648416, 0.0159828, 0.99766)
 bones/3/scale = Vector3(1, 1, 1)
 bones/3/scale = Vector3(1, 1, 1)
-bones/4/rotation = Quaternion(0.204558, 0.0338454, -0.020503, 0.978054)
-bones/5/rotation = Quaternion(-0.0948411, -0.0187163, 0.00178334, 0.995315)
-bones/6/rotation = Quaternion(-0.115667, 0.102749, -0.0256811, 0.987626)
-bones/8/position = Vector3(0.016649, 0.969333, -0.121985)
-bones/8/rotation = Quaternion(-0.0683421, -0.736396, -0.427224, 0.520125)
-bones/9/position = Vector3(0.016649, 0.969333, -0.121985)
-bones/9/rotation = Quaternion(-0.0537887, 0.727494, 0.409183, 0.548114)
+bones/4/rotation = Quaternion(0.194288, 0.0246839, -0.00973452, 0.980586)
+bones/4/scale = Vector3(1, 1, 1)
+bones/5/rotation = Quaternion(-0.0948385, -0.0200721, 0.00191248, 0.995288)
+bones/6/rotation = Quaternion(-0.0932458, 0.0681049, -0.0134362, 0.99322)
+bones/8/position = Vector3(-0.0543097, 0.945187, -0.097963)
+bones/8/rotation = Quaternion(-0.0767669, -0.731944, -0.403731, 0.543476)
+bones/9/position = Vector3(-0.0543097, 0.945187, -0.097963)
+bones/9/rotation = Quaternion(-0.0650232, 0.747206, 0.405638, 0.522411)
 bones/9/scale = Vector3(1, 1, 1)
 bones/9/scale = Vector3(1, 1, 1)
-bones/10/position = Vector3(0.13772, 0.941237, -0.11586)
-bones/10/rotation = Quaternion(-0.703228, -0.0273248, -0.055696, 0.708252)
-bones/11/position = Vector3(-0.106097, 0.948911, -0.120801)
-bones/11/rotation = Quaternion(-0.710738, -0.0269002, -0.0561998, 0.700692)
-bones/12/position = Vector3(0.0404851, 0.888617, 0.0577689)
-bones/12/rotation = Quaternion(0.997894, 0.0493118, 0.0181738, 0.0380282)
-bones/13/rotation = Quaternion(-0.0821081, 0.00374066, -0.0399303, 0.995816)
-bones/14/rotation = Quaternion(-0.03542, 0.000715594, -0.0110358, 0.999311)
-bones/15/position = Vector3(-0.0194724, 0.890504, 0.0565537)
-bones/15/rotation = Quaternion(0.998023, 0.048912, 0.0179721, 0.0351438)
-bones/16/rotation = Quaternion(-0.0789948, 0.00330875, -0.039346, 0.996093)
-bones/17/rotation = Quaternion(-0.0353102, 0.000763027, -0.010944, 0.999316)
-bones/18/position = Vector3(0.0110681, 0.892959, 0.0347284)
-bones/18/rotation = Quaternion(0.0218648, 0.606764, 0.794581, -0.000738197)
-bones/19/rotation = Quaternion(-0.232545, -0.0176497, 0.075927, 0.969457)
-bones/20/rotation = Quaternion(-0.170586, -0.0105524, 0.0608194, 0.983407)
-bones/21/rotation = Quaternion(-0.113694, -0.00620888, 0.0541224, 0.992021)
-bones/22/rotation = Quaternion(-0.0680347, -0.00305904, 0.0443469, 0.996692)
-bones/23/position = Vector3(0.150201, 0.932329, -0.0869841)
-bones/23/rotation = Quaternion(0.999636, -0.0111853, 0.0106619, -0.0221063)
-bones/23/scale = Vector3(1, 1, 1)
-bones/24/rotation = Quaternion(-2.31268e-09, -0.0422427, 8.38026e-10, 0.999107)
-bones/25/rotation = Quaternion(0.186002, -0.0422451, -0.0232256, 0.981366)
-bones/25/scale = Vector3(1, 1, 1)
-bones/26/rotation = Quaternion(2.75658e-08, 0.033076, 1.03588e-08, 0.999453)
-bones/27/rotation = Quaternion(-0.64979, 0.0329059, 0.0149796, 0.759254)
-bones/27/scale = Vector3(1, 1, 1)
-bones/28/rotation = Quaternion(-7.0567e-05, 0.942666, -0.333738, -0.000198885)
-bones/28/scale = Vector3(1, 1, 1)
-bones/29/position = Vector3(-0.120273, 0.940841, -0.0924656)
-bones/29/rotation = Quaternion(0.929681, -0.0181837, 0.00364595, 0.367898)
-bones/29/scale = Vector3(1, 1, 1)
-bones/30/rotation = Quaternion(5.77282e-08, 0.0266973, 2.93406e-08, 0.999644)
-bones/31/rotation = Quaternion(0.389518, 0.0267209, 0.0279059, 0.920208)
-bones/31/scale = Vector3(1, 1, 1)
-bones/32/rotation = Quaternion(-2.49842e-09, 0.0172383, -2.58048e-08, 0.999851)
-bones/33/rotation = Quaternion(-0.585083, 0.0172456, -0.0606354, 0.80852)
-bones/33/scale = Vector3(0.999999, 1, 1)
-bones/34/rotation = Quaternion(7.0367e-05, 0.942965, -0.332891, 0.000198959)
-bones/34/scale = Vector3(1, 1, 1)
-bones/35/position = Vector3(-0.000291959, 1.91962, 0.0848259)
-bones/35/rotation = Quaternion(0.0658263, 0.0101688, -0.000225134, 0.997779)
-bones/36/rotation = Quaternion(0.168185, 0.569003, 0.588726, 0.548954)
-bones/36/scale = Vector3(1, 1, 1)
-bones/37/rotation = Quaternion(-0.241123, 0.0184621, -0.0778939, 0.967187)
-bones/37/scale = Vector3(1, 0.999996, 1)
-bones/38/rotation = Quaternion(-0.31407, 0.00747861, -0.0807308, 0.945932)
+bones/10/position = Vector3(0.0676743, 0.921014, -0.0970048)
+bones/10/rotation = Quaternion(-0.79234, 0.00276048, 0.00147369, 0.610071)
+bones/11/position = Vector3(-0.175886, 0.921175, -0.0899287)
+bones/11/rotation = Quaternion(-0.793959, 0.00355803, 0.00279315, 0.607955)
+bones/12/position = Vector3(-0.0191414, 0.872133, 0.0825493)
+bones/12/rotation = Quaternion(0.999839, -0.00731233, -0.0147557, -0.00709819)
+bones/13/rotation = Quaternion(0.0180564, -6.93462e-05, 0.00191796, 0.999835)
+bones/14/rotation = Quaternion(0.0423466, 3.92527e-05, 0.000829518, 0.999103)
+bones/15/position = Vector3(-0.0790256, 0.872166, 0.0842765)
+bones/15/rotation = Quaternion(0.999824, -0.00741263, -0.0147396, -0.00889758)
+bones/16/rotation = Quaternion(0.0150117, -9.8057e-05, 0.00189377, 0.999886)
+bones/17/rotation = Quaternion(0.0364526, 1.77072e-05, 0.000554607, 0.999335)
+bones/18/position = Vector3(-0.0497157, 0.874717, 0.0609404)
+bones/18/rotation = Quaternion(0.0142694, 0.565772, 0.824397, -0.00827725)
+bones/19/rotation = Quaternion(-0.256631, 0.00103883, 0.00249276, 0.966506)
+bones/20/rotation = Quaternion(-0.118914, 0.000778623, -0.00115882, 0.992904)
+bones/21/rotation = Quaternion(-0.0458966, -0.000364593, -0.00841673, 0.998911)
+bones/22/rotation = Quaternion(-0.0179514, -5.96008e-05, -0.0143702, 0.999736)
+bones/23/position = Vector3(0.081765, 0.913612, -0.068529)
+bones/23/rotation = Quaternion(0.99761, 0.0630025, -0.013426, 0.0250044)
+bones/23/scale = Vector3(1.00224, 0.995552, 1.00224)
+bones/24/rotation = Quaternion(4.54787e-09, -0.0279861, 2.26316e-08, 0.999608)
+bones/25/rotation = Quaternion(0.405807, -0.0281686, 0.0273074, 0.913116)
+bones/25/scale = Vector3(1.0001, 0.999292, 1.00063)
+bones/26/rotation = Quaternion(-3.82189e-08, -0.0212605, 1.82948e-08, 0.999774)
+bones/27/rotation = Quaternion(-0.478788, -0.0195222, 0.05283, 0.876122)
+bones/27/scale = Vector3(0.997899, 0.998541, 1.00362)
+bones/28/rotation = Quaternion(-4.76001e-05, 0.944582, -0.328275, -0.000206993)
+bones/28/scale = Vector3(0.99991, 1.0001, 0.999989)
+bones/29/position = Vector3(-0.188378, 0.913761, -0.0607375)
+bones/29/rotation = Quaternion(0.978895, 0.00189831, -0.0145393, 0.203836)
+bones/29/scale = Vector3(1.00313, 0.99381, 1.00313)
+bones/30/rotation = Quaternion(-3.84486e-08, 0.0293578, 8.12745e-09, 0.999569)
+bones/31/rotation = Quaternion(0.307441, 0.0286494, -0.0288472, 0.950698)
+bones/31/scale = Vector3(1.00015, 0.998494, 1.00141)
+bones/32/rotation = Quaternion(-2.90932e-08, 0.0179735, 8.42695e-09, 0.999839)
+bones/33/rotation = Quaternion(-0.578423, 0.0186578, 0.0338056, 0.814823)
+bones/33/scale = Vector3(0.996837, 0.997518, 1.00575)
+bones/34/rotation = Quaternion(5.41431e-05, 0.95061, -0.310387, 0.000204309)
+bones/34/scale = Vector3(0.999914, 1.0001, 0.999988)
+bones/35/position = Vector3(-0.088554, 1.90273, 0.0623807)
+bones/35/rotation = Quaternion(0.0468039, 0.00183861, 0.0172171, 0.998754)
+bones/36/rotation = Quaternion(0.168184, 0.569005, 0.588722, 0.548957)
+bones/36/scale = Vector3(0.999998, 1, 0.999998)
+bones/37/rotation = Quaternion(-0.241127, 0.0184641, -0.0778872, 0.967187)
+bones/37/scale = Vector3(1, 0.999994, 1)
+bones/38/rotation = Quaternion(-0.314067, 0.00747741, -0.0807338, 0.945932)
 bones/38/scale = Vector3(1, 1, 1)
 bones/38/scale = Vector3(1, 1, 1)
-bones/39/rotation = Quaternion(-0.223792, -0.00784312, 0.148646, 0.963203)
-bones/39/scale = Vector3(0.999989, 1.00002, 0.999989)
-bones/40/rotation = Quaternion(-0.367355, 0.263562, 0.891404, -0.0313918)
+bones/39/rotation = Quaternion(-0.223788, -0.00784351, 0.148642, 0.963205)
+bones/39/scale = Vector3(0.999993, 1.00001, 0.999993)
+bones/40/rotation = Quaternion(-0.367355, 0.263561, 0.891404, -0.0313916)
 bones/40/scale = Vector3(0.999999, 1, 1)
 bones/40/scale = Vector3(0.999999, 1, 1)
-bones/42/rotation = Quaternion(0.168181, -0.569009, -0.588715, 0.548961)
-bones/42/scale = Vector3(0.999996, 1.00001, 0.999996)
-bones/43/rotation = Quaternion(-0.241131, -0.0184678, 0.0778739, 0.967187)
-bones/43/scale = Vector3(1, 0.999995, 1)
-bones/44/rotation = Quaternion(-0.314061, -0.00747275, 0.0807462, 0.945934)
+bones/41/rotation = Quaternion(0.139165, -0.122498, 0.254064, 0.949252)
+bones/41/scale = Vector3(1, 0.999999, 1)
+bones/42/rotation = Quaternion(0.168183, -0.569005, -0.588722, 0.548957)
+bones/42/scale = Vector3(0.999998, 1, 0.999998)
+bones/43/rotation = Quaternion(-0.241125, -0.0184641, 0.0778867, 0.967188)
+bones/43/scale = Vector3(1, 0.999998, 1)
+bones/44/rotation = Quaternion(-0.314066, -0.00747598, 0.0807378, 0.945932)
 bones/44/scale = Vector3(1, 1, 1)
 bones/44/scale = Vector3(1, 1, 1)
-bones/45/rotation = Quaternion(-0.223793, 0.00784278, -0.148648, 0.963202)
-bones/45/scale = Vector3(0.99999, 1.00002, 0.99999)
-bones/46/scale = Vector3(1, 0.999998, 1)
+bones/45/rotation = Quaternion(-0.223789, 0.00784306, -0.148644, 0.963204)
+bones/45/scale = Vector3(0.999993, 1.00001, 0.999993)
+bones/46/rotation = Quaternion(0.367355, 0.263561, 0.891404, 0.0313915)
+bones/46/scale = Vector3(1, 0.999997, 1)
+bones/47/rotation = Quaternion(0.139164, 0.122498, -0.254064, 0.949252)
+bones/47/scale = Vector3(1, 1, 1)
 bones/50/rotation = Quaternion(0.235823, 0.0209284, 0.288052, 0.927888)
 bones/54/rotation = Quaternion(0.235823, -0.0209284, -0.288052, 0.927888)
 bones/50/rotation = Quaternion(0.235823, 0.0209284, 0.288052, 0.927888)
 bones/54/rotation = Quaternion(0.235823, -0.0209284, -0.288052, 0.927888)
-bones/56/scale = Vector3(0.999995, 1.00001, 0.999995)
-bones/57/scale = Vector3(1.00001, 0.99999, 1)
+bones/56/position = Vector3(0.0443385, -0.213733, 0.157378)
+bones/56/rotation = Quaternion(-0.542164, -0.1825, -0.14966, 0.806445)
+bones/56/scale = Vector3(0.999997, 1.00001, 0.999997)
+bones/57/rotation = Quaternion(0.270945, -0.0956788, -0.0183005, 0.957653)
+bones/57/scale = Vector3(1, 0.999994, 1)
+bones/58/position = Vector3(-0.0443385, -0.213733, 0.157378)
+bones/58/rotation = Quaternion(-0.542165, 0.1825, 0.14966, 0.806445)
 bones/58/scale = Vector3(1, 1, 1)
 bones/58/scale = Vector3(1, 1, 1)
-bones/59/scale = Vector3(1.00001, 0.999991, 1)
-bones/60/rotation = Quaternion(0.746153, -0.445832, -0.405328, 0.283195)
-bones/61/rotation = Quaternion(0.535987, 0.0194272, 0.557476, 0.633688)
-bones/62/rotation = Quaternion(0.746153, 0.445832, 0.405328, 0.283195)
-bones/63/rotation = Quaternion(0.535987, -0.0194272, -0.557476, 0.633688)
+bones/59/rotation = Quaternion(0.270946, 0.0956788, 0.0183006, 0.957653)
+bones/59/scale = Vector3(1, 0.999995, 1)
+bones/60/rotation = Quaternion(0.746153, -0.445831, -0.405328, 0.283194)
+bones/60/scale = Vector3(1, 1, 1)
+bones/61/rotation = Quaternion(0.535987, 0.0194268, 0.557477, 0.633688)
+bones/61/scale = Vector3(1, 1, 1)
+bones/62/rotation = Quaternion(0.746154, 0.445831, 0.405328, 0.283194)
+bones/62/scale = Vector3(1, 1, 1)
+bones/63/rotation = Quaternion(0.535987, -0.0194262, -0.557477, 0.633687)
+bones/63/scale = Vector3(0.999999, 1, 0.999999)
 bones/64/rotation = Quaternion(0.702529, 0.177161, 0.677026, 0.129235)
 bones/65/rotation = Quaternion(0.765799, 0.238889, 0.569536, 0.179201)
 bones/65/scale = Vector3(1, 1, 1)
 bones/64/rotation = Quaternion(0.702529, 0.177161, 0.677026, 0.129235)
 bones/65/rotation = Quaternion(0.765799, 0.238889, 0.569536, 0.179201)
 bones/65/scale = Vector3(1, 1, 1)
@@ -232,266 +258,292 @@ bones/69/rotation = Quaternion(0.917471, -0.15511, -0.329905, 0.159217)
 bones/69/scale = Vector3(1, 1, 0.999999)
 bones/70/rotation = Quaternion(0.88889, 2.18449e-07, 4.23856e-07, 0.458121)
 bones/70/scale = Vector3(1, 1, 1)
 bones/69/scale = Vector3(1, 1, 0.999999)
 bones/70/rotation = Quaternion(0.88889, 2.18449e-07, 4.23856e-07, 0.458121)
 bones/70/scale = Vector3(1, 1, 1)
-bones/71/rotation = Quaternion(0.125216, -2.41609e-08, 2.92723e-07, 0.99213)
+bones/71/rotation = Quaternion(0.125217, -2.08342e-08, 2.67674e-07, 0.992129)
 bones/71/scale = Vector3(0.999986, 1.00003, 0.999986)
 bones/71/scale = Vector3(0.999986, 1.00003, 0.999986)
-bones/72/rotation = Quaternion(0.999673, 5.72711e-08, -1.95365e-10, -0.0255553)
-bones/72/scale = Vector3(1, 0.999991, 1.00001)
+bones/72/rotation = Quaternion(0.999673, -6.76641e-08, -3.23684e-09, -0.0255558)
+bones/72/scale = Vector3(1, 0.999995, 1)
 bones/73/rotation = Quaternion(0.999709, 0.0117809, -0.0109535, 0.0179522)
 bones/73/scale = Vector3(1, 1, 1)
 bones/74/rotation = Quaternion(0.999709, -0.0117809, 0.0109535, 0.0179522)
 bones/74/scale = Vector3(1, 1, 1)
 bones/73/rotation = Quaternion(0.999709, 0.0117809, -0.0109535, 0.0179522)
 bones/73/scale = Vector3(1, 1, 1)
 bones/74/rotation = Quaternion(0.999709, -0.0117809, 0.0109535, 0.0179522)
 bones/74/scale = Vector3(1, 1, 1)
-bones/76/rotation = Quaternion(-6.74481e-05, -0.399368, -0.677454, 0.617707)
-bones/76/scale = Vector3(0.997754, 1.00451, 0.997754)
-bones/77/position = Vector3(0.235281, -0.087448, 0.113399)
-bones/77/rotation = Quaternion(0.5229, -0.128826, 0.827464, -0.159007)
-bones/77/scale = Vector3(1.02554, 0.953918, 1.02554)
-bones/78/rotation = Quaternion(-0.515415, 0.0662563, -0.075422, 0.85104)
-bones/78/scale = Vector3(0.893602, 1.19072, 0.942472)
-bones/79/position = Vector3(0.137218, -0.165365, 0.0375071)
-bones/79/rotation = Quaternion(-0.0453375, -0.385462, 0.542623, 0.744932)
-bones/79/scale = Vector3(1.14744, 0.759574, 1.14744)
-bones/81/rotation = Quaternion(0.0411661, 0.432175, 0.661698, 0.611299)
-bones/81/scale = Vector3(0.99767, 1.00468, 0.99767)
-bones/82/position = Vector3(-0.222979, -0.0816279, 0.129396)
-bones/82/rotation = Quaternion(-0.51818, -0.138104, 0.820641, 0.197395)
-bones/82/scale = Vector3(0.996804, 1.00681, 0.996804)
-bones/83/rotation = Quaternion(-0.492269, -0.088004, 0.0372351, 0.865182)
-bones/83/scale = Vector3(0.928517, 1.16754, 0.92307)
-bones/84/position = Vector3(-0.141557, -0.161402, 0.0396531)
-bones/84/rotation = Quaternion(-0.0463751, 0.371333, -0.578417, 0.724842)
-bones/84/scale = Vector3(1.11955, 0.797867, 1.11955)
+bones/76/rotation = Quaternion(0.0693526, -0.365649, -0.796177, 0.477068)
+bones/76/scale = Vector3(0.996941, 1.00615, 0.996941)
+bones/77/position = Vector3(0.2071, -0.149787, 0.129351)
+bones/77/rotation = Quaternion(0.515764, -0.204503, 0.799472, -0.23024)
+bones/77/scale = Vector3(1.20053, 0.715948, 1.20053)
+bones/78/rotation = Quaternion(-0.588771, 0.123701, 0.0108157, 0.798705)
+bones/78/scale = Vector3(0.815535, 0.960596, 1.36885)
+bones/79/position = Vector3(0.119831, -0.169563, 0.0473656)
+bones/79/rotation = Quaternion(-0.160611, -0.504796, 0.463043, 0.710617)
+bones/79/scale = Vector3(1.16235, 0.746255, 1.16235)
+bones/81/rotation = Quaternion(0.036675, 0.347981, 0.793969, 0.497169)
+bones/81/scale = Vector3(0.996543, 1.00695, 0.996543)
+bones/82/position = Vector3(-0.217217, -0.147614, 0.120416)
+bones/82/rotation = Quaternion(-0.509469, -0.12937, 0.817257, 0.23621)
+bones/82/scale = Vector3(1.2344, 0.684584, 1.2344)
+bones/83/rotation = Quaternion(-0.690265, -0.113049, 0.0346775, 0.713829)
+bones/83/scale = Vector3(0.819132, 0.926684, 1.45198)
+bones/84/position = Vector3(-0.126548, -0.16738, 0.0476996)
+bones/84/rotation = Quaternion(-0.132618, 0.470783, -0.504482, 0.711529)
+bones/84/scale = Vector3(1.14321, 0.769324, 1.14321)
 bones/85/scale = Vector3(1, 1, 1)
 bones/85/scale = Vector3(1, 1, 1)
-bones/86/rotation = Quaternion(0.985574, -4.08642e-08, 1.27292e-07, 0.169245)
-bones/86/scale = Vector3(1.00002, 0.99996, 1.00002)
-bones/87/rotation = Quaternion(0.350696, -1.96672e-07, -7.36989e-08, 0.936489)
-bones/87/scale = Vector3(0.999967, 1.00004, 0.999993)
+bones/86/rotation = Quaternion(0.985574, 1.40917e-07, 9.75399e-08, 0.169243)
+bones/86/scale = Vector3(1.00001, 0.999975, 1.00001)
+bones/87/rotation = Quaternion(0.350698, -3.21595e-07, 2.64431e-07, 0.936488)
+bones/87/scale = Vector3(0.999978, 1.00003, 0.999994)
+bones/88/position = Vector3(0.02808, -0.166363, 0.182278)
 bones/88/rotation = Quaternion(-0.279567, 0.622047, 0.626203, 0.377849)
 bones/88/rotation = Quaternion(-0.279567, 0.622047, 0.626203, 0.377849)
-bones/89/rotation = Quaternion(0.279568, 0.622045, 0.626205, -0.377848)
-bones/90/rotation = Quaternion(9.26091e-11, 0.707107, 0.707107, -1.54346e-10)
+bones/88/scale = Vector3(1, 1, 1)
+bones/89/position = Vector3(-0.02808, -0.166363, 0.182278)
+bones/89/rotation = Quaternion(0.279567, 0.622046, 0.626204, -0.377848)
+bones/89/scale = Vector3(1, 1, 1)
+bones/90/rotation = Quaternion(3.45375e-10, 0.707107, 0.707107, -3.8225e-10)
 bones/90/scale = Vector3(1, 1, 1)
 bones/90/scale = Vector3(1, 1, 1)
-bones/91/rotation = Quaternion(0.716764, 0.587908, 0.374738, 0.0135708)
-bones/91/scale = Vector3(1.00001, 0.999989, 1.00001)
-bones/92/rotation = Quaternion(0.267546, 0.00386691, 0.0401674, 0.9627)
-bones/92/scale = Vector3(0.999989, 1.00002, 0.999994)
-bones/93/rotation = Quaternion(0.276045, -0.0101833, -0.0901741, 0.956851)
-bones/93/scale = Vector3(0.999993, 1.00002, 0.999989)
-bones/94/rotation = Quaternion(0.228152, -0.0013965, -0.0302452, 0.973155)
-bones/94/scale = Vector3(1.00003, 0.99995, 1.00002)
-bones/95/rotation = Quaternion(-0.519612, 0.726743, 0.266946, -0.36137)
-bones/95/scale = Vector3(0.999987, 1.00003, 0.999987)
-bones/96/rotation = Quaternion(0.261345, 0.00585847, -0.0691446, 0.962748)
+bones/91/rotation = Quaternion(0.716761, 0.587912, 0.374739, 0.0135734)
+bones/91/scale = Vector3(1.00001, 0.999985, 1.00001)
+bones/92/rotation = Quaternion(0.26755, 0.00386554, 0.040173, 0.962698)
+bones/92/scale = Vector3(0.999986, 1.00002, 0.999991)
+bones/93/rotation = Quaternion(0.276038, -0.0101834, -0.0901716, 0.956854)
+bones/93/scale = Vector3(0.999998, 1.00001, 0.999993)
+bones/94/rotation = Quaternion(0.228157, -0.00139487, -0.0302529, 0.973153)
+bones/94/scale = Vector3(1.00002, 0.99996, 1.00002)
+bones/95/rotation = Quaternion(-0.519618, 0.726737, 0.266951, -0.361369)
+bones/95/scale = Vector3(0.999988, 1.00002, 0.999988)
+bones/96/rotation = Quaternion(0.261349, 0.00585855, -0.069146, 0.962747)
 bones/96/scale = Vector3(1.00001, 0.99998, 1.00001)
 bones/96/scale = Vector3(1.00001, 0.99998, 1.00001)
-bones/97/rotation = Quaternion(0.28414, 0.00941767, -0.141955, 0.948169)
-bones/97/scale = Vector3(1, 0.999996, 1)
-bones/98/rotation = Quaternion(0.241776, 0.010757, -0.190017, 0.951484)
-bones/98/scale = Vector3(0.999973, 1.00005, 0.999974)
-bones/99/rotation = Quaternion(1.56301e-08, 0.707106, 0.707107, -1.5733e-08)
+bones/97/rotation = Quaternion(0.284134, 0.00941537, -0.141944, 0.948173)
+bones/97/scale = Vector3(1, 0.999993, 1)
+bones/98/rotation = Quaternion(0.241777, 0.0107571, -0.190018, 0.951484)
+bones/98/scale = Vector3(0.999976, 1.00005, 0.999978)
+bones/99/rotation = Quaternion(1.35459e-08, 0.707106, 0.707107, -1.30769e-08)
 bones/99/scale = Vector3(1, 1, 1)
 bones/101/scale = Vector3(0.019058, 0.019058, 0.019058)
 bones/99/scale = Vector3(1, 1, 1)
 bones/101/scale = Vector3(0.019058, 0.019058, 0.019058)
-bones/105/rotation = Quaternion(9.26091e-11, 0.707107, 0.707107, -1.54346e-10)
+bones/105/rotation = Quaternion(3.45375e-10, 0.707107, 0.707107, -3.8225e-10)
 bones/105/scale = Vector3(1, 1, 1)
 bones/105/scale = Vector3(1, 1, 1)
-bones/106/rotation = Quaternion(0.716766, -0.587908, -0.374737, 0.0135684)
+bones/106/rotation = Quaternion(0.716765, -0.587908, -0.374737, 0.0135696)
 bones/106/scale = Vector3(1.00001, 0.99999, 1.00001)
 bones/106/scale = Vector3(1.00001, 0.99999, 1.00001)
-bones/107/rotation = Quaternion(0.267551, -0.00387361, -0.0401437, 0.962699)
-bones/107/scale = Vector3(0.999994, 1.00001, 0.999998)
-bones/108/rotation = Quaternion(0.27603, 0.0101887, 0.0901503, 0.956858)
-bones/108/scale = Vector3(0.999995, 1.00001, 0.999994)
-bones/109/rotation = Quaternion(0.228162, 0.00139886, 0.0302365, 0.973153)
-bones/109/scale = Vector3(1.00003, 0.999951, 1.00002)
-bones/110/rotation = Quaternion(0.519608, 0.726744, 0.266946, 0.361372)
-bones/110/scale = Vector3(0.999983, 1.00003, 0.999983)
-bones/111/rotation = Quaternion(0.261351, -0.00586338, 0.069164, 0.962745)
-bones/111/scale = Vector3(1.00002, 0.99997, 1.00001)
-bones/112/rotation = Quaternion(0.284131, -0.00940737, 0.141916, 0.948178)
-bones/112/scale = Vector3(1, 0.999988, 1.00001)
-bones/113/rotation = Quaternion(0.24178, -0.0107648, 0.190052, 0.951476)
-bones/113/scale = Vector3(0.999964, 1.00007, 0.999966)
-bones/114/rotation = Quaternion(-1.29136e-08, 0.707106, 0.707107, 1.29342e-08)
+bones/107/rotation = Quaternion(0.267552, -0.00387142, -0.0401516, 0.962699)
+bones/107/scale = Vector3(0.999992, 1.00001, 0.999996)
+bones/108/rotation = Quaternion(0.276029, 0.0101872, 0.0901552, 0.956857)
+bones/108/scale = Vector3(0.999998, 1.00001, 0.999996)
+bones/109/rotation = Quaternion(0.228164, 0.00139653, 0.0302467, 0.973152)
+bones/109/scale = Vector3(1.00002, 0.999968, 1.00001)
+bones/110/rotation = Quaternion(0.519617, 0.726738, 0.266951, 0.361369)
+bones/110/scale = Vector3(0.999986, 1.00003, 0.999986)
+bones/111/rotation = Quaternion(0.261352, -0.00585758, 0.0691426, 0.962746)
+bones/111/scale = Vector3(1.00002, 0.999975, 1.00001)
+bones/112/rotation = Quaternion(0.284131, -0.00941213, 0.141931, 0.948175)
+bones/112/scale = Vector3(1, 0.999989, 1.00001)
+bones/113/rotation = Quaternion(0.24178, -0.0107638, 0.190047, 0.951477)
+bones/113/scale = Vector3(0.999966, 1.00007, 0.999968)
+bones/114/rotation = Quaternion(-7.42324e-09, 0.707107, 0.707107, 7.43553e-09)
 bones/114/scale = Vector3(1, 1, 1)
 bones/116/scale = Vector3(0.019058, 0.019058, 0.019058)
 bones/114/scale = Vector3(1, 1, 1)
 bones/116/scale = Vector3(0.019058, 0.019058, 0.019058)
-bones/120/rotation = Quaternion(-0.707107, -2.38654e-14, 4.01943e-14, 0.707107)
+bones/120/position = Vector3(-1.87517e-10, -0.224927, 0.160554)
+bones/120/rotation = Quaternion(-0.707107, 8.86729e-10, -3.72893e-10, 0.707107)
 bones/120/scale = Vector3(1, 1, 1)
 bones/120/scale = Vector3(1, 1, 1)
-bones/121/rotation = Quaternion(-0.626054, -7.28968e-14, 2.03883e-13, 0.779779)
+bones/121/position = Vector3(-1.87522e-10, -0.21997, 0.147152)
+bones/121/rotation = Quaternion(-0.626055, 3.32561e-08, -7.4012e-09, 0.779779)
 bones/122/rotation = Quaternion(-0.185161, 6.11231e-14, -1.7405e-14, 0.982708)
 bones/123/rotation = Quaternion(-0.360016, -1.89322e-20, -6.7914e-22, 0.932946)
 bones/122/rotation = Quaternion(-0.185161, 6.11231e-14, -1.7405e-14, 0.982708)
 bones/123/rotation = Quaternion(-0.360016, -1.89322e-20, -6.7914e-22, 0.932946)
-bones/124/rotation = Quaternion(0.907365, 1.50327e-07, 3.24499e-07, 0.420345)
+bones/124/position = Vector3(6.56437e-10, -0.152483, 0.046333)
+bones/124/rotation = Quaternion(0.907365, 1.48899e-07, 3.2454e-07, 0.420345)
 bones/124/scale = Vector3(1, 1, 1)
 bones/124/scale = Vector3(1, 1, 1)
-bones/125/rotation = Quaternion(0.229329, -1.22148e-07, 6.74312e-09, 0.973349)
-bones/125/scale = Vector3(0.999999, 1, 0.999999)
-bones/126/rotation = Quaternion(-0.230472, 3.40099e-07, -5.94446e-08, 0.973079)
-bones/126/scale = Vector3(1, 0.999999, 1)
-bones/127/rotation = Quaternion(0.720382, 4.96085e-07, 5.15257e-07, 0.693578)
+bones/125/position = Vector3(-7.50093e-10, -0.26503, 0.179103)
+bones/125/rotation = Quaternion(0.229329, -1.36374e-07, 5.69019e-08, 0.973349)
+bones/125/scale = Vector3(1, 1, 1)
+bones/126/rotation = Quaternion(-0.230471, 3.43281e-07, -4.65701e-08, 0.973079)
+bones/126/scale = Vector3(1, 1, 1)
+bones/127/position = Vector3(3.75174e-10, -0.261295, 0.0806333)
+bones/127/rotation = Quaternion(0.720382, 4.88585e-07, 5.20005e-07, 0.693578)
 bones/128/rotation = Quaternion(0.993959, -0.0792359, -0.0118518, 0.0750139)
 bones/128/rotation = Quaternion(0.993959, -0.0792359, -0.0118518, 0.0750139)
-bones/128/scale = Vector3(1, 1, 1)
+bones/128/scale = Vector3(1, 0.999999, 1)
 bones/129/rotation = Quaternion(-0.407506, -0.0263002, 0.202202, 0.890147)
 bones/129/scale = Vector3(1, 1, 1)
 bones/129/rotation = Quaternion(-0.407506, -0.0263002, 0.202202, 0.890147)
 bones/129/scale = Vector3(1, 1, 1)
-bones/130/scale = Vector3(1, 1, 1)
-bones/131/rotation = Quaternion(0.993959, 0.0792359, 0.0118518, 0.0750138)
-bones/132/scale = Vector3(1, 1, 1)
+bones/130/rotation = Quaternion(-0.743149, -0.119128, 0.346344, 0.559986)
+bones/130/scale = Vector3(1, 0.999999, 1)
+bones/131/rotation = Quaternion(0.993959, 0.0792358, 0.0118518, 0.0750138)
+bones/132/rotation = Quaternion(-0.407506, 0.0263002, -0.202203, 0.890147)
 bones/133/rotation = Quaternion(-0.743149, 0.119128, -0.346344, 0.559986)
 bones/133/scale = Vector3(1, 1, 1)
 bones/133/rotation = Quaternion(-0.743149, 0.119128, -0.346344, 0.559986)
 bones/133/scale = Vector3(1, 1, 1)
-bones/134/rotation = Quaternion(-0.607269, -0.34489, -0.346712, 0.626152)
+bones/134/rotation = Quaternion(-0.607268, -0.344889, -0.34671, 0.626154)
 bones/134/scale = Vector3(1, 1, 1)
 bones/134/scale = Vector3(1, 1, 1)
-bones/135/rotation = Quaternion(-0.12499, -0.0514657, 0.270364, 0.953222)
-bones/135/scale = Vector3(0.999994, 1.00001, 0.999994)
-bones/136/rotation = Quaternion(-0.607269, 0.34489, 0.346712, 0.626152)
-bones/137/rotation = Quaternion(-0.124988, 0.0514653, -0.270363, 0.953222)
-bones/137/scale = Vector3(0.999996, 1.00001, 0.999995)
-bones/138/rotation = Quaternion(-0.56242, -0.349749, -0.375751, 0.648206)
-bones/138/scale = Vector3(1, 1, 1)
-bones/139/rotation = Quaternion(-0.0153827, 0.0395367, 0.239398, 0.969994)
-bones/139/scale = Vector3(1, 0.999998, 1)
-bones/140/rotation = Quaternion(-0.56242, 0.349749, 0.375751, 0.648206)
-bones/140/scale = Vector3(1, 1, 1)
-bones/141/rotation = Quaternion(-0.0153735, -0.039539, -0.2394, 0.969994)
-bones/141/scale = Vector3(0.999999, 1, 0.999999)
-bones/142/position = Vector3(-0.00138943, 1.93446, 0.0314696)
-bones/142/rotation = Quaternion(0.880218, -0.00443004, -0.00915588, -0.474461)
+bones/135/rotation = Quaternion(-0.124985, -0.0514645, 0.270363, 0.953223)
+bones/135/scale = Vector3(0.999996, 1.00001, 0.999996)
+bones/136/rotation = Quaternion(-0.607268, 0.34489, 0.34671, 0.626154)
+bones/136/scale = Vector3(1, 1, 1)
+bones/137/rotation = Quaternion(-0.124984, 0.0514643, -0.270363, 0.953223)
+bones/137/scale = Vector3(0.999997, 1.00001, 0.999997)
+bones/138/position = Vector3(-1.98159e-08, -0.21993, 0.199498)
+bones/138/rotation = Quaternion(-0.562419, -0.349748, -0.375747, 0.648209)
+bones/138/scale = Vector3(0.999999, 1, 0.999999)
+bones/139/rotation = Quaternion(-0.0153816, 0.0395369, 0.239395, 0.969995)
+bones/139/scale = Vector3(1, 0.999996, 1)
+bones/140/position = Vector3(-7.22048e-09, -0.21993, 0.199498)
+bones/140/rotation = Quaternion(-0.56242, 0.349748, 0.375748, 0.648208)
+bones/140/scale = Vector3(0.999999, 1, 0.999999)
+bones/141/rotation = Quaternion(-0.015374, -0.0395389, -0.239398, 0.969994)
+bones/141/scale = Vector3(1, 0.999997, 1)
+bones/142/position = Vector3(-0.0891154, 1.91553, 0.00850838)
+bones/142/rotation = Quaternion(0.888971, 0.0146877, -0.00892876, -0.457641)
 bones/142/scale = Vector3(1, 1, 1)
 bones/142/scale = Vector3(1, 1, 1)
-bones/144/rotation = Quaternion(-0.0625211, -0.002095, -0.0636183, 0.996012)
-bones/145/rotation = Quaternion(-0.0752245, -0.00480705, -0.0766621, 0.994204)
-bones/146/rotation = Quaternion(-0.107085, -0.00505388, -0.0381015, 0.993507)
-bones/147/position = Vector3(0.0539399, 1.92738, 0.0841456)
-bones/147/rotation = Quaternion(0.883057, 0.394197, -0.0633688, -0.246586)
+bones/144/rotation = Quaternion(-0.10046, 0.000173161, 0.0152906, 0.994824)
+bones/145/rotation = Quaternion(-0.096309, 0.000476621, 0.0101301, 0.9953)
+bones/146/rotation = Quaternion(-0.0918347, -0.000537472, -0.00423608, 0.995765)
+bones/147/position = Vector3(-0.0346403, 1.91229, 0.0623821)
+bones/147/rotation = Quaternion(0.881293, 0.410072, -0.0667418, -0.225186)
 bones/147/scale = Vector3(1, 1, 1)
 bones/148/rotation = Quaternion(-0.113035, 0.0734297, 0.249068, 0.95906)
 bones/147/scale = Vector3(1, 1, 1)
 bones/148/rotation = Quaternion(-0.113035, 0.0734297, 0.249068, 0.95906)
-bones/149/rotation = Quaternion(-0.0289026, 0.00552046, 0.00720634, 0.999541)
-bones/150/rotation = Quaternion(-0.0350552, 0.00458795, 0.0183222, 0.999207)
+bones/149/rotation = Quaternion(-0.0596284, 0.00423456, 0.0954755, 0.993635)
+bones/150/rotation = Quaternion(-0.0602445, 0.00520961, 0.0965962, 0.993485)
 bones/150/scale = Vector3(1, 1, 1)
 bones/150/scale = Vector3(1, 1, 1)
-bones/151/rotation = Quaternion(-0.00975353, 0.00628793, 0.122885, 0.992353)
-bones/152/position = Vector3(0.0148591, 1.92404, 0.137158)
-bones/152/rotation = Quaternion(0.385562, 0.454022, 0.739995, -0.312431)
+bones/151/rotation = Quaternion(-0.0149563, 0.0055059, 0.127324, 0.991733)
+bones/152/position = Vector3(-0.0745477, 1.90955, 0.114751)
+bones/152/rotation = Quaternion(0.376571, 0.477349, 0.729478, -0.313359)
 bones/152/scale = Vector3(1, 1, 1)
 bones/153/rotation = Quaternion(-0.240693, -0.000989651, 0.0015089, 0.9706)
 bones/152/scale = Vector3(1, 1, 1)
 bones/153/rotation = Quaternion(-0.240693, -0.000989651, 0.0015089, 0.9706)
-bones/154/rotation = Quaternion(-0.207028, -0.000249487, 0.0173969, 0.97818)
-bones/155/position = Vector3(0.000869913, 1.9234, 0.142163)
-bones/155/rotation = Quaternion(0.0084324, 0.52239, 0.852646, -0.00568779)
-bones/156/rotation = Quaternion(-0.112691, -1.76451e-10, 1.85589e-08, 0.99363)
-bones/157/rotation = Quaternion(-0.165284, 0.00233789, 0.0280696, 0.985844)
+bones/154/rotation = Quaternion(-0.236626, -0.00520473, -0.00697482, 0.971562)
+bones/155/position = Vector3(-0.0885974, 1.90862, 0.119522)
+bones/155/rotation = Quaternion(-0.00820967, 0.538437, 0.84249, -0.0151123)
+bones/156/rotation = Quaternion(-0.127257, 3.48403e-05, 0.00230921, 0.991867)
+bones/157/rotation = Quaternion(-0.166475, -0.00128013, -0.0163376, 0.985909)
 bones/157/scale = Vector3(1, 1, 1)
 bones/157/scale = Vector3(1, 1, 1)
-bones/158/position = Vector3(-0.0223609, 1.92542, 0.127236)
-bones/158/rotation = Quaternion(0.540499, -0.380203, -0.598114, -0.453394)
+bones/158/position = Vector3(-0.111584, 1.90931, 0.104119)
+bones/158/rotation = Quaternion(0.560822, -0.377937, -0.593374, -0.43652)
 bones/158/scale = Vector3(1, 1, 1)
 bones/158/scale = Vector3(1, 1, 1)
-bones/159/rotation = Quaternion(-0.254753, 0.000485697, -0.00076468, 0.967006)
+bones/159/rotation = Quaternion(-0.257311, 0.000989613, 0.0011653, 0.966327)
 bones/159/scale = Vector3(1, 1, 1)
 bones/159/scale = Vector3(1, 1, 1)
-bones/160/rotation = Quaternion(-0.207831, 0.000318847, -0.00680566, 0.978141)
-bones/161/position = Vector3(-0.0545203, 1.92728, 0.0863507)
-bones/161/rotation = Quaternion(0.884512, -0.398341, 0.0451908, -0.23858)
+bones/160/rotation = Quaternion(-0.184676, 0.00159045, 0.00155269, 0.982797)
+bones/161/position = Vector3(-0.142986, 1.90857, 0.0626328)
+bones/161/rotation = Quaternion(0.895033, -0.380082, 0.0569021, -0.226311)
 bones/161/scale = Vector3(1, 1, 1)
 bones/162/rotation = Quaternion(-0.113035, -0.0734297, -0.249068, 0.95906)
 bones/161/scale = Vector3(1, 1, 1)
 bones/162/rotation = Quaternion(-0.113035, -0.0734297, -0.249068, 0.95906)
-bones/163/rotation = Quaternion(-0.028993, -0.00804185, -0.134344, 0.990478)
-bones/164/rotation = Quaternion(-0.0385618, -0.00976954, -0.171397, 0.984399)
+bones/163/rotation = Quaternion(-0.0593413, -0.00469208, -0.0640931, 0.996167)
+bones/164/rotation = Quaternion(-0.0599532, -0.00489139, -0.076819, 0.995229)
 bones/164/scale = Vector3(1, 1, 1)
 bones/164/scale = Vector3(1, 1, 1)
-bones/165/rotation = Quaternion(-0.014143, -0.00486999, -0.166065, 0.986001)
-bones/166/position = Vector3(0.0242543, 1.55115, 0.0280308)
-bones/166/rotation = Quaternion(-0.449041, -0.424883, -0.565546, 0.545889)
-bones/167/position = Vector3(0.256226, 1.5245, 0.0189755)
-bones/167/rotation = Quaternion(-0.369844, 0.144003, 0.87992, -0.261188)
-bones/167/scale = Vector3(0.986908, 1.02671, 0.986908)
-bones/168/rotation = Quaternion(-1.13121e-08, 0.041155, 9.74064e-08, 0.999153)
-bones/169/rotation = Quaternion(0.545283, 0.0416871, 0.0108179, 0.837145)
-bones/169/scale = Vector3(0.997939, 1.03775, 0.966036)
-bones/170/rotation = Quaternion(-8.68685e-08, 0.0128806, 2.38027e-08, 0.999917)
-bones/171/rotation = Quaternion(-0.190177, 0.0191485, -0.121295, 0.97404)
-bones/171/scale = Vector3(1.01258, 0.979145, 1.00929)
-bones/172/rotation = Quaternion(0.18663, 0.392824, -0.0950839, 0.895443)
-bones/173/rotation = Quaternion(0.210977, -0.00123142, -0.0845073, 0.973831)
-bones/174/rotation = Quaternion(0.0758945, -0.00898559, -0.085519, 0.993401)
-bones/175/rotation = Quaternion(0.110533, 0.865988, 0.305311, 0.380305)
-bones/176/rotation = Quaternion(0.0563969, 0.0881307, -0.0917444, 0.99027)
+bones/165/rotation = Quaternion(-0.0138235, -0.00440513, -0.109396, 0.993892)
+bones/166/position = Vector3(-0.0539776, 1.53196, 0.0248234)
+bones/166/rotation = Quaternion(-0.503918, -0.421166, -0.513132, 0.552614)
+bones/167/position = Vector3(0.17294, 1.50565, -0.00888049)
+bones/167/rotation = Quaternion(-0.284535, 0.0567827, 0.928203, -0.232925)
+bones/167/scale = Vector3(0.989019, 1.02235, 0.989019)
+bones/168/rotation = Quaternion(5.21007e-09, 0.0275832, 1.12698e-07, 0.99962)
+bones/168/scale = Vector3(1, 1, 1)
+bones/169/rotation = Quaternion(0.399523, 0.0282019, 0.00417159, 0.91628)
+bones/169/scale = Vector3(0.998734, 1.02187, 0.980456)
+bones/170/rotation = Quaternion(-5.1239e-08, 0.0302232, -6.14124e-08, 0.999543)
+bones/171/rotation = Quaternion(-0.124008, 0.0433566, -0.0184796, 0.991161)
+bones/171/scale = Vector3(1.01076, 0.98089, 1.00901)
+bones/172/position = Vector3(-0.0197299, 0.120467, 0.0346735)
+bones/172/rotation = Quaternion(0.188222, 0.393971, -0.108051, 0.893132)
+bones/173/rotation = Quaternion(0.261003, -0.065276, -0.0869785, 0.959193)
+bones/174/rotation = Quaternion(0.0820235, -0.0286539, -0.0750801, 0.993385)
+bones/175/rotation = Quaternion(0.0872694, 0.871726, 0.285979, 0.388192)
+bones/176/rotation = Quaternion(0.122552, 0.0537678, -0.0710834, 0.988452)
 bones/176/scale = Vector3(1, 1, 1)
 bones/176/scale = Vector3(1, 1, 1)
-bones/177/rotation = Quaternion(-0.0309054, 0.145144, -0.0913125, 0.984703)
+bones/177/rotation = Quaternion(-0.00787135, 0.0995998, -0.0580613, 0.993301)
 bones/178/rotation = Quaternion(0.0706864, 0.570289, 0.0774011, 0.814729)
 bones/178/scale = Vector3(1, 1, 1)
 bones/178/rotation = Quaternion(0.0706864, 0.570289, 0.0774011, 0.814729)
 bones/178/scale = Vector3(1, 1, 1)
-bones/179/rotation = Quaternion(0.135892, 0.399238, -0.274441, 0.86419)
+bones/179/position = Vector3(-0.00738886, 0.131406, 0.00407596)
+bones/179/rotation = Quaternion(0.153511, 0.401835, -0.266712, 0.862455)
 bones/179/scale = Vector3(1, 1, 1)
 bones/179/scale = Vector3(1, 1, 1)
-bones/180/rotation = Quaternion(0.145742, -0.0118173, -0.0517318, 0.987898)
+bones/180/rotation = Quaternion(0.173473, -0.0318753, -0.0550749, 0.982781)
 bones/180/scale = Vector3(1, 1, 1)
 bones/180/scale = Vector3(1, 1, 1)
-bones/181/rotation = Quaternion(0.107587, -0.00872554, -0.08612, 0.99042)
+bones/181/rotation = Quaternion(0.111762, -0.0142218, -0.0794028, 0.990456)
+bones/182/rotation = Quaternion(0.0175236, 0.576541, 0.0027414, 0.816876)
 bones/182/scale = Vector3(1, 1, 1)
 bones/182/scale = Vector3(1, 1, 1)
-bones/183/rotation = Quaternion(0.112162, 0.429607, -0.331331, 0.832513)
-bones/184/rotation = Quaternion(0.226096, -0.0319323, -0.0852448, 0.969842)
+bones/183/position = Vector3(0.00557852, 0.125891, -0.0231761)
+bones/183/rotation = Quaternion(0.144587, 0.431567, -0.321835, 0.830221)
+bones/184/rotation = Quaternion(0.212596, -0.0230085, -0.0737671, 0.97408)
 bones/184/scale = Vector3(1, 1, 1)
 bones/184/scale = Vector3(1, 1, 1)
-bones/185/rotation = Quaternion(0.155947, -0.0214077, -0.0628172, 0.985533)
+bones/185/rotation = Quaternion(0.123657, -0.0147851, -0.0417995, 0.991334)
 bones/185/scale = Vector3(1, 1, 1)
 bones/186/rotation = Quaternion(-0.036864, 0.530677, -0.0590597, 0.84471)
 bones/186/scale = Vector3(1, 1, 1)
 bones/185/scale = Vector3(1, 1, 1)
 bones/186/rotation = Quaternion(-0.036864, 0.530677, -0.0590597, 0.84471)
 bones/186/scale = Vector3(1, 1, 1)
-bones/187/rotation = Quaternion(0.210478, 0.557523, -0.33385, 0.73035)
+bones/187/position = Vector3(0.0221778, 0.109413, -0.0432364)
+bones/187/rotation = Quaternion(0.241642, 0.547004, -0.352361, 0.719887)
 bones/187/scale = Vector3(1, 1, 1)
 bones/187/scale = Vector3(1, 1, 1)
-bones/188/rotation = Quaternion(0.271605, -0.0482729, -0.00828256, 0.961162)
+bones/188/rotation = Quaternion(0.272472, -0.0152937, 0.00168495, 0.962041)
 bones/188/scale = Vector3(1, 1, 1)
 bones/188/scale = Vector3(1, 1, 1)
-bones/189/rotation = Quaternion(0.115994, -0.0155879, -0.00269716, 0.993124)
+bones/189/rotation = Quaternion(0.0808998, -0.00844757, 0.00188976, 0.996685)
 bones/190/rotation = Quaternion(-0.0699756, 0.498239, -0.128393, 0.854621)
 bones/190/rotation = Quaternion(-0.0699756, 0.498239, -0.128393, 0.854621)
-bones/191/position = Vector3(-0.0113276, 1.55009, 0.0195325)
-bones/191/rotation = Quaternion(-0.592653, 0.248777, 0.426854, 0.636135)
-bones/192/position = Vector3(-0.201809, 1.51798, -0.111961)
-bones/192/rotation = Quaternion(0.0606607, -0.118983, 0.982985, 0.126108)
-bones/192/scale = Vector3(0.986908, 1.02671, 0.986908)
-bones/193/rotation = Quaternion(-5.89561e-09, -0.0492459, 1.18497e-08, 0.998787)
-bones/194/rotation = Quaternion(0.219456, -0.0488593, -0.0470192, 0.973263)
-bones/194/scale = Vector3(0.997613, 1.0112, 0.991752)
-bones/195/rotation = Quaternion(7.03633e-10, -0.020305, 1.34749e-07, 0.999794)
-bones/196/rotation = Quaternion(-0.0736329, -0.0262188, 0.229842, 0.970084)
-bones/196/scale = Vector3(1.00629, 0.980335, 1.01441)
-bones/197/rotation = Quaternion(0.18384, -0.392099, 0.0704207, 0.898611)
-bones/198/rotation = Quaternion(0.269824, 0.000958948, 0.130288, 0.954054)
-bones/199/rotation = Quaternion(0.0477664, 0.00603643, 0.0595422, 0.997064)
-bones/200/rotation = Quaternion(-0.175174, 0.882525, 0.25867, -0.351501)
-bones/201/rotation = Quaternion(0.11883, -0.0857743, 0.175001, 0.9736)
+bones/191/position = Vector3(-0.0898553, 1.53031, 0.0194404)
+bones/191/rotation = Quaternion(-0.579818, 0.315311, 0.45305, 0.599279)
+bones/192/position = Vector3(-0.291338, 1.49676, -0.078127)
+bones/192/rotation = Quaternion(0.140243, -0.0219534, 0.977471, 0.156207)
+bones/192/scale = Vector3(0.989023, 1.02234, 0.989023)
+bones/193/rotation = Quaternion(-4.26668e-08, -0.0396169, -4.7845e-08, 0.999215)
+bones/193/scale = Vector3(1, 1, 1)
+bones/194/rotation = Quaternion(0.256956, -0.0403347, -0.0253127, 0.965249)
+bones/194/scale = Vector3(0.998481, 1.01073, 0.991309)
+bones/195/rotation = Quaternion(-4.64077e-10, -0.03039, -4.62594e-09, 0.999538)
+bones/196/rotation = Quaternion(-0.156885, -0.0274014, 0.189813, 0.968818)
+bones/196/scale = Vector3(1.00468, 0.987645, 1.00851)
+bones/197/position = Vector3(0.0197299, 0.120467, 0.0346734)
+bones/197/rotation = Quaternion(0.178613, -0.391175, 0.0974552, 0.897542)
+bones/198/rotation = Quaternion(0.316846, 0.0644691, 0.129034, 0.937445)
+bones/199/rotation = Quaternion(0.0426719, 0.0161001, 0.048366, 0.997788)
+bones/200/position = Vector3(0.00332133, 0.0344233, 0.0338642)
+bones/200/rotation = Quaternion(-0.155229, 0.895964, 0.212698, -0.357648)
+bones/201/rotation = Quaternion(0.1008, -0.0782283, 0.0805587, 0.988549)
 bones/201/scale = Vector3(1, 1, 1)
 bones/201/scale = Vector3(1, 1, 1)
-bones/202/rotation = Quaternion(-0.0852873, 0.0292886, 0.108978, 0.989946)
+bones/202/rotation = Quaternion(-0.0417092, 0.0129002, 0.0737664, 0.99632)
 bones/203/rotation = Quaternion(0.0706864, -0.570289, -0.0774011, 0.814729)
 bones/203/scale = Vector3(1, 1, 1)
 bones/203/rotation = Quaternion(0.0706864, -0.570289, -0.0774011, 0.814729)
 bones/203/scale = Vector3(1, 1, 1)
-bones/204/rotation = Quaternion(0.117141, -0.407896, 0.194022, 0.884451)
+bones/204/position = Vector3(0.00738885, 0.131406, 0.00407594)
+bones/204/rotation = Quaternion(0.134037, -0.401953, 0.235257, 0.874712)
 bones/204/scale = Vector3(1, 1, 1)
 bones/204/scale = Vector3(1, 1, 1)
-bones/205/rotation = Quaternion(0.308817, 0.0156599, 0.161436, 0.93719)
+bones/205/rotation = Quaternion(0.294598, 0.0339288, 0.129955, 0.946136)
 bones/205/scale = Vector3(1, 1, 1)
 bones/205/scale = Vector3(1, 1, 1)
-bones/206/rotation = Quaternion(0.155682, 0.0120638, 0.11616, 0.980879)
+bones/206/rotation = Quaternion(0.113843, 0.017439, 0.0820986, 0.989947)
+bones/207/rotation = Quaternion(0.0175236, -0.576541, -0.0027414, 0.816876)
 bones/207/scale = Vector3(1, 1, 1)
 bones/207/scale = Vector3(1, 1, 1)
-bones/208/rotation = Quaternion(0.0953736, -0.443125, 0.26156, 0.852133)
-bones/209/rotation = Quaternion(0.431463, 0.0422907, 0.181997, 0.882569)
+bones/208/position = Vector3(-0.00557855, 0.125891, -0.0231762)
+bones/208/rotation = Quaternion(0.146741, -0.429588, 0.300115, 0.838959)
+bones/209/rotation = Quaternion(0.349127, 0.0306972, 0.136457, 0.926578)
 bones/209/scale = Vector3(1, 1, 1)
 bones/209/scale = Vector3(1, 1, 1)
-bones/210/rotation = Quaternion(0.170535, 0.0218573, 0.065966, 0.982898)
+bones/210/rotation = Quaternion(0.124086, 0.022454, 0.0375147, 0.991308)
 bones/210/scale = Vector3(1, 1, 1)
 bones/211/rotation = Quaternion(-0.036864, -0.530677, 0.0590597, 0.84471)
 bones/211/scale = Vector3(1, 1, 1)
 bones/210/scale = Vector3(1, 1, 1)
 bones/211/rotation = Quaternion(-0.036864, -0.530677, 0.0590597, 0.84471)
 bones/211/scale = Vector3(1, 1, 1)
-bones/212/rotation = Quaternion(0.171045, -0.574908, 0.293407, 0.744403)
+bones/212/position = Vector3(-0.0221778, 0.109413, -0.0432364)
+bones/212/rotation = Quaternion(0.236807, -0.552347, 0.315272, 0.734465)
 bones/212/scale = Vector3(1, 1, 1)
 bones/212/scale = Vector3(1, 1, 1)
-bones/213/rotation = Quaternion(0.360073, 0.0476119, 0.0100175, 0.931655)
+bones/213/rotation = Quaternion(0.321456, 0.0303744, 0.00905741, 0.946394)
 bones/213/scale = Vector3(1, 1, 1)
 bones/213/scale = Vector3(1, 1, 1)
-bones/214/rotation = Quaternion(0.099738, 0.0137441, -0.00105391, 0.994918)
+bones/214/rotation = Quaternion(0.0685803, 0.00801158, -0.00391552, 0.997606)
 bones/215/rotation = Quaternion(-0.0699756, -0.498239, 0.128393, 0.854621)
 bones/215/rotation = Quaternion(-0.0699756, -0.498239, 0.128393, 0.854621)
-bones/216/position = Vector3(0.120463, 1.40682, 0.0742752)
-bones/216/rotation = Quaternion(-0.110608, 0.579518, 0.804881, 0.063967)
+bones/216/position = Vector3(0.0476842, 1.391, 0.0707229)
+bones/216/rotation = Quaternion(-0.0864087, 0.553645, 0.827783, 0.02805)
 bones/216/scale = Vector3(1, 1, 1)
 bones/216/scale = Vector3(1, 1, 1)
-bones/217/position = Vector3(-0.10975, 1.39997, 0.0192913)
-bones/217/rotation = Quaternion(-0.11725, 0.573493, 0.80779, 0.0695233)
+bones/217/position = Vector3(-0.18457, 1.38054, 0.0359168)
+bones/217/rotation = Quaternion(-0.0865831, 0.541448, 0.835879, 0.0253966)
 bones/217/scale = Vector3(1, 1, 1)
 bones/217/scale = Vector3(1, 1, 1)
-bones/218/position = Vector3(0.214022, 1.41514, -0.065715)
-bones/218/rotation = Quaternion(-0.620135, -0.235924, -0.173955, 0.727676)
-bones/219/position = Vector3(-0.123886, 1.40288, -0.172421)
-bones/219/rotation = Quaternion(-0.638628, -0.127002, -0.086994, 0.753961)
+bones/218/position = Vector3(0.127662, 1.39248, -0.0697567)
+bones/218/rotation = Quaternion(-0.658467, -0.125614, -0.0744178, 0.738312)
+bones/219/position = Vector3(-0.217046, 1.37583, -0.131619)
+bones/219/rotation = Quaternion(-0.66219, -0.0923881, -0.0476361, 0.742091)
 
 [node name="horns" parent="base/rig/Skeleton3D" index="0"]
 
 [node name="horns" parent="base/rig/Skeleton3D" index="0"]
-transform = Transform3D(0.999793, 0.00175928, 0.0202809, 0.00092037, 0.991334, -0.131369, -0.0203364, 0.131361, 0.991126, -0.00312752, -0.0330088, -0.142605)
+transform = Transform3D(0.999417, -0.0330137, 0.0087312, 0.0337067, 0.994697, -0.0971713, -0.00547695, 0.0974096, 0.995229, -0.020514, -0.0535294, -0.0957195)
 
 [node name="iris_001" parent="base/rig/Skeleton3D" index="1"]
 
 [node name="iris_001" parent="base/rig/Skeleton3D" index="1"]
-transform = Transform3D(-0.0190541, -3.40764e-05, 0.00038617, -1.69519e-05, -0.0188928, -0.00250357, 0.0003873, -0.00250339, 0.0188889, 0.0468303, 1.78479, 0.170323)
+transform = Transform3D(-0.0190466, 0.000652148, 0.000100709, -0.000658708, -0.0189632, -0.00178056, 3.92791e-05, -0.00178297, 0.0189744, -0.038593, 1.77289, 0.153793)
 
 [node name="eye_001" parent="base/rig/Skeleton3D" index="2"]
 
 [node name="eye_001" parent="base/rig/Skeleton3D" index="2"]
-transform = Transform3D(-0.0190541, -3.40764e-05, 0.00038617, -1.69519e-05, -0.0188928, -0.00250357, 0.0003873, -0.00250339, 0.0188889, 0.0468303, 1.78479, 0.170323)
+transform = Transform3D(-0.0190466, 0.000652148, 0.000100709, -0.000658708, -0.0189632, -0.00178056, 3.92791e-05, -0.00178297, 0.0189744, -0.038593, 1.77289, 0.153793)
 
 [node name="black_001" parent="base/rig/Skeleton3D" index="3"]
 
 [node name="black_001" parent="base/rig/Skeleton3D" index="3"]
-transform = Transform3D(-0.0190541, -3.40764e-05, 0.00038617, -1.69519e-05, -0.0188928, -0.00250357, 0.0003873, -0.00250339, 0.0188889, 0.0468303, 1.78479, 0.170323)
+transform = Transform3D(-0.0190466, 0.000652148, 0.000100709, -0.000658708, -0.0189632, -0.00178056, 3.92791e-05, -0.00178297, 0.0189744, -0.038593, 1.77289, 0.153793)
 
 [node name="iris_001_2" parent="base/rig/Skeleton3D" index="4"]
 
 [node name="iris_001_2" parent="base/rig/Skeleton3D" index="4"]
-transform = Transform3D(-0.0190541, -3.40764e-05, 0.000386169, -1.69517e-05, -0.0188928, -0.00250357, 0.000387299, -0.00250339, 0.0188889, -0.0436611, 1.78471, 0.172163)
+transform = Transform3D(-0.0190466, 0.000652147, 0.000100708, -0.000658708, -0.0189632, -0.00178055, 3.9278e-05, -0.00178296, 0.0189744, -0.129049, 1.76976, 0.15398)
 
 [node name="eye_001_2" parent="base/rig/Skeleton3D" index="5"]
 
 [node name="eye_001_2" parent="base/rig/Skeleton3D" index="5"]
-transform = Transform3D(-0.0190541, -3.40764e-05, 0.000386169, -1.69517e-05, -0.0188928, -0.00250357, 0.000387299, -0.00250339, 0.0188889, -0.0436611, 1.78471, 0.172163)
+transform = Transform3D(-0.0190466, 0.000652147, 0.000100708, -0.000658708, -0.0189632, -0.00178055, 3.9278e-05, -0.00178296, 0.0189744, -0.129049, 1.76976, 0.15398)
 
 [node name="black_001_2" parent="base/rig/Skeleton3D" index="6"]
 
 [node name="black_001_2" parent="base/rig/Skeleton3D" index="6"]
-transform = Transform3D(-0.0190541, -3.40764e-05, 0.000386169, -1.69517e-05, -0.0188928, -0.00250357, 0.000387299, -0.00250339, 0.0188889, -0.0436611, 1.78471, 0.172163)
+transform = Transform3D(-0.0190466, 0.000652147, 0.000100708, -0.000658708, -0.0189632, -0.00178055, 3.9278e-05, -0.00178296, 0.0189744, -0.129049, 1.76976, 0.15398)
 
 [node name="AnimationPlayerLibrary" type="AnimationPlayer" parent="." index="2"]
 libraries = {
 
 [node name="AnimationPlayerLibrary" type="AnimationPlayer" parent="." index="2"]
 libraries = {
@@ -502,11 +554,11 @@ libraries = {
 [node name="AnimationTree" type="AnimationTree" parent="." index="3"]
 tree_root = SubResource("AnimationNodeBlendTree_uygj1")
 anim_player = NodePath("../AnimationPlayerLibrary")
 [node name="AnimationTree" type="AnimationTree" parent="." index="3"]
 tree_root = SubResource("AnimationNodeBlendTree_uygj1")
 anim_player = NodePath("../AnimationPlayerLibrary")
-parameters/BlendSpace1D/blend_position = 3.0
-"parameters/BlendSpace1D 2/blend_position" = 3.0
-parameters/Transition/current_state = "talk2"
-parameters/Transition/transition_request = ""
-parameters/Transition/current_index = 1
+parameters/backward/blend_position = 3.0
+parameters/forward/blend_position = 2.98649
 parameters/motion/current_state = "forward"
 parameters/motion/transition_request = ""
 parameters/motion/current_index = 2
 parameters/motion/current_state = "forward"
 parameters/motion/transition_request = ""
 parameters/motion/current_index = 2
+parameters/talking/current_state = "talk2"
+parameters/talking/transition_request = ""
+parameters/talking/current_index = 1