feat: update

This commit is contained in:
2026-06-12 18:05:04 +08:00
parent 8a2fb36a98
commit 9dd3c59edf
67 changed files with 2298 additions and 74 deletions
Binary file not shown.
@@ -0,0 +1,631 @@
[gd_resource type="AnimationLibrary" format=3]
[sub_resource type="Animation" id="Animation_pebao"]
length = 0.5
tracks/0/type = "rotation_3d"
tracks/0/imported = true
tracks/0/enabled = true
tracks/0/path = NodePath("GeneralSkeleton:Spine")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = PackedFloat32Array(0, 1, 0.34238845, 1.5708939e-07, -5.5968407e-08, 0.9395585, 0.033333335, 1, 0.3305442, 1.5623375e-07, -4.5335742e-08, 0.94379056, 0.06666667, 1, 0.301523, 1.5505638e-07, -1.9152363e-08, 0.9534589, 0.1, 1, 0.26518956, 1.5532987e-07, 1.39529295e-08, 0.9641963, 0.13333334, 1, 0.23179884, 1.5667713e-07, 4.533578e-08, 0.9727638, 0.16666667, 1, 0.21196172, 1.5609982e-07, 6.6536835e-08, 0.977278, 0.2, 1, 0.21154101, 1.4794188e-07, 7.5990435e-08, 0.9773691, 0.23333333, 1, 0.22426, 1.3351601e-07, 7.7956074e-08, 0.9745293, 0.26666668, 1, 0.2425952, 1.1952865e-07, 7.2984484e-08, 0.9701276, 0.3, 1, 0.25909162, 1.1277934e-07, 6.2371846e-08, 0.9658528, 0.33333334, 1, 0.27442306, 1.148871e-07, 4.4474916e-08, 0.96160907, 0.36666667, 1, 0.29247355, 1.2213901e-07, 1.9690756e-08, 0.9562736, 0.4, 1, 0.31072947, 1.326901e-07, -7.1720985e-09, 0.9504984, 0.43333334, 1, 0.32673204, 1.4408309e-07, -3.1553007e-08, 0.945117, 0.46666667, 1, 0.33807683, 1.5330711e-07, -4.9181153e-08, 0.9411185, 0.5, 1, 0.34238845, 1.5708939e-07, -5.5968407e-08, 0.9395585)
tracks/1/type = "rotation_3d"
tracks/1/imported = true
tracks/1/enabled = true
tracks/1/path = NodePath("GeneralSkeleton:Spine1")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = PackedFloat32Array(0, 1, -0.31937256, 1.9802002e-07, -3.665855e-07, 0.9476293, 0.033333335, 1, -0.33358824, 0.0012690381, -0.0018437031, 0.94271624, 0.06666667, 1, -0.36740822, 0.004161775, -0.0065399446, 0.9300275, 0.1, 1, -0.40766144, 0.0073642395, -0.012770037, 0.9130142, 0.13333334, 1, -0.44178134, 0.009988794, -0.018933056, 0.89686733, 0.16666667, 1, -0.45800525, 0.011690596, -0.023166168, 0.88857067, 0.2, 1, -0.44634637, 0.012967478, -0.024879681, 0.8944204, 0.23333333, 1, -0.41446674, 0.014149548, -0.02495417, 0.90961224, 0.26666668, 1, -0.3776802, 0.014748214, -0.023739967, 0.9255142, 0.3, 1, -0.3522593, 0.014289263, -0.021660056, 0.93554264, 0.33333334, 1, -0.3399939, 0.012479725, -0.018391669, 0.940165, 0.36666667, 1, -0.33112267, 0.009629176, -0.013909034, 0.9434361, 0.4, 1, -0.32515508, 0.0063351113, -0.009029623, 0.9455964, 0.43333334, 1, -0.32157147, 0.003219309, -0.004552275, 0.9468689, 0.46666667, 1, -0.3198295, 0.00090443454, -0.0012739573, 0.9474738, 0.5, 1, -0.31937256, 1.9802002e-07, -3.665855e-07, 0.9476293)
tracks/2/type = "rotation_3d"
tracks/2/imported = true
tracks/2/enabled = true
tracks/2/path = NodePath("GeneralSkeleton:Head")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = PackedFloat32Array(0, 1, -0.17886406, -3.554911e-07, -2.4261183e-07, 0.98387384, 0.033333335, 1, -0.18172997, -8.714442e-05, -0.00012339467, 0.9833485, 0.06666667, 1, -0.18745717, -0.00026321414, -0.00036816578, 0.9822727, 0.1, 1, -0.19174813, -0.00039689787, -0.00055041583, 0.98144394, 0.13333334, 1, -0.19031827, -0.0003522195, -0.00048988627, 0.9817223, 0.16666667, 1, -0.17886408, -3.5629157e-07, -2.422548e-07, 0.98387384, 0.2, 1, -0.14348157, 0.0010094029, 0.0015552446, 0.98965126, 0.23333333, 1, -0.08865402, 0.0023420877, 0.004085629, 0.9960514, 0.26666668, 1, -0.038101744, 0.0033183873, 0.006534733, 0.999247, 0.3, 1, -0.015910111, 0.003669463, 0.0076415697, 0.9998375, 0.33333334, 1, -0.028050866, 0.003483296, 0.007033757, 0.9995757, 0.36666667, 1, -0.058380038, 0.002956091, 0.0055398243, 0.99827474, 0.4, 1, -0.09772128, 0.0021412498, 0.0036576986, 0.99520487, 0.43333334, 1, -0.13690743, 0.001184109, 0.0018512, 0.99058145, 0.46666667, 1, -0.16690645, 0.00035402534, 0.00051823625, 0.9859726, 0.5, 1, -0.17886406, -3.554911e-07, -2.4261183e-07, 0.98387384)
tracks/3/type = "rotation_3d"
tracks/3/imported = true
tracks/3/enabled = true
tracks/3/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/3/interp = 0
tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.033333335, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.06666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.1, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.13333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.16666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.2, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.23333333, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.26666668, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.3, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.33333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.36666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.4, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.43333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.46666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.5, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077)
tracks/4/type = "position_3d"
tracks/4/imported = true
tracks/4/enabled = true
tracks/4/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, -0.0016287112, 0.14501561, 0.00025158125, 0.033333335, 1, -0.0014169419, 0.14814326, 0.0005686792, 0.06666667, 1, -0.00089517375, 0.15584946, 0.0013501979, 0.1, 1, -0.00023364913, 0.16561928, 0.0023408532, 0.13333334, 1, 0.0003972705, 0.17493771, 0.0032857032, 0.16666667, 1, 0.00082737766, 0.18128975, 0.003929783, 0.2, 1, 0.0010269169, 0.18423694, 0.0042286315, 0.23333333, 1, 0.0010866298, 0.18511865, 0.004318045, 0.26666668, 1, 0.0010166873, 0.18408589, 0.0042133117, 0.3, 1, 0.0008273692, 0.18128976, 0.0039298316, 0.33333334, 1, 0.0004748591, 0.17608373, 0.0034018615, 0.36666667, 1, -2.7718546e-05, 0.16866097, 0.0026492667, 0.4, 1, -0.00058487325, 0.16043212, 0.0018148312, 0.43333334, 1, -0.0011011158, 0.15280783, 0.001041744, 0.46666667, 1, -0.0014808996, 0.14719877, 0.0004730025, 0.5, 1, -0.0016287112, 0.14501561, 0.00025158125)
tracks/5/type = "rotation_3d"
tracks/5/imported = true
tracks/5/enabled = true
tracks/5/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = PackedFloat32Array(0, 1, -0.25816974, 0.70056593, -0.29189405, 0.59779066, 0.033333335, 1, -0.2696654, 0.67672503, -0.2821626, 0.624266, 0.06666667, 1, -0.27750358, 0.6097148, -0.27519694, 0.68956965, 0.1, 1, -0.24490495, 0.5193297, -0.30176663, 0.76108813, 0.13333334, 1, -0.17328225, 0.44258872, -0.3602416, 0.80269206, 0.16666667, 1, -0.10632605, 0.40261003, -0.41415966, 0.80936503, 0.2, 1, -0.07155382, 0.3885845, -0.4417803, 0.8054268, 0.23333333, 1, -0.060796093, 0.38500503, -0.45026466, 0.8033285, 0.26666668, 1, -0.073382966, 0.38922706, -0.4403348, 0.80574346, 0.3, 1, -0.10632607, 0.40261003, -0.41415972, 0.80936503, 0.33333334, 1, -0.16214292, 0.4344865, -0.36927068, 0.8053387, 0.36666667, 1, -0.22552416, 0.4925329, -0.31764525, 0.77823627, 0.4, 1, -0.2680392, 0.5671185, -0.28282684, 0.72563124, 0.43333334, 1, -0.27795827, 0.6372119, -0.27499014, 0.664139, 0.46666667, 1, -0.2666859, 0.68418556, -0.28469494, 0.6162123, 0.5, 1, -0.25816974, 0.70056593, -0.29189405, 0.59779066)
tracks/6/type = "rotation_3d"
tracks/6/imported = true
tracks/6/enabled = true
tracks/6/path = NodePath("GeneralSkeleton:LeftLowerArm")
tracks/6/interp = 0
tracks/6/loop_wrap = true
tracks/6/keys = PackedFloat32Array(0, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.033333335, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.06666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.1, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.13333334, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.16666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.2, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.23333333, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.26666668, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.3, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.33333334, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.36666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.4, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.43333334, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.46666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.5, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543)
tracks/7/type = "rotation_3d"
tracks/7/imported = true
tracks/7/enabled = true
tracks/7/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/7/interp = 0
tracks/7/loop_wrap = true
tracks/7/keys = PackedFloat32Array(0, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.033333335, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.06666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.1, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.13333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.16666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.2, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.23333333, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.26666668, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.3, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.33333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.36666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.4, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.43333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.46666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.5, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115)
tracks/8/type = "rotation_3d"
tracks/8/imported = true
tracks/8/enabled = true
tracks/8/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = PackedFloat32Array(0, 1, -0.26573053, -0.697032, 0.30054164, 0.59431344, 0.033333335, 1, -0.26514634, -0.7149297, 0.2971665, 0.5746869, 0.06666667, 1, -0.27849984, -0.75604916, 0.2730258, 0.5256277, 0.1, 1, -0.32284456, -0.79228413, 0.2130898, 0.47185802, 0.13333334, 1, -0.38520038, -0.80033016, 0.13477506, 0.43923572, 0.16666667, 1, -0.43050346, -0.7913746, 0.08032379, 0.42654556, 0.2, 1, -0.43999317, -0.79654443, 0.075375274, 0.40772733, 0.23333333, 1, -0.4221509, -0.81570446, 0.10790816, 0.38048744, 0.26666668, 1, -0.38773796, -0.8319144, 0.15990397, 0.36332962, 0.3, 1, -0.35406128, -0.8346237, 0.20647971, 0.36798105, 0.33333334, 1, -0.32361048, -0.8239212, 0.24414822, 0.39600748, 0.36666667, 1, -0.29427922, -0.8001748, 0.2781188, 0.4424591, 0.4, 1, -0.27420318, -0.76725876, 0.29920068, 0.49659392, 0.43333334, 1, -0.2655884, -0.73324066, 0.30566746, 0.5462494, 0.46666667, 1, -0.26483387, -0.70721585, 0.30311957, 0.5812292, 0.5, 1, -0.26573053, -0.697032, 0.30054164, 0.59431344)
tracks/9/type = "rotation_3d"
tracks/9/imported = true
tracks/9/enabled = true
tracks/9/path = NodePath("GeneralSkeleton:RightLowerArm")
tracks/9/interp = 0
tracks/9/loop_wrap = true
tracks/9/keys = PackedFloat32Array(0, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.033333335, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.06666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.1, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.13333334, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.16666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.2, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.23333333, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.26666668, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.3, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.33333334, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.36666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.4, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.43333334, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.46666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.5, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483)
tracks/10/type = "rotation_3d"
tracks/10/imported = true
tracks/10/enabled = true
tracks/10/path = NodePath("GeneralSkeleton:RightHand")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = PackedFloat32Array(0, 1, 0.054799054, -0.029264994, 0.022636186, 0.9978118, 0.033333335, 1, 0.09116625, -0.030299483, 0.017239934, 0.99522537, 0.06666667, 1, 0.1792024, -0.031148527, 0.0026243937, 0.9833155, 0.1, 1, 0.28657147, -0.028187746, -0.018351056, 0.9574683, 0.13333334, 1, 0.38179466, -0.019808618, -0.042242225, 0.9230688, 0.16666667, 1, 0.43715477, -0.008034734, -0.06635708, 0.89689904, 0.2, 1, 0.4413841, 0.008025636, -0.102265455, 0.8914356, 0.23333333, 1, 0.41133982, 0.024515117, -0.15049958, 0.898637, 0.26666668, 1, 0.36485913, 0.031785246, -0.19221742, 0.91045046, 0.3, 1, 0.32080913, 0.027082542, -0.20654342, 0.92395234, 0.33333334, 1, 0.27664217, 0.012455983, -0.18589148, 0.94273984, 0.36666667, 1, 0.22133993, -0.005549015, -0.14327416, 0.9645986, 0.4, 1, 0.16233869, -0.019880194, -0.08901763, 0.9825105, 0.43333334, 1, 0.1086173, -0.02742521, -0.035009094, 0.99308836, 0.46666667, 1, 0.06971694, -0.029351225, 0.0062599927, 0.9971153, 0.5, 1, 0.05479905, -0.029264992, 0.022636186, 0.99781173)
tracks/11/type = "rotation_3d"
tracks/11/imported = true
tracks/11/enabled = true
tracks/11/path = NodePath("GeneralSkeleton:LeftUpperLeg")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = PackedFloat32Array(0, 1, 0.940883, 0.002736509, -0.011184356, 0.33853605, 0.033333335, 1, 0.95359963, 0.0031790503, -0.011066673, 0.3008575, 0.06666667, 1, 0.97807544, 0.0042266664, -0.010710288, 0.20793241, 0.1, 1, 0.99572897, 0.005455532, -0.010139569, 0.09160368, 0.13333334, 1, -0.9998514, -0.006484103, 0.009514669, 0.01282902, 0.16666667, 1, -0.9975223, -0.007012268, 0.009132348, 0.06940254, 0.2, 1, -0.9984808, -0.006869409, 0.009240263, 0.053885274, 0.23333333, 1, 0.9998637, 0.006247379, -0.009671679, 0.011837006, 0.26666668, 1, 0.9955911, 0.005440297, -0.0101476265, 0.09309016, 0.3, 1, 0.98783773, 0.0047961557, -0.010467494, 0.15506156, 0.33333334, 1, 0.9802868, 0.0043432433, -0.010663417, 0.19724432, 0.36666667, 1, 0.9708555, 0.003878744, -0.01084106, 0.239389, 0.4, 1, 0.9605328, 0.0034431806, -0.010987218, 0.27792844, 0.43333334, 1, 0.95084333, 0.0030789094, -0.011095029, 0.30945826, 0.46666667, 1, 0.94365674, 0.002829119, -0.011161284, 0.3307257, 0.5, 1, 0.940883, 0.002736509, -0.011184356, 0.33853605)
tracks/12/type = "position_3d"
tracks/12/imported = true
tracks/12/enabled = true
tracks/12/path = NodePath("GeneralSkeleton:RightUpperLeg")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = PackedFloat32Array(0, 1, -0.15831876, 0.04106916, 0.06262902, 0.033333335, 1, -0.15831876, 0.04181904, 0.06392613, 0.06666667, 1, -0.15831876, 0.043666687, 0.06712217, 0.1, 1, -0.15831876, 0.04600911, 0.071174026, 0.13333334, 1, -0.15831874, 0.048243314, 0.075038664, 0.16666667, 1, -0.15831874, 0.049766246, 0.077673055, 0.2, 1, -0.15831873, 0.050472874, 0.078895375, 0.23333333, 1, -0.15831874, 0.050684266, 0.07926103, 0.26666668, 1, -0.15831873, 0.050436653, 0.07883269, 0.3, 1, -0.15831873, 0.049766243, 0.07767304, 0.33333334, 1, -0.15831874, 0.04851806, 0.07551395, 0.36666667, 1, -0.15831874, 0.046738375, 0.07243548, 0.4, 1, -0.15831876, 0.04476542, 0.069022715, 0.43333334, 1, -0.15831877, 0.042937417, 0.065860696, 0.46666667, 1, -0.15831876, 0.041592598, 0.06353443, 0.5, 1, -0.15831876, 0.04106916, 0.06262902)
tracks/13/type = "rotation_3d"
tracks/13/imported = true
tracks/13/enabled = true
tracks/13/path = NodePath("GeneralSkeleton:RightUpperLeg")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = PackedFloat32Array(0, 1, 0.9408831, -0.0027364467, 0.01118454, 0.33853588, 0.033333335, 1, 0.9295263, -0.0023758565, 0.0112666255, 0.36857602, 0.06666667, 1, 0.89747906, -0.0014777216, 0.011419137, 0.44090685, 0.1, 1, 0.8488037, -0.0003265249, 0.011509653, 0.52858275, 0.13333334, 1, 0.794415, 0.0007746947, 0.0114881275, 0.6072662, 0.16666667, 1, 0.753141, 0.001521891, 0.011413154, 0.6577584, 0.2, 1, 0.7328909, 0.0018665802, 0.011361854, 0.68024874, 0.23333333, 1, 0.72670186, 0.0019693715, 0.011344478, 0.6868565, 0.26666668, 1, 0.73394585, 0.0018489419, 0.011364738, 0.6791104, 0.3, 1, 0.753141, 0.0015218906, 0.011413154, 0.6577584, 0.33333334, 1, 0.7872135, 0.0009098337, 0.011478209, 0.61657304, 0.36666667, 1, 0.8318815, 3.3089607e-05, 0.011514217, 0.5548337, 0.4, 1, 0.8757436, -0.00093888794, 0.011475979, 0.48263916, 0.43333334, 1, 0.91081107, -0.0018336351, 0.011367436, 0.41266286, 0.46666667, 1, 0.9330573, -0.0024850215, 0.011243059, 0.35954335, 0.5, 1, 0.94088304, -0.0027364467, 0.01118454, 0.33853588)
tracks/14/type = "rotation_3d"
tracks/14/imported = true
tracks/14/enabled = true
tracks/14/path = NodePath("GeneralSkeleton:RightLowerLeg")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = PackedFloat32Array(0, 1, 0.0102453865, -0.009662866, -0.006262624, 0.9998812, 0.033333335, 1, 0.022396868, -0.009706593, -0.0061279926, 0.99968326, 0.06666667, 1, 0.052318934, -0.009833763, -0.005804949, 0.99856514, 0.1, 1, 0.090182155, -0.010034798, -0.0054152613, 0.99586, 0.13333334, 1, 0.12617503, -0.010266847, -0.005066629, 0.9919419, 0.16666667, 1, 0.15061763, -0.010446889, -0.0048431023, 0.98852503, 0.2, 1, 0.16192855, -0.010536185, -0.0047435127, 0.98673487, 0.23333333, 1, 0.16530792, -0.010563652, -0.0047142715, 0.98617417, 0.26666668, 1, 0.16134892, -0.010531581, -0.0047485135, 0.9868299, 0.3, 1, 0.15061763, -0.010446888, -0.004843102, 0.98852503, 0.33333334, 1, 0.13059099, -0.010297978, -0.0050254907, 0.99137014, 0.36666667, 1, 0.10194602, -0.0101064015, -0.005298909, 0.9947245, 0.4, 1, 0.07009181, -0.009922613, -0.0056192903, 0.9974754, 0.43333334, 1, 0.040512785, -0.009780071, -0.005930932, 0.99911356, 0.46666667, 1, 0.01872768, -0.009692917, -0.0061684684, 0.99975866, 0.5, 1, 0.0102453865, -0.009662866, -0.006262624, 0.9998812)
[sub_resource type="Animation" id="Animation_p0uhi"]
length = 0.5
tracks/0/type = "rotation_3d"
tracks/0/imported = true
tracks/0/enabled = true
tracks/0/path = NodePath("GeneralSkeleton:Spine")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = PackedFloat32Array(0, 1, 0.34238845, 1.5708939e-07, -5.5968407e-08, 0.9395585, 0.033333335, 1, 0.3305442, 1.5623375e-07, -4.5335742e-08, 0.94379056, 0.06666667, 1, 0.301523, 1.5505638e-07, -1.9152363e-08, 0.9534589, 0.1, 1, 0.26518956, 1.5532987e-07, 1.39529295e-08, 0.9641963, 0.13333334, 1, 0.23179884, 1.5667713e-07, 4.533578e-08, 0.9727638, 0.16666667, 1, 0.21196172, 1.5609982e-07, 6.6536835e-08, 0.977278, 0.2, 1, 0.21154101, 1.4794188e-07, 7.5990435e-08, 0.9773691, 0.23333333, 1, 0.22426, 1.3351601e-07, 7.7956074e-08, 0.9745293, 0.26666668, 1, 0.2425952, 1.1952865e-07, 7.2984484e-08, 0.9701276, 0.3, 1, 0.25909162, 1.1277934e-07, 6.2371846e-08, 0.9658528, 0.33333334, 1, 0.27442306, 1.148871e-07, 4.4474916e-08, 0.96160907, 0.36666667, 1, 0.29247355, 1.2213901e-07, 1.9690756e-08, 0.9562736, 0.4, 1, 0.31072947, 1.326901e-07, -7.1720985e-09, 0.9504984, 0.43333334, 1, 0.32673204, 1.4408309e-07, -3.1553007e-08, 0.945117, 0.46666667, 1, 0.33807683, 1.5330711e-07, -4.9181153e-08, 0.9411185, 0.5, 1, 0.34238845, 1.5708939e-07, -5.5968407e-08, 0.9395585)
tracks/1/type = "rotation_3d"
tracks/1/imported = true
tracks/1/enabled = true
tracks/1/path = NodePath("GeneralSkeleton:Spine1")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = PackedFloat32Array(0, 1, -0.31937256, 1.9802002e-07, -3.665855e-07, 0.9476293, 0.033333335, 1, -0.33358824, 0.0012690381, -0.0018437031, 0.94271624, 0.06666667, 1, -0.36740822, 0.004161775, -0.0065399446, 0.9300275, 0.1, 1, -0.40766144, 0.0073642395, -0.012770037, 0.9130142, 0.13333334, 1, -0.44178134, 0.009988794, -0.018933056, 0.89686733, 0.16666667, 1, -0.45800525, 0.011690596, -0.023166168, 0.88857067, 0.2, 1, -0.44634637, 0.012967478, -0.024879681, 0.8944204, 0.23333333, 1, -0.41446674, 0.014149548, -0.02495417, 0.90961224, 0.26666668, 1, -0.3776802, 0.014748214, -0.023739967, 0.9255142, 0.3, 1, -0.3522593, 0.014289263, -0.021660056, 0.93554264, 0.33333334, 1, -0.3399939, 0.012479725, -0.018391669, 0.940165, 0.36666667, 1, -0.33112267, 0.009629176, -0.013909034, 0.9434361, 0.4, 1, -0.32515508, 0.0063351113, -0.009029623, 0.9455964, 0.43333334, 1, -0.32157147, 0.003219309, -0.004552275, 0.9468689, 0.46666667, 1, -0.3198295, 0.00090443454, -0.0012739573, 0.9474738, 0.5, 1, -0.31937256, 1.9802002e-07, -3.665855e-07, 0.9476293)
tracks/2/type = "rotation_3d"
tracks/2/imported = true
tracks/2/enabled = true
tracks/2/path = NodePath("GeneralSkeleton:Head")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = PackedFloat32Array(0, 1, -0.17886406, -3.554911e-07, -2.4261183e-07, 0.98387384, 0.033333335, 1, -0.18172997, -8.714442e-05, -0.00012339467, 0.9833485, 0.06666667, 1, -0.18745717, -0.00026321414, -0.00036816578, 0.9822727, 0.1, 1, -0.19174813, -0.00039689787, -0.00055041583, 0.98144394, 0.13333334, 1, -0.19031827, -0.0003522195, -0.00048988627, 0.9817223, 0.16666667, 1, -0.17886408, -3.5629157e-07, -2.422548e-07, 0.98387384, 0.2, 1, -0.14348157, 0.0010094029, 0.0015552446, 0.98965126, 0.23333333, 1, -0.08865402, 0.0023420877, 0.004085629, 0.9960514, 0.26666668, 1, -0.038101744, 0.0033183873, 0.006534733, 0.999247, 0.3, 1, -0.015910111, 0.003669463, 0.0076415697, 0.9998375, 0.33333334, 1, -0.028050866, 0.003483296, 0.007033757, 0.9995757, 0.36666667, 1, -0.058380038, 0.002956091, 0.0055398243, 0.99827474, 0.4, 1, -0.09772128, 0.0021412498, 0.0036576986, 0.99520487, 0.43333334, 1, -0.13690743, 0.001184109, 0.0018512, 0.99058145, 0.46666667, 1, -0.16690645, 0.00035402534, 0.00051823625, 0.9859726, 0.5, 1, -0.17886406, -3.554911e-07, -2.4261183e-07, 0.98387384)
tracks/3/type = "rotation_3d"
tracks/3/imported = true
tracks/3/enabled = true
tracks/3/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/3/interp = 0
tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.033333335, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.06666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.1, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.13333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.16666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.2, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.23333333, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.26666668, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.3, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.33333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.36666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.4, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.43333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.46666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.5, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077)
tracks/4/type = "position_3d"
tracks/4/imported = true
tracks/4/enabled = true
tracks/4/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, -0.0016287112, 0.14501561, 0.00025158125, 0.033333335, 1, -0.0014169419, 0.14814326, 0.0005686792, 0.06666667, 1, -0.00089517375, 0.15584946, 0.0013501979, 0.1, 1, -0.00023364913, 0.16561928, 0.0023408532, 0.13333334, 1, 0.0003972705, 0.17493771, 0.0032857032, 0.16666667, 1, 0.00082737766, 0.18128975, 0.003929783, 0.2, 1, 0.0010269169, 0.18423694, 0.0042286315, 0.23333333, 1, 0.0010866298, 0.18511865, 0.004318045, 0.26666668, 1, 0.0010166873, 0.18408589, 0.0042133117, 0.3, 1, 0.0008273692, 0.18128976, 0.0039298316, 0.33333334, 1, 0.0004748591, 0.17608373, 0.0034018615, 0.36666667, 1, -2.7718546e-05, 0.16866097, 0.0026492667, 0.4, 1, -0.00058487325, 0.16043212, 0.0018148312, 0.43333334, 1, -0.0011011158, 0.15280783, 0.001041744, 0.46666667, 1, -0.0014808996, 0.14719877, 0.0004730025, 0.5, 1, -0.0016287112, 0.14501561, 0.00025158125)
tracks/5/type = "rotation_3d"
tracks/5/imported = true
tracks/5/enabled = true
tracks/5/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = PackedFloat32Array(0, 1, -0.25816974, 0.70056593, -0.29189405, 0.59779066, 0.033333335, 1, -0.2696654, 0.67672503, -0.2821626, 0.624266, 0.06666667, 1, -0.27750358, 0.6097148, -0.27519694, 0.68956965, 0.1, 1, -0.24490495, 0.5193297, -0.30176663, 0.76108813, 0.13333334, 1, -0.17328225, 0.44258872, -0.3602416, 0.80269206, 0.16666667, 1, -0.10632605, 0.40261003, -0.41415966, 0.80936503, 0.2, 1, -0.07155382, 0.3885845, -0.4417803, 0.8054268, 0.23333333, 1, -0.060796093, 0.38500503, -0.45026466, 0.8033285, 0.26666668, 1, -0.073382966, 0.38922706, -0.4403348, 0.80574346, 0.3, 1, -0.10632607, 0.40261003, -0.41415972, 0.80936503, 0.33333334, 1, -0.16214292, 0.4344865, -0.36927068, 0.8053387, 0.36666667, 1, -0.22552416, 0.4925329, -0.31764525, 0.77823627, 0.4, 1, -0.2680392, 0.5671185, -0.28282684, 0.72563124, 0.43333334, 1, -0.27795827, 0.6372119, -0.27499014, 0.664139, 0.46666667, 1, -0.2666859, 0.68418556, -0.28469494, 0.6162123, 0.5, 1, -0.25816974, 0.70056593, -0.29189405, 0.59779066)
tracks/6/type = "rotation_3d"
tracks/6/imported = true
tracks/6/enabled = true
tracks/6/path = NodePath("GeneralSkeleton:LeftLowerArm")
tracks/6/interp = 0
tracks/6/loop_wrap = true
tracks/6/keys = PackedFloat32Array(0, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.033333335, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.06666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.1, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.13333334, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.16666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.2, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.23333333, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.26666668, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.3, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.33333334, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.36666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.4, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.43333334, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.46666667, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543, 0.5, 1, 0.47699112, -0.057332963, -0.11453373, 0.86952543)
tracks/7/type = "rotation_3d"
tracks/7/imported = true
tracks/7/enabled = true
tracks/7/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/7/interp = 0
tracks/7/loop_wrap = true
tracks/7/keys = PackedFloat32Array(0, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.033333335, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.06666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.1, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.13333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.16666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.2, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.23333333, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.26666668, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.3, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.33333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.36666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.4, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.43333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.46666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.5, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115)
tracks/8/type = "rotation_3d"
tracks/8/imported = true
tracks/8/enabled = true
tracks/8/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = PackedFloat32Array(0, 1, -0.26573053, -0.697032, 0.30054164, 0.59431344, 0.033333335, 1, -0.26514634, -0.7149297, 0.2971665, 0.5746869, 0.06666667, 1, -0.27849984, -0.75604916, 0.2730258, 0.5256277, 0.1, 1, -0.32284456, -0.79228413, 0.2130898, 0.47185802, 0.13333334, 1, -0.38520038, -0.80033016, 0.13477506, 0.43923572, 0.16666667, 1, -0.43050346, -0.7913746, 0.08032379, 0.42654556, 0.2, 1, -0.43999317, -0.79654443, 0.075375274, 0.40772733, 0.23333333, 1, -0.4221509, -0.81570446, 0.10790816, 0.38048744, 0.26666668, 1, -0.38773796, -0.8319144, 0.15990397, 0.36332962, 0.3, 1, -0.35406128, -0.8346237, 0.20647971, 0.36798105, 0.33333334, 1, -0.32361048, -0.8239212, 0.24414822, 0.39600748, 0.36666667, 1, -0.29427922, -0.8001748, 0.2781188, 0.4424591, 0.4, 1, -0.27420318, -0.76725876, 0.29920068, 0.49659392, 0.43333334, 1, -0.2655884, -0.73324066, 0.30566746, 0.5462494, 0.46666667, 1, -0.26483387, -0.70721585, 0.30311957, 0.5812292, 0.5, 1, -0.26573053, -0.697032, 0.30054164, 0.59431344)
tracks/9/type = "rotation_3d"
tracks/9/imported = true
tracks/9/enabled = true
tracks/9/path = NodePath("GeneralSkeleton:RightLowerArm")
tracks/9/interp = 0
tracks/9/loop_wrap = true
tracks/9/keys = PackedFloat32Array(0, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.033333335, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.06666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.1, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.13333334, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.16666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.2, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.23333333, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.26666668, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.3, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.33333334, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.36666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.4, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.43333334, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.46666667, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483, 0.5, 1, 0.48328775, -0.0052842963, 0.021366991, 0.87518483)
tracks/10/type = "rotation_3d"
tracks/10/imported = true
tracks/10/enabled = true
tracks/10/path = NodePath("GeneralSkeleton:RightHand")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = PackedFloat32Array(0, 1, 0.054799054, -0.029264994, 0.022636186, 0.9978118, 0.033333335, 1, 0.09116625, -0.030299483, 0.017239934, 0.99522537, 0.06666667, 1, 0.1792024, -0.031148527, 0.0026243937, 0.9833155, 0.1, 1, 0.28657147, -0.028187746, -0.018351056, 0.9574683, 0.13333334, 1, 0.38179466, -0.019808618, -0.042242225, 0.9230688, 0.16666667, 1, 0.43715477, -0.008034734, -0.06635708, 0.89689904, 0.2, 1, 0.4413841, 0.008025636, -0.102265455, 0.8914356, 0.23333333, 1, 0.41133982, 0.024515117, -0.15049958, 0.898637, 0.26666668, 1, 0.36485913, 0.031785246, -0.19221742, 0.91045046, 0.3, 1, 0.32080913, 0.027082542, -0.20654342, 0.92395234, 0.33333334, 1, 0.27664217, 0.012455983, -0.18589148, 0.94273984, 0.36666667, 1, 0.22133993, -0.005549015, -0.14327416, 0.9645986, 0.4, 1, 0.16233869, -0.019880194, -0.08901763, 0.9825105, 0.43333334, 1, 0.1086173, -0.02742521, -0.035009094, 0.99308836, 0.46666667, 1, 0.06971694, -0.029351225, 0.0062599927, 0.9971153, 0.5, 1, 0.05479905, -0.029264992, 0.022636186, 0.99781173)
tracks/11/type = "rotation_3d"
tracks/11/imported = true
tracks/11/enabled = true
tracks/11/path = NodePath("GeneralSkeleton:LeftUpperLeg")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = PackedFloat32Array(0, 1, 0.940883, 0.002736509, -0.011184356, 0.33853605, 0.033333335, 1, 0.95359963, 0.0031790503, -0.011066673, 0.3008575, 0.06666667, 1, 0.97807544, 0.0042266664, -0.010710288, 0.20793241, 0.1, 1, 0.99572897, 0.005455532, -0.010139569, 0.09160368, 0.13333334, 1, -0.9998514, -0.006484103, 0.009514669, 0.01282902, 0.16666667, 1, -0.9975223, -0.007012268, 0.009132348, 0.06940254, 0.2, 1, -0.9984808, -0.006869409, 0.009240263, 0.053885274, 0.23333333, 1, 0.9998637, 0.006247379, -0.009671679, 0.011837006, 0.26666668, 1, 0.9955911, 0.005440297, -0.0101476265, 0.09309016, 0.3, 1, 0.98783773, 0.0047961557, -0.010467494, 0.15506156, 0.33333334, 1, 0.9802868, 0.0043432433, -0.010663417, 0.19724432, 0.36666667, 1, 0.9708555, 0.003878744, -0.01084106, 0.239389, 0.4, 1, 0.9605328, 0.0034431806, -0.010987218, 0.27792844, 0.43333334, 1, 0.95084333, 0.0030789094, -0.011095029, 0.30945826, 0.46666667, 1, 0.94365674, 0.002829119, -0.011161284, 0.3307257, 0.5, 1, 0.940883, 0.002736509, -0.011184356, 0.33853605)
tracks/12/type = "position_3d"
tracks/12/imported = true
tracks/12/enabled = true
tracks/12/path = NodePath("GeneralSkeleton:RightUpperLeg")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = PackedFloat32Array(0, 1, -0.15831876, 0.04106916, 0.06262902, 0.033333335, 1, -0.15831876, 0.04181904, 0.06392613, 0.06666667, 1, -0.15831876, 0.043666687, 0.06712217, 0.1, 1, -0.15831876, 0.04600911, 0.071174026, 0.13333334, 1, -0.15831874, 0.048243314, 0.075038664, 0.16666667, 1, -0.15831874, 0.049766246, 0.077673055, 0.2, 1, -0.15831873, 0.050472874, 0.078895375, 0.23333333, 1, -0.15831874, 0.050684266, 0.07926103, 0.26666668, 1, -0.15831873, 0.050436653, 0.07883269, 0.3, 1, -0.15831873, 0.049766243, 0.07767304, 0.33333334, 1, -0.15831874, 0.04851806, 0.07551395, 0.36666667, 1, -0.15831874, 0.046738375, 0.07243548, 0.4, 1, -0.15831876, 0.04476542, 0.069022715, 0.43333334, 1, -0.15831877, 0.042937417, 0.065860696, 0.46666667, 1, -0.15831876, 0.041592598, 0.06353443, 0.5, 1, -0.15831876, 0.04106916, 0.06262902)
tracks/13/type = "rotation_3d"
tracks/13/imported = true
tracks/13/enabled = true
tracks/13/path = NodePath("GeneralSkeleton:RightUpperLeg")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = PackedFloat32Array(0, 1, 0.9408831, -0.0027364467, 0.01118454, 0.33853588, 0.033333335, 1, 0.9295263, -0.0023758565, 0.0112666255, 0.36857602, 0.06666667, 1, 0.89747906, -0.0014777216, 0.011419137, 0.44090685, 0.1, 1, 0.8488037, -0.0003265249, 0.011509653, 0.52858275, 0.13333334, 1, 0.794415, 0.0007746947, 0.0114881275, 0.6072662, 0.16666667, 1, 0.753141, 0.001521891, 0.011413154, 0.6577584, 0.2, 1, 0.7328909, 0.0018665802, 0.011361854, 0.68024874, 0.23333333, 1, 0.72670186, 0.0019693715, 0.011344478, 0.6868565, 0.26666668, 1, 0.73394585, 0.0018489419, 0.011364738, 0.6791104, 0.3, 1, 0.753141, 0.0015218906, 0.011413154, 0.6577584, 0.33333334, 1, 0.7872135, 0.0009098337, 0.011478209, 0.61657304, 0.36666667, 1, 0.8318815, 3.3089607e-05, 0.011514217, 0.5548337, 0.4, 1, 0.8757436, -0.00093888794, 0.011475979, 0.48263916, 0.43333334, 1, 0.91081107, -0.0018336351, 0.011367436, 0.41266286, 0.46666667, 1, 0.9330573, -0.0024850215, 0.011243059, 0.35954335, 0.5, 1, 0.94088304, -0.0027364467, 0.01118454, 0.33853588)
tracks/14/type = "rotation_3d"
tracks/14/imported = true
tracks/14/enabled = true
tracks/14/path = NodePath("GeneralSkeleton:RightLowerLeg")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = PackedFloat32Array(0, 1, 0.0102453865, -0.009662866, -0.006262624, 0.9998812, 0.033333335, 1, 0.022396868, -0.009706593, -0.0061279926, 0.99968326, 0.06666667, 1, 0.052318934, -0.009833763, -0.005804949, 0.99856514, 0.1, 1, 0.090182155, -0.010034798, -0.0054152613, 0.99586, 0.13333334, 1, 0.12617503, -0.010266847, -0.005066629, 0.9919419, 0.16666667, 1, 0.15061763, -0.010446889, -0.0048431023, 0.98852503, 0.2, 1, 0.16192855, -0.010536185, -0.0047435127, 0.98673487, 0.23333333, 1, 0.16530792, -0.010563652, -0.0047142715, 0.98617417, 0.26666668, 1, 0.16134892, -0.010531581, -0.0047485135, 0.9868299, 0.3, 1, 0.15061763, -0.010446888, -0.004843102, 0.98852503, 0.33333334, 1, 0.13059099, -0.010297978, -0.0050254907, 0.99137014, 0.36666667, 1, 0.10194602, -0.0101064015, -0.005298909, 0.9947245, 0.4, 1, 0.07009181, -0.009922613, -0.0056192903, 0.9974754, 0.43333334, 1, 0.040512785, -0.009780071, -0.005930932, 0.99911356, 0.46666667, 1, 0.01872768, -0.009692917, -0.0061684684, 0.99975866, 0.5, 1, 0.0102453865, -0.009662866, -0.006262624, 0.9998812)
[sub_resource type="Animation" id="Animation_xciuw"]
length = 0.53333336
tracks/0/type = "position_3d"
tracks/0/imported = true
tracks/0/enabled = true
tracks/0/path = NodePath("GeneralSkeleton:Spine1")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = PackedFloat32Array(0, 1, 3.953068e-15, 0.05906236, 4.1416266e-09, 0.033333335, 1, 3.953068e-15, 0.05906236, 4.1416266e-09, 0.06666667, 1, -1.9968326e-10, 0.058797363, 0.00022272498, 0.1, 1, -7.1775574e-10, 0.058109824, 0.0008005711, 0.13333334, 1, -1.4327217e-09, 0.057161, 0.0015980205, 0.16666667, 1, -2.2230955e-09, 0.056112114, 0.0024795649, 0.2, 1, -2.9673803e-09, 0.05512437, 0.0033097274, 0.23333333, 1, -3.5441032e-09, 0.05435902, 0.003952971, 0.26666668, 1, -3.831766e-09, 0.05397725, 0.004273831, 0.3, 1, -3.745699e-09, 0.054091476, 0.0041778344, 0.33333334, 1, -3.348519e-09, 0.05461856, 0.0037348378, 0.36666667, 1, -2.739646e-09, 0.055426586, 0.0030557234, 0.4, 1, -2.018518e-09, 0.056383602, 0.0022513932, 0.43333334, 1, -1.2845572e-09, 0.05735763, 0.0014327582, 0.46666667, 1, -6.37204e-10, 0.058216736, 0.00071071676, 0.5, 1, -1.7587007e-10, 0.058828965, 0.00019616645, 0.53333336, 1, 3.953068e-15, 0.05906236, 4.1416266e-09)
tracks/1/type = "rotation_3d"
tracks/1/imported = true
tracks/1/enabled = true
tracks/1/path = NodePath("GeneralSkeleton:Spine1")
tracks/1/interp = 0
tracks/1/loop_wrap = true
tracks/1/keys = PackedFloat32Array(0, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.033333335, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.06666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.1, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.13333334, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.16666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.2, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.23333333, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.26666668, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.3, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.33333334, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.36666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.4, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.43333334, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.46666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.5, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.53333336, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262)
tracks/2/type = "position_3d"
tracks/2/imported = true
tracks/2/enabled = true
tracks/2/path = NodePath("GeneralSkeleton:Head")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = PackedFloat32Array(0, 1, -4.6746674e-14, 0.2846942, 4.029311e-08, 0.033333335, 1, -4.6746674e-14, 0.2846942, 4.029311e-08, 0.06666667, 1, 1.8372835e-11, 0.28409952, -4.25255e-05, 0.1, 1, 6.628614e-11, 0.28255674, -0.00015297998, 0.13333334, 1, 1.3236509e-10, 0.28042763, -0.00030540815, 0.16666667, 1, 2.0540808e-10, 0.2780739, -0.0004739114, 0.2, 1, 2.7420188e-10, 0.27585748, -0.0006325992, 0.23333333, 1, 3.274454e-10, 0.2741401, -0.00075552636, 0.26666668, 1, 3.5398307e-10, 0.2732835, -0.0008168635, 0.3, 1, 3.4606162e-10, 0.27353978, -0.00079850736, 0.33333334, 1, 3.0935515e-10, 0.2747225, -0.000713845, 0.36666667, 1, 2.5311647e-10, 0.2765357, -0.0005840312, 0.4, 1, 1.8652813e-10, 0.27868313, -0.0004302963, 0.43333334, 1, 1.1868731e-10, 0.2808688, -0.0002738157, 0.46666667, 1, 5.888155e-11, 0.28279662, -0.0001358146, 0.5, 1, 1.6273892e-11, 0.28417036, -3.7479695e-05, 0.53333336, 1, -4.6746674e-14, 0.2846942, 4.029311e-08)
tracks/3/type = "rotation_3d"
tracks/3/imported = true
tracks/3/enabled = true
tracks/3/path = NodePath("GeneralSkeleton:Head")
tracks/3/interp = 0
tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.033333335, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.06666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.1, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.13333334, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.16666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.2, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.23333333, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.26666668, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.3, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.33333334, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.36666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.4, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.43333334, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.46666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.5, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.53333336, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635)
tracks/4/type = "position_3d"
tracks/4/imported = true
tracks/4/enabled = true
tracks/4/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/4/interp = 0
tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, 0.09795613, 0.42777258, 0.016737785, 0.033333335, 1, 0.09795613, 0.42777258, 0.016737785, 0.06666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.1, 1, 0.09795613, 0.42777258, 0.016737785, 0.13333334, 1, 0.09795613, 0.42777258, 0.016737785, 0.16666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.2, 1, 0.09795613, 0.42777258, 0.016737785, 0.23333333, 1, 0.09795613, 0.42777258, 0.016737785, 0.26666668, 1, 0.09795613, 0.42777258, 0.016737785, 0.3, 1, 0.09795613, 0.42777258, 0.016737785, 0.33333334, 1, 0.09795613, 0.42777258, 0.016737785, 0.36666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.4, 1, 0.09795613, 0.42777258, 0.016737785, 0.43333334, 1, 0.09795613, 0.42777258, 0.016737785, 0.46666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.5, 1, 0.09795613, 0.42777258, 0.016737785, 0.53333336, 1, 0.09795613, 0.42777258, 0.016737785)
tracks/5/type = "rotation_3d"
tracks/5/imported = true
tracks/5/enabled = true
tracks/5/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/5/interp = 0
tracks/5/loop_wrap = true
tracks/5/keys = PackedFloat32Array(0, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.033333335, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.06666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.1, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.13333334, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.16666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.2, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.23333333, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.26666668, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.3, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.33333334, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.36666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.4, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.43333334, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.46666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.5, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.53333336, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432)
tracks/6/type = "position_3d"
tracks/6/imported = true
tracks/6/enabled = true
tracks/6/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = PackedFloat32Array(0, 1, -0.0016287166, 0.14501561, 0.00025157674, 0.033333335, 1, -0.0016287166, 0.14501561, 0.00025157674, 0.06666667, 1, -0.0017734149, 0.14506163, -0.0003335565, 0.1, 1, -0.0021488192, 0.14518102, -0.0018515008, 0.13333334, 1, -0.0026668992, 0.1453458, -0.0039463816, 0.16666667, 1, -0.0032396442, 0.14552797, -0.006262323, 0.2, 1, -0.0037789438, 0.1456995, -0.008443098, 0.23333333, 1, -0.004196892, 0.14583242, -0.010132994, 0.26666668, 1, -0.0044053355, 0.14589871, -0.010975973, 0.3, 1, -0.0043429704, 0.14587888, -0.0107237045, 0.33333334, 1, -0.0040551536, 0.14578734, -0.009559953, 0.36666667, 1, -0.0036139528, 0.14564702, -0.007775792, 0.4, 1, -0.003091374, 0.14548081, -0.0056629023, 0.43333334, 1, -0.0025595534, 0.14531165, -0.0035123436, 0.46666667, 1, -0.0020904627, 0.14516246, -0.0016155058, 0.5, 1, -0.0017561435, 0.14505613, -0.00026364537, 0.53333336, 1, -0.0016287166, 0.14501561, 0.00025157674)
tracks/7/type = "rotation_3d"
tracks/7/imported = true
tracks/7/enabled = true
tracks/7/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/7/interp = 0
tracks/7/loop_wrap = true
tracks/7/keys = PackedFloat32Array(0, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.033333335, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.06666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.1, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.13333334, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.16666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.2, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.23333333, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.26666668, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.3, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.33333334, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.36666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.4, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.43333334, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.46666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.5, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.53333336, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397)
tracks/8/type = "rotation_3d"
tracks/8/imported = true
tracks/8/enabled = true
tracks/8/path = NodePath("GeneralSkeleton:LeftLowerArm")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = PackedFloat32Array(0, 1, 0.33293048, -0.3350286, -0.27948672, 0.8359428, 0.033333335, 1, 0.33293048, -0.3350286, -0.27948672, 0.8359428, 0.06666667, 1, 0.3333426, -0.33511743, -0.27944934, 0.8357554, 0.1, 1, 0.33441046, -0.3353484, -0.27935344, 0.8352681, 0.13333334, 1, 0.33588165, -0.3356686, -0.27922368, 0.8345923, 0.16666667, 1, 0.337504, -0.3360242, -0.27908355, 0.8338412, 0.2, 1, 0.3390282, -0.33636126, -0.27895495, 0.8331297, 0.23333333, 1, 0.34020686, -0.33662364, -0.27885735, 0.8325758, 0.26666668, 1, 0.34079418, -0.33675486, -0.2788096, 0.83229846, 0.3, 1, 0.3406185, -0.33671555, -0.2788239, 0.8323815, 0.33333334, 1, 0.33980745, -0.3365345, -0.27889028, 0.83276385, 0.36666667, 1, 0.33856225, -0.33625814, -0.27899405, 0.83334774, 0.4, 1, 0.33708444, -0.3359321, -0.27911958, 0.83403593, 0.43333334, 1, 0.33557707, -0.33560196, -0.2792504, 0.83473265, 0.46666667, 1, 0.3342446, -0.3353123, -0.27936825, 0.835344, 0.5, 1, 0.33329365, -0.33510682, -0.27945387, 0.8357777, 0.53333336, 1, 0.33293048, -0.3350286, -0.27948672, 0.8359428)
tracks/9/type = "position_3d"
tracks/9/imported = true
tracks/9/enabled = true
tracks/9/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/9/interp = 0
tracks/9/loop_wrap = true
tracks/9/keys = PackedFloat32Array(0, 1, -0.09795646, 0.42777103, 0.016737178, 0.033333335, 1, -0.09795646, 0.42777103, 0.016737178, 0.06666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.1, 1, -0.09795646, 0.42777103, 0.016737178, 0.13333334, 1, -0.09795646, 0.42777103, 0.016737178, 0.16666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.2, 1, -0.09795646, 0.42777103, 0.016737178, 0.23333333, 1, -0.09795646, 0.42777103, 0.016737178, 0.26666668, 1, -0.09795646, 0.42777103, 0.016737178, 0.3, 1, -0.09795646, 0.42777103, 0.016737178, 0.33333334, 1, -0.09795646, 0.42777103, 0.016737178, 0.36666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.4, 1, -0.09795646, 0.42777103, 0.016737178, 0.43333334, 1, -0.09795646, 0.42777103, 0.016737178, 0.46666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.5, 1, -0.09795646, 0.42777103, 0.016737178, 0.53333336, 1, -0.09795646, 0.42777103, 0.016737178)
tracks/10/type = "rotation_3d"
tracks/10/imported = true
tracks/10/enabled = true
tracks/10/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/10/interp = 0
tracks/10/loop_wrap = true
tracks/10/keys = PackedFloat32Array(0, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.033333335, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.06666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.1, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.13333334, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.16666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.2, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.23333333, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.26666668, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.3, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.33333334, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.36666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.4, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.43333334, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.46666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.5, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.53333336, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513)
tracks/11/type = "position_3d"
tracks/11/imported = true
tracks/11/enabled = true
tracks/11/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = PackedFloat32Array(0, 1, 0.00162871, 0.14501564, 0.00025160934, 0.033333335, 1, 0.00162871, 0.14501564, 0.00025160934, 0.06666667, 1, 0.0017734237, 0.14506167, -0.00033363982, 0.1, 1, 0.0021488585, 0.14518107, -0.0018515768, 0.13333334, 1, 0.002666969, 0.14534588, -0.003946391, 0.16666667, 1, 0.0032397194, 0.14552808, -0.0062623858, 0.2, 1, 0.0037791107, 0.14569964, -0.008443264, 0.23333333, 1, 0.0041970327, 0.14583257, -0.010133039, 0.26666668, 1, 0.0044054757, 0.14589885, -0.010975776, 0.3, 1, 0.004343134, 0.14587903, -0.010723805, 0.33333334, 1, 0.0040552947, 0.14578746, -0.009559882, 0.36666667, 1, 0.0036140687, 0.14564712, -0.007775907, 0.4, 1, 0.003091463, 0.1454809, -0.005662904, 0.43333334, 1, 0.0025596116, 0.14531171, -0.003512355, 0.46666667, 1, 0.0020904616, 0.14516251, -0.0016154677, 0.5, 1, 0.001756152, 0.14505614, -0.00026373038, 0.53333336, 1, 0.00162871, 0.14501564, 0.00025160934)
tracks/12/type = "rotation_3d"
tracks/12/imported = true
tracks/12/enabled = true
tracks/12/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/12/interp = 0
tracks/12/loop_wrap = true
tracks/12/keys = PackedFloat32Array(0, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.033333335, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.06666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.1, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.13333334, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.16666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.2, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.23333333, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.26666668, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.3, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.33333334, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.36666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.4, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.43333334, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.46666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.5, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.53333336, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673)
tracks/13/type = "rotation_3d"
tracks/13/imported = true
tracks/13/enabled = true
tracks/13/path = NodePath("GeneralSkeleton:RightLowerArm")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = PackedFloat32Array(0, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706, 0.033333335, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706, 0.06666667, 1, 0.14572267, -0.0057624606, 0.26361868, 0.9535392, 0.1, 1, 0.14395136, -0.0061668158, 0.26394954, 0.9537142, 0.13333334, 1, 0.1415052, -0.0067227054, 0.26440892, 0.95394915, 0.16666667, 1, 0.1387989, -0.00733442, 0.26492098, 0.95420015, 0.2, 1, 0.13624829, -0.007907767, 0.2654071, 0.9544281, 0.23333333, 1, 0.13427058, -0.008350169, 0.2657863, 0.9545991, 0.26666668, 1, 0.13328372, -0.008570235, 0.26597643, 0.9546824, 0.3, 1, 0.133579, -0.008504472, 0.26591948, 0.9546577, 0.33333334, 1, 0.13494149, -0.008200373, 0.26565757, 0.95454156, 0.36666667, 1, 0.13702889, -0.007732628, 0.26525792, 0.95435923, 0.4, 1, 0.13949957, -0.007176376, 0.26478806, 0.95413613, 0.43333334, 1, 0.14201224, -0.006607715, 0.2643134, 0.9539011, 0.46666667, 1, 0.14422686, -0.0061040483, 0.26389793, 0.9536872, 0.5, 1, 0.14580408, -0.0057438863, 0.26360357, 0.95353097, 0.53333336, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706)
tracks/14/type = "rotation_3d"
tracks/14/imported = true
tracks/14/enabled = true
tracks/14/path = NodePath("GeneralSkeleton:RightHand")
tracks/14/interp = 0
tracks/14/loop_wrap = true
tracks/14/keys = PackedFloat32Array(0, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.033333335, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.06666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.1, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.13333334, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.16666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.2, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.23333333, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.26666668, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.3, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.33333334, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.36666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.4, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.43333334, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.46666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.5, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.53333336, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404)
[sub_resource type="Animation" id="Animation_3s20j"]
length = 0.53333336
tracks/0/type = "rotation_3d"
tracks/0/imported = true
tracks/0/enabled = true
tracks/0/path = NodePath("GeneralSkeleton:Spine1")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = PackedFloat32Array(0, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.033333335, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.06666667, 1, -0.36967796, 7.3622556e-07, -5.7895e-07, 0.92916, 0.1, 1, -0.3536466, 7.261619e-07, -5.915237e-07, 0.9353791, 0.13333334, 1, -0.3308425, 7.115929e-07, -6.0897213e-07, 0.94368595, 0.16666667, 1, -0.3045267, 6.5386905e-07, -5.016515e-07, 0.9525038, 0.2, 1, -0.27807885, 6.397511e-07, -5.1953555e-07, 0.96055824, 0.23333333, 1, -0.25499558, 5.93171e-07, -4.059512e-07, 0.96694225, 0.26666668, 1, -0.2388498, 5.863251e-07, -4.1577783e-07, 0.9710565, 0.3, 1, -0.22735487, 5.813696e-07, -4.2267945e-07, 0.973812, 0.33333334, 1, -0.21582797, 5.763327e-07, -4.295221e-07, 0.9764315, 0.36666667, 1, -0.20427102, 4.4086488e-07, -4.6350485e-07, 0.9789144, 0.4, 1, -0.19268551, 4.0969752e-07, -3.3802095e-07, 0.9812606, 0.43333334, 1, -0.2062531, 4.1433833e-07, -3.32316e-07, 0.9784987, 0.46666667, 1, -0.25086355, 3.002275e-07, -3.4639e-07, 0.9680225, 0.5, 1, -0.2977699, 3.1676177e-07, -3.3133762e-07, 0.95463765, 0.53333336, 1, -0.31937245, 3.2420442e-07, -3.240586e-07, 0.9476293)
tracks/1/type = "rotation_3d"
tracks/1/imported = true
tracks/1/enabled = true
tracks/1/path = NodePath("GeneralSkeleton:Head")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = PackedFloat32Array(0, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.033333335, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.06666667, 1, -0.13616242, -3.6564734e-07, -2.2701663e-07, 0.99068654, 0.1, 1, -0.13362825, -3.6622666e-07, -2.2608072e-07, 0.9910315, 0.13333334, 1, -0.13035151, -3.669721e-07, -2.248688e-07, 0.99146783, 0.16666667, 1, -0.12710795, -3.6770567e-07, -2.2366741e-07, 0.9918889, 0.2, 1, -0.12467444, -3.6825315e-07, -2.2276468e-07, 0.9921977, 0.23333333, 1, -0.12382844, -3.6844298e-07, -2.2245058e-07, 0.99230367, 0.26666668, 1, -0.12534747, -3.6810195e-07, -2.2301448e-07, 0.9921129, 0.3, 1, -0.12830727, -3.6743478e-07, -2.2411179e-07, 0.99173445, 0.33333334, 1, -0.13126573, -3.6676465e-07, -2.2520717e-07, 0.9913472, 0.36666667, 1, -0.13422312, -3.660909e-07, -2.2630046e-07, 0.9909511, 0.4, 1, -0.1371792, -3.6541425e-07, -2.2739191e-07, 0.99054635, 0.43333334, 1, -0.14537111, -3.6351997e-07, -2.3040775e-07, 0.9893772, 0.46666667, 1, -0.1595296, -3.6018184e-07, -2.3559174e-07, 0.98719317, 0.5, 1, -0.17292085, -3.5694953e-07, -2.4046133e-07, 0.9849357, 0.53333336, 1, -0.17886382, -3.554912e-07, -2.4261178e-07, 0.9838739)
tracks/2/type = "position_3d"
tracks/2/imported = true
tracks/2/enabled = true
tracks/2/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = PackedFloat32Array(0, 1, 0.09795606, 0.42777258, 0.016737644, 0.033333335, 1, 0.09795606, 0.42777258, 0.016737644, 0.06666667, 1, 0.09795607, 0.42421684, 0.020088926, 0.1, 1, 0.097956106, 0.41464573, 0.028476259, 0.13333334, 1, 0.097956106, 0.4007034, 0.039399832, 0.16666667, 1, 0.097956136, 0.38403395, 0.050359886, 0.2, 1, 0.09795614, 0.36628148, 0.058856595, 0.23333333, 1, 0.097956166, 0.34909016, 0.06239014, 0.26666668, 1, 0.09795618, 0.33410403, 0.05846077, 0.3, 1, 0.09795617, 0.3207686, 0.049966685, 0.33333334, 1, 0.09795619, 0.30743313, 0.0414726, 0.36666667, 1, 0.097956195, 0.29409772, 0.032978475, 0.4, 1, 0.09795618, 0.2807622, 0.024484418, 0.43333334, 1, 0.09795621, 0.26867792, 0.005453726, 0.46666667, 1, 0.09795625, 0.25942847, -0.025371455, 0.5, 1, 0.097956285, 0.2535129, -0.05407312, 0.53333336, 1, 0.09795629, 0.2514301, -0.06673322)
tracks/3/type = "rotation_3d"
tracks/3/imported = true
tracks/3/enabled = true
tracks/3/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, -0.5634961, -0.5175467, -0.4692957, 0.4408844, 0.033333335, 1, -0.5634961, -0.5175467, -0.4692957, 0.4408844, 0.06666667, 1, -0.5618199, -0.5157629, -0.4712554, 0.4430185, 0.1, 1, -0.55747676, -0.5111468, -0.4762584, 0.4484715, 0.13333334, 1, -0.55148923, -0.5047953, -0.48298517, 0.45581424, 0.16666667, 1, -0.5449203, -0.49784282, -0.49014834, 0.46364757, 0.2, 1, -0.5389022, -0.49148715, -0.49652106, 0.47062904, 0.23333333, 1, -0.53463346, -0.4869863, -0.5009361, 0.47547287, 0.26666668, 1, -0.53334117, -0.48562515, -0.50225556, 0.47692227, 0.3, 1, -0.53394127, -0.48625684, -0.5016437, 0.47625047, 0.33333334, 1, -0.5345404, -0.48688808, -0.50103104, 0.4755781, 0.36666667, 1, -0.53513885, -0.4875184, -0.50041753, 0.47490478, 0.4, 1, -0.5357363, -0.48814803, -0.49980325, 0.47423083, 0.43333334, 1, -0.536072, -0.48850176, -0.49945736, 0.47385153, 0.46666667, 1, -0.53603464, -0.48846242, -0.4994959, 0.47389376, 0.5, 1, -0.5358482, -0.4882659, -0.499688, 0.47410452, 0.53333336, 1, -0.5357362, -0.4881478, -0.49980345, 0.47423097)
tracks/4/type = "rotation_3d"
tracks/4/imported = true
tracks/4/enabled = true
tracks/4/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, 0.26007843, -0.25464654, -0.41803232, 0.8323241, 0.033333335, 1, 0.26007843, -0.25464654, -0.41803235, 0.83232415, 0.06666667, 1, 0.24971879, -0.20328517, -0.43762603, 0.8395232, 0.1, 1, 0.21116517, -0.07128535, -0.48414907, 0.8461249, 0.13333334, 1, 0.13162777, 0.10219297, -0.53379804, 0.8290298, 0.16666667, 1, 0.013870682, 0.2720369, -0.5621905, 0.780862, 0.2, 1, -0.11568749, 0.40197676, -0.55814457, 0.71659315, 0.23333333, 1, -0.21642955, 0.47949043, -0.5322373, 0.6633028, 0.26666668, 1, -0.24785833, 0.5131917, -0.5098564, 0.6443966, 0.3, 1, -0.23239258, 0.5287811, -0.49749705, 0.6472101, 0.33333334, 1, -0.21700865, 0.5440421, -0.48460624, 0.6496785, 0.36666667, 1, -0.20171244, 0.558955, -0.47119418, 0.6518109, 0.4, 1, -0.18650949, 0.5734997, -0.45727274, 0.6536161, 0.43333334, 1, -0.17619722, 0.60820436, -0.4277, 0.64506954, 0.46666667, 1, -0.17903416, 0.65429705, -0.37320814, 0.6328964, 0.5, 1, -0.18871939, 0.68050295, -0.31707093, 0.6330614, 0.53333336, 1, -0.1933885, 0.6864816, -0.29205528, 0.6372187)
tracks/5/type = "rotation_3d"
tracks/5/imported = true
tracks/5/enabled = true
tracks/5/path = NodePath("GeneralSkeleton:LeftLowerArm")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = PackedFloat32Array(0, 1, 0.33293042, -0.3350286, -0.27948675, 0.8359428, 0.033333335, 1, 0.33293042, -0.3350286, -0.27948675, 0.8359428, 0.06666667, 1, 0.33085424, -0.2879859, -0.2495471, 0.8633226, 0.1, 1, 0.33277813, -0.19278057, -0.1798883, 0.905392, 0.13333334, 1, 0.3414656, -0.1229935, -0.11785664, 0.9243288, 0.16666667, 1, 0.34658283, -0.13292721, -0.11471051, 0.9214403, 0.2, 1, 0.34295627, -0.19729088, -0.15663618, 0.90494335, 0.23333333, 1, 0.3315716, -0.2731308, -0.20802294, 0.8787413, 0.26666668, 1, 0.31103367, -0.3194728, -0.2388278, 0.8626451, 0.3, 1, 0.28403708, -0.33828527, -0.25181448, 0.8610897, 0.33333334, 1, 0.25837436, -0.3583114, -0.2628925, 0.85775477, 0.36666667, 1, 0.23416834, -0.37935832, -0.27195826, 0.8528137, 0.4, 1, 0.21152318, -0.4012257, -0.27892646, 0.846449, 0.43333334, 1, 0.21728747, -0.40819582, -0.28302902, 0.84027195, 0.46666667, 1, 0.2578459, -0.39516732, -0.28460988, 0.8344793, 0.5, 1, 0.30433705, -0.3782101, -0.28324544, 0.8271083, 0.53333336, 1, 0.32670256, -0.37022257, -0.28168663, 0.822711)
tracks/6/type = "rotation_3d"
tracks/6/imported = true
tracks/6/enabled = true
tracks/6/path = NodePath("GeneralSkeleton:LeftHand")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = PackedFloat32Array(0, 1, 0.054798976, 0.029264985, -0.022636263, 0.9978118, 0.033333335, 1, 0.054798976, 0.029264985, -0.022636263, 0.9978118, 0.06666667, 1, 0.035692558, 0.036994714, -0.02514671, 0.99836123, 0.1, 1, -0.0025422238, 0.050300736, -0.030165289, 0.9982752, 0.13333334, 1, -0.031003604, 0.05497338, -0.032022428, 0.9974925, 0.16666667, 1, -0.028284498, 0.041944828, -0.025529142, 0.99839324, 0.2, 1, -0.0028360884, 0.019648211, -0.016126882, 0.99967295, 0.23333333, 1, 0.029949106, 0.0014368766, -0.011277324, 0.9994868, 0.26666668, 1, 0.055185083, 0.00177473, -0.015854234, 0.9983487, 0.3, 1, 0.07141648, 0.016476596, -0.02605073, 0.99697024, 0.33333334, 1, 0.08728358, 0.031500954, -0.03574671, 0.99504346, 0.36666667, 1, 0.102768786, 0.046826404, -0.04492779, 0.9925862, 0.4, 1, 0.117854774, 0.062430847, -0.053580325, 0.98961705, 0.43333334, 1, 0.114068925, 0.06436284, -0.06035373, 0.98954695, 0.46666667, 1, 0.08645135, 0.04792511, -0.06390355, 0.9930487, 0.5, 1, 0.05488873, 0.027503965, -0.06406692, 0.99605536, 0.53333336, 1, 0.039765034, 0.0175447, -0.06324014, 0.9970515)
tracks/7/type = "position_3d"
tracks/7/imported = true
tracks/7/enabled = true
tracks/7/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = PackedFloat32Array(0, 1, -0.09795654, 0.427771, 0.016736992, 0.033333335, 1, -0.09795654, 0.427771, 0.016736992, 0.06666667, 1, -0.09795653, 0.4242153, 0.020088295, 0.1, 1, -0.09795649, 0.4146445, 0.028475666, 0.13333334, 1, -0.09795648, 0.40070233, 0.039399277, 0.16666667, 1, -0.097956434, 0.38403314, 0.05035938, 0.2, 1, -0.097956404, 0.36628097, 0.058856145, 0.23333333, 1, -0.09795639, 0.3490899, 0.062389754, 0.26666668, 1, -0.09795636, 0.33410388, 0.058460437, 0.3, 1, -0.09795634, 0.32076842, 0.049966346, 0.33333334, 1, -0.097956315, 0.30743298, 0.0414723, 0.36666667, 1, -0.097956285, 0.29409763, 0.032978233, 0.4, 1, -0.09795628, 0.2807622, 0.024484178, 0.43333334, 1, -0.09795624, 0.26867783, 0.0054535493, 0.46666667, 1, -0.097956195, 0.25942838, -0.02537162, 0.5, 1, -0.097956166, 0.25351283, -0.05407324, 0.53333336, 1, -0.09795614, 0.25142995, -0.06673332)
tracks/8/type = "rotation_3d"
tracks/8/imported = true
tracks/8/enabled = true
tracks/8/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = PackedFloat32Array(0, 1, -0.56349707, 0.51754564, 0.46929502, 0.44088522, 0.033333335, 1, -0.56349707, 0.51754564, 0.46929502, 0.44088522, 0.06666667, 1, -0.56182086, 0.5157621, 0.47125453, 0.44301927, 0.1, 1, -0.55747765, 0.51114595, 0.47625732, 0.44847232, 0.13333334, 1, -0.5514903, 0.50479436, 0.4829841, 0.45581532, 0.16666667, 1, -0.5449211, 0.49784204, 0.49014723, 0.4636486, 0.2, 1, -0.53890306, 0.49148646, 0.49651986, 0.47063, 0.23333333, 1, -0.53463405, 0.4869857, 0.50093496, 0.47547415, 0.26666668, 1, -0.5333416, 0.4856247, 0.50225466, 0.47692326, 0.3, 1, -0.53394175, 0.48625645, 0.501643, 0.4762513, 0.33333334, 1, -0.53454065, 0.48688763, 0.5010305, 0.47557873, 0.36666667, 1, -0.53513896, 0.48751822, 0.50041705, 0.47490525, 0.4, 1, -0.53573626, 0.48814777, 0.49980304, 0.47423133, 0.43333334, 1, -0.5360719, 0.48850173, 0.49945736, 0.47385168, 0.46666667, 1, -0.5360345, 0.4884623, 0.49949577, 0.47389406, 0.5, 1, -0.5358481, 0.48826578, 0.49968788, 0.47410482, 0.53333336, 1, -0.53573644, 0.48814774, 0.49980313, 0.47423118)
tracks/9/type = "rotation_3d"
tracks/9/imported = true
tracks/9/enabled = true
tracks/9/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = PackedFloat32Array(0, 1, 0.34200707, 0.44325665, 0.4187797, 0.71496737, 0.033333335, 1, 0.34200707, 0.44325665, 0.4187797, 0.71496737, 0.06666667, 1, 0.32266635, 0.40435496, 0.4252238, 0.74267644, 0.1, 1, 0.26417178, 0.3005553, 0.44319165, 0.8021602, 0.13333334, 1, 0.16661951, 0.15397716, 0.46914375, 0.85348296, 0.16666667, 1, 0.043385305, -0.006389546, 0.49589142, 0.86727655, 0.2, 1, -0.07779677, -0.1499918, 0.51495457, 0.84039986, 0.23333333, 1, -0.16532344, -0.25342304, 0.52268153, 0.797025, 0.26666668, 1, -0.19151108, -0.30252397, 0.52378297, 0.7729516, 0.3, 1, -0.17850281, -0.32083347, 0.5242831, 0.7683294, 0.33333334, 1, -0.16603486, -0.33918947, 0.52395576, 0.76344836, 0.36666667, 1, -0.15410993, -0.35755152, 0.5228025, 0.7583434, 0.4, 1, -0.14272915, -0.37587813, 0.52082676, 0.7530496, 0.43333334, 1, -0.14458878, -0.42246723, 0.49131805, 0.7478116, 0.46666667, 1, -0.1606452, -0.4975168, 0.42435122, 0.73932153, 0.5, 1, -0.17590855, -0.56358916, 0.3530673, 0.72578716, 0.53333336, 1, -0.18218514, -0.59135014, 0.31963477, 0.7175983)
tracks/10/type = "rotation_3d"
tracks/10/imported = true
tracks/10/enabled = true
tracks/10/path = NodePath("GeneralSkeleton:RightLowerArm")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = PackedFloat32Array(0, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706, 0.033333335, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706, 0.06666667, 1, 0.16711237, -0.092408836, 0.27905077, 0.9410976, 0.1, 1, 0.18883477, -0.25989813, 0.28400955, 0.90340084, 0.13333334, 1, 0.18760929, -0.37102276, 0.26770863, 0.86918175, 0.16666667, 1, 0.18746763, -0.34727156, 0.2757198, 0.87649125, 0.2, 1, 0.18395366, -0.22805114, 0.29191846, 0.91046, 0.23333333, 1, 0.16378748, -0.08490535, 0.28366727, 0.94100887, 0.26666668, 1, 0.14640523, -0.005606342, 0.2634918, 0.9534706, 0.3, 1, 0.14316308, 0.012822501, 0.25040475, 0.9574118, 0.33333334, 1, 0.13935933, 0.031166645, 0.23698667, 0.96096045, 0.36666667, 1, 0.1349994, 0.049406018, 0.2232496, 0.9641026, 0.4, 1, 0.13008946, 0.067520894, 0.20920633, 0.96682495, 0.43333334, 1, 0.1304123, 0.06639273, 0.2100928, 0.9666673, 0.46666667, 1, 0.13724855, 0.040300634, 0.2301574, 0.9625831, 0.5, 1, 0.14381385, 0.0093729785, 0.25288403, 0.95670235, 0.53333336, 1, 0.1464052, -0.005606346, 0.2634918, 0.9534706)
tracks/11/type = "rotation_3d"
tracks/11/imported = true
tracks/11/enabled = true
tracks/11/path = NodePath("GeneralSkeleton:RightHand")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = PackedFloat32Array(0, 1, 0.04333622, -0.010644132, -0.03354829, 0.9984404, 0.033333335, 1, 0.04333622, -0.010644132, -0.03354829, 0.9984404, 0.06666667, 1, 0.044219602, -0.009219363, -0.036498897, 0.99831235, 0.1, 1, 0.046446763, -0.0057345415, -0.043565124, 0.99795395, 0.13333334, 1, 0.04939583, -0.0013772314, -0.05206887, 0.99742025, 0.16666667, 1, 0.052507885, 0.002629281, -0.059351422, 0.99685174, 0.2, 1, 0.055298142, 0.0050138743, -0.062783554, 0.9964814, 0.23333333, 1, 0.05729863, 0.004474045, -0.05975459, 0.99655724, 0.26666668, 1, 0.05793665, -0.00028415132, -0.047641885, 0.99718285, 0.3, 1, 0.05751865, -0.0075615332, -0.030090205, 0.9978622, 0.33333334, 1, 0.056855816, -0.014821759, -0.012521596, 0.99819386, 0.36666667, 1, 0.055948958, -0.022058496, 0.005056339, 0.9981772, 0.4, 1, 0.054798845, -0.029264959, 0.022636168, 0.99781173, 0.43333334, 1, 0.07116226, -0.018269766, 0.037932504, 0.99657583, 0.46666667, 1, 0.109233595, 0.014599728, 0.05051025, 0.99262464, 0.5, 1, 0.14758325, 0.04861738, 0.061251696, 0.9859533, 0.53333336, 1, 0.16493511, 0.064204015, 0.06619427, 0.981984)
tracks/12/type = "rotation_3d"
tracks/12/imported = true
tracks/12/enabled = true
tracks/12/path = NodePath("GeneralSkeleton:RightUpperLeg")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = PackedFloat32Array(0, 1, 0.94088304, -0.0027364467, 0.01118454, 0.33853588, 0.033333335, 1, 0.94088304, -0.0027364467, 0.01118454, 0.33853588, 0.06666667, 1, 0.9408587, -0.0028563386, 0.012739576, 0.33854756, 0.1, 1, 0.94079083, -0.003154481, 0.016613804, 0.3385658, 0.13333334, 1, 0.9406875, -0.0035385666, 0.02162078, 0.33856624, 0.16666667, 1, 0.94056827, -0.0039171306, 0.0265743, 0.33854076, 0.2, 1, 0.94046783, -0.0042000404, 0.03028882, 0.3385045, 0.23333333, 1, 0.94043064, -0.0042981454, 0.031579543, 0.3384886, 0.26666668, 1, 0.9404966, -0.004121874, 0.029261455, 0.33851597, 0.3, 1, 0.94061434, -0.003777354, 0.024743179, 0.3385531, 0.33333334, 1, 0.9407181, -0.0034315728, 0.020224167, 0.33856866, 0.36666667, 1, 0.94080764, -0.0030845825, 0.015704568, 0.3385629, 0.4, 1, 0.94088304, -0.0027364467, 0.01118454, 0.33853588, 0.43333334, 1, 0.9409193, -0.0025401327, 0.008641876, 0.33851126, 0.46666667, 1, 0.9409155, -0.002561962, 0.0089244, 0.3385142, 0.5, 1, 0.9408957, -0.0026710439, 0.010336994, 0.33852825, 0.53333336, 1, 0.94088304, -0.0027364467, 0.01118454, 0.33853588)
[sub_resource type="Animation" id="Animation_58ei7"]
length = 0.5
tracks/0/type = "position_3d"
tracks/0/imported = true
tracks/0/enabled = true
tracks/0/path = NodePath("GeneralSkeleton:Spine1")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = PackedFloat32Array(0, 1, 3.953068e-15, 0.05906236, 4.1416266e-09, 0.033333335, 1, -1.4647608e-09, 0.057118475, 0.0016337278, 0.06666667, 1, -4.997991e-09, 0.05242952, 0.005574529, 0.1, 1, -9.3081205e-09, 0.046709538, 0.010381852, 0.13333334, 1, -1.31035645e-08, 0.04167261, 0.014615107, 0.16666667, 1, -1.5354924e-08, 0.038684823, 0.017126173, 0.2, 1, -1.6081481e-08, 0.037720617, 0.017936535, 0.23333333, 1, -1.5564696e-08, 0.038406435, 0.017360143, 0.26666668, 1, -1.40860195e-08, 0.040368788, 0.015710896, 0.3, 1, -1.192691e-08, 0.043234147, 0.013302729, 0.33333334, 1, -9.36883e-09, 0.046628986, 0.010449554, 0.36666667, 1, -6.6896706e-09, 0.0501845, 0.007461346, 0.4, 1, -4.1530988e-09, 0.053550776, 0.00463218, 0.43333334, 1, -2.0192281e-09, 0.05638263, 0.0022521617, 0.46666667, 1, -5.481533e-10, 0.058334902, 0.0006113926, 0.5, 1, 3.953068e-15, 0.05906236, 4.1416266e-09)
tracks/1/type = "rotation_3d"
tracks/1/imported = true
tracks/1/enabled = true
tracks/1/path = NodePath("GeneralSkeleton:Spine1")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = PackedFloat32Array(0, 1, -0.15310273, 2.6419679e-07, -3.745965e-07, 0.9882103, 0.033333335, 1, -0.15298694, 2.6415293e-07, -3.7462746e-07, 0.98822826, 0.06666667, 1, -0.15279372, 2.437341e-07, -2.4308463e-07, 0.9882582, 0.1, 1, -0.15275522, 2.437245e-07, -2.43094e-07, 0.9882641, 0.13333334, 1, -0.15310273, 2.6419679e-07, -3.745965e-07, 0.9882103, 0.16666667, 1, -0.15398592, 2.6453148e-07, -3.7436016e-07, 0.98807305, 0.2, 1, -0.1552239, 2.6500035e-07, -3.7402836e-07, 0.98787934, 0.23333333, 1, -0.15655327, 2.6550353e-07, -3.7367147e-07, 0.9876695, 0.26666668, 1, -0.15771152, 2.6594165e-07, -3.7335977e-07, 0.98748523, 0.3, 1, -0.15843585, 3.9769162e-07, -3.5206764e-07, 0.9873693, 0.33333334, 1, -0.15846334, 3.9770137e-07, -3.520565e-07, 0.9873649, 0.36666667, 1, -0.15764487, 2.6591647e-07, -3.7337787e-07, 0.98749596, 0.4, 1, -0.1562831, 2.6540135e-07, -3.7374411e-07, 0.9877123, 0.43333334, 1, -0.15479425, 2.6483772e-07, -3.7414378e-07, 0.9879468, 0.46666667, 1, -0.15359506, 2.6438346e-07, -3.7446486e-07, 0.9881339, 0.5, 1, -0.15310273, 2.6419679e-07, -3.745965e-07, 0.9882103)
tracks/2/type = "rotation_3d"
tracks/2/imported = true
tracks/2/enabled = true
tracks/2/path = NodePath("GeneralSkeleton:Head")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = PackedFloat32Array(0, 1, -0.038782123, -3.8090184e-07, -3.2328833e-07, 0.9992478, 0.033333335, 1, -0.03733501, -3.813695e-07, -3.227365e-07, 0.9993028, 0.06666667, 1, -0.03384413, -2.494127e-07, -3.1689564e-07, 0.99942714, 0.1, 1, -0.029584767, -2.5076096e-07, -3.1583002e-07, 0.99956226, 0.13333334, 1, -0.025833834, -2.5194424e-07, -3.148867e-07, 0.9996663, 0.16666667, 1, -0.023608679, -2.526446e-07, -3.1432518e-07, 0.9997213, 0.2, 1, -0.022890637, -2.528702e-07, -3.141437e-07, 0.999738, 0.23333333, 1, -0.023401411, -2.5270973e-07, -3.1427277e-07, 0.99972624, 0.26666668, 1, -0.024862792, -2.5225006e-07, -3.1464185e-07, 0.9996909, 0.3, 1, -0.026996708, -2.5157775e-07, -3.1517962e-07, 0.9996355, 0.33333334, 1, -0.02952495, -2.5077983e-07, -3.158149e-07, 0.99956405, 0.36666667, 1, -0.032172438, -2.4994236e-07, -3.1647804e-07, 0.99948233, 0.4, 1, -0.03467895, -3.8222592e-07, -3.217217e-07, 0.9993985, 0.43333334, 1, -0.036787357, -3.8154624e-07, -3.225273e-07, 0.9993231, 0.46666667, 1, -0.038240682, -3.8107677e-07, -3.230818e-07, 0.9992686, 0.5, 1, -0.038782123, -3.8090184e-07, -3.2328833e-07, 0.9992478)
tracks/3/type = "rotation_3d"
tracks/3/imported = true
tracks/3/enabled = true
tracks/3/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/3/interp = 0
tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.033333335, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.06666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.1, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.13333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.16666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.2, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.23333333, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.26666668, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.3, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.33333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.36666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.4, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.43333334, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.46666667, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077, 0.5, 1, -0.5357364, -0.4881479, -0.4998033, 0.47423077)
tracks/4/type = "position_3d"
tracks/4/imported = true
tracks/4/enabled = true
tracks/4/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, 0.109395266, 0.09644507, 0.09388505, 0.033333335, 1, 0.10873134, 0.09647804, 0.09365002, 0.06666667, 1, 0.107129805, 0.09655751, 0.09308313, 0.1, 1, 0.10517614, 0.0966545, 0.09239171, 0.13333334, 1, 0.10345574, 0.09673988, 0.09178278, 0.16666667, 1, 0.10243526, 0.09679054, 0.091421545, 0.2, 1, 0.102105945, 0.096806884, 0.09130508, 0.23333333, 1, 0.102340184, 0.096795246, 0.091387846, 0.26666668, 1, 0.10301048, 0.096761994, 0.091625154, 0.3, 1, 0.103989094, 0.096713394, 0.09197152, 0.33333334, 1, 0.1051486, 0.09665585, 0.09238194, 0.36666667, 1, 0.10636303, 0.096595585, 0.09281177, 0.4, 1, 0.10751275, 0.0965385, 0.093218796, 0.43333334, 1, 0.10847999, 0.0964905, 0.0935611, 0.46666667, 1, 0.10914679, 0.0964574, 0.09379704, 0.5, 1, 0.109395266, 0.09644507, 0.09388505)
tracks/5/type = "rotation_3d"
tracks/5/imported = true
tracks/5/enabled = true
tracks/5/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/5/interp = 0
tracks/5/loop_wrap = true
tracks/5/keys = PackedFloat32Array(0, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.033333335, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.06666667, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.1, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.13333334, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.16666667, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.2, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.23333333, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.26666668, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.3, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.33333334, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.36666667, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.4, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.43333334, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.46666667, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989, 0.5, 1, 0.08012859, 0.7689236, -0.32719037, 0.5433989)
tracks/6/type = "rotation_3d"
tracks/6/imported = true
tracks/6/enabled = true
tracks/6/path = NodePath("GeneralSkeleton:LeftLowerArm")
tracks/6/interp = 0
tracks/6/loop_wrap = true
tracks/6/keys = PackedFloat32Array(0, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.033333335, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.06666667, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.1, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.13333334, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.16666667, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.2, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.23333333, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.26666668, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.3, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.33333334, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.36666667, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.4, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.43333334, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.46666667, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254, 0.5, 1, 0.4769912, -0.057332925, -0.1145337, 0.8695254)
tracks/7/type = "rotation_3d"
tracks/7/imported = true
tracks/7/enabled = true
tracks/7/path = NodePath("GeneralSkeleton:LeftHand")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = PackedFloat32Array(0, 1, -0.04124398, -0.014288548, -0.20468448, 0.9778543, 0.033333335, 1, -0.045763314, -0.015985224, -0.21295965, 0.9758578, 0.06666667, 1, -0.05654992, -0.020397484, -0.23280536, 0.9706636, 0.1, 1, -0.06946979, -0.026384218, -0.25677553, 0.96361, 0.13333334, 1, -0.08060926, -0.03219738, -0.27764395, 0.95675457, 0.16666667, 1, -0.087104075, -0.03588133, -0.2899084, 0.9524067, 0.2, 1, -0.089181215, -0.037107363, -0.2938473, 0.95095927, 0.23333333, 1, -0.08770474, -0.03623347, -0.29104644, 0.9519911, 0.26666668, 1, -0.08345422, -0.0337834, -0.28300682, 0.95488286, 0.3, 1, -0.0771809, -0.030341359, -0.2711996, 0.95894384, 0.33333334, 1, -0.06964965, -0.026473112, -0.25711116, 0.963505, 0.36666667, 1, -0.061653353, -0.022668604, -0.24224627, 0.96798855, 0.4, 1, -0.05398573, -0.019301528, -0.22807495, 0.97195417, 0.43333334, 1, -0.04746696, -0.016647873, -0.21608491, 0.975078, 0.46666667, 1, -0.042938363, -0.014914412, -0.20778432, 0.977118, 0.5, 1, -0.04124398, -0.014288548, -0.20468448, 0.9778543)
tracks/8/type = "rotation_3d"
tracks/8/imported = true
tracks/8/enabled = true
tracks/8/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/8/interp = 0
tracks/8/loop_wrap = true
tracks/8/keys = PackedFloat32Array(0, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.033333335, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.06666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.1, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.13333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.16666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.2, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.23333333, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.26666668, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.3, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.33333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.36666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.4, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.43333334, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.46666667, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115, 0.5, 1, -0.5357364, 0.48814785, 0.499803, 0.47423115)
tracks/9/type = "position_3d"
tracks/9/imported = true
tracks/9/enabled = true
tracks/9/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/9/interp = 0
tracks/9/loop_wrap = true
tracks/9/keys = PackedFloat32Array(0, 1, -0.1550847, 0.13723695, 0.055721395, 0.033333335, 1, -0.1550847, 0.13723695, 0.055721395, 0.06666667, 1, -0.1550847, 0.13723695, 0.055721395, 0.1, 1, -0.1550847, 0.13723695, 0.055721395, 0.13333334, 1, -0.1550847, 0.13723695, 0.055721395, 0.16666667, 1, -0.1550847, 0.13723695, 0.055721395, 0.2, 1, -0.1550847, 0.13723695, 0.055721395, 0.23333333, 1, -0.1550847, 0.13723695, 0.055721395, 0.26666668, 1, -0.1550847, 0.13723695, 0.055721395, 0.3, 1, -0.1550847, 0.13723695, 0.055721395, 0.33333334, 1, -0.1550847, 0.13723695, 0.055721395, 0.36666667, 1, -0.1550847, 0.13723695, 0.055721395, 0.4, 1, -0.1550847, 0.13723695, 0.055721395, 0.43333334, 1, -0.1550847, 0.13723695, 0.055721395, 0.46666667, 1, -0.1550847, 0.13723695, 0.055721395, 0.5, 1, -0.1550847, 0.13723695, 0.055721395)
tracks/10/type = "rotation_3d"
tracks/10/imported = true
tracks/10/enabled = true
tracks/10/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = PackedFloat32Array(0, 1, 0.24238195, -0.7944401, 0.4211927, 0.36429754, 0.033333335, 1, 0.24292542, -0.7972732, 0.41583258, 0.36390382, 0.06666667, 1, 0.24424846, -0.80393916, 0.40282777, 0.3629799, 0.1, 1, 0.24588719, -0.81174755, 0.38682398, 0.3619015, 0.13333334, 1, 0.24735492, -0.8183271, 0.3726105, 0.36099544, 0.16666667, 1, 0.24823706, -0.82209814, 0.36412847, 0.3604767, 0.2, 1, 0.24852364, -0.8232941, 0.3613835, 0.36031213, 0.23333333, 1, 0.24831973, -0.82244456, 0.36333653, 0.3604287, 0.26666668, 1, 0.24773856, -0.819985, 0.36891365, 0.36076728, 0.3, 1, 0.24689735, -0.81631726, 0.37702858, 0.36127177, 0.33333334, 1, 0.24591061, -0.8118549, 0.3865974, 0.36188677, 0.36666667, 1, 0.24488823, -0.8070464, 0.39656428, 0.36255026, 0.4, 1, 0.24393053, -0.80236673, 0.40594703, 0.3631977, 0.43333334, 1, 0.24313186, -0.798335, 0.41379878, 0.36375648, 0.46666667, 1, 0.24258497, -0.79550517, 0.4191889, 0.36414942, 0.5, 1, 0.24238195, -0.7944401, 0.4211927, 0.36429754)
tracks/11/type = "rotation_3d"
tracks/11/imported = true
tracks/11/enabled = true
tracks/11/path = NodePath("GeneralSkeleton:RightLowerArm")
tracks/11/interp = 0
tracks/11/loop_wrap = true
tracks/11/keys = PackedFloat32Array(0, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.033333335, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.06666667, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.1, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.13333334, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.16666667, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.2, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.23333333, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.26666668, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.3, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.33333334, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.36666667, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.4, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.43333334, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.46666667, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495, 0.5, 1, 0.48328775, -0.005284329, 0.021367019, 0.87518495)
tracks/12/type = "rotation_3d"
tracks/12/imported = true
tracks/12/enabled = true
tracks/12/path = NodePath("GeneralSkeleton:RightHand")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = PackedFloat32Array(0, 1, 0.06955129, 0.14858216, 0.32042038, 0.9329613, 0.033333335, 1, 0.074181356, 0.14804049, 0.3218476, 0.9321992, 0.06666667, 1, 0.08533331, 0.14669017, 0.32529262, 0.93026066, 0.1, 1, 0.098903455, 0.14495859, 0.32949924, 0.9277044, 0.13333334, 1, 0.11081992, 0.14335713, 0.33320582, 0.9252792, 0.16666667, 1, 0.117872715, 0.1423731, 0.3354051, 0.9237637, 0.2, 1, 0.1201462, 0.14205006, 0.33611473, 0.9232625, 0.23333333, 1, 0.11852922, 0.14228007, 0.33561, 0.92361957, 0.26666668, 1, 0.1138991, 0.1429309, 0.33416563, 0.92462486, 0.3, 1, 0.10712908, 0.14386135, 0.3320567, 0.9260484, 0.33333334, 1, 0.09909437, 0.14493366, 0.32955852, 0.92766684, 0.36666667, 1, 0.09066407, 0.14602166, 0.32694325, 0.9292824, 0.4, 1, 0.08266873, 0.14701869, 0.32446852, 0.93073714, 0.43333334, 1, 0.07593294, 0.1478327, 0.3223879, 0.9319044, 0.46666667, 1, 0.07128445, 0.1483807, 0.3209544, 0.93267894, 0.5, 1, 0.06955129, 0.14858216, 0.32042038, 0.9329613)
[sub_resource type="Animation" id="Animation_stu12"]
length = 0.53333336
tracks/0/type = "position_3d"
tracks/0/imported = true
tracks/0/enabled = true
tracks/0/path = NodePath("GeneralSkeleton:Spine1")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = PackedFloat32Array(0, 1, 3.953068e-15, 0.05906236, 4.1416266e-09, 0.033333335, 1, 3.953068e-15, 0.05906236, 4.1416266e-09, 0.06666667, 1, -1.9968326e-10, 0.058797363, 0.00022272498, 0.1, 1, -7.1775574e-10, 0.058109824, 0.0008005711, 0.13333334, 1, -1.4327217e-09, 0.057161, 0.0015980205, 0.16666667, 1, -2.2230955e-09, 0.056112114, 0.0024795649, 0.2, 1, -2.9673803e-09, 0.05512437, 0.0033097274, 0.23333333, 1, -3.5441032e-09, 0.05435902, 0.003952971, 0.26666668, 1, -3.831766e-09, 0.05397725, 0.004273831, 0.3, 1, -3.745699e-09, 0.054091476, 0.0041778344, 0.33333334, 1, -3.348519e-09, 0.05461856, 0.0037348378, 0.36666667, 1, -2.739646e-09, 0.055426586, 0.0030557234, 0.4, 1, -2.018518e-09, 0.056383602, 0.0022513932, 0.43333334, 1, -1.2845572e-09, 0.05735763, 0.0014327582, 0.46666667, 1, -6.37204e-10, 0.058216736, 0.00071071676, 0.5, 1, -1.7587007e-10, 0.058828965, 0.00019616645, 0.53333336, 1, 3.953068e-15, 0.05906236, 4.1416266e-09)
tracks/1/type = "rotation_3d"
tracks/1/imported = true
tracks/1/enabled = true
tracks/1/path = NodePath("GeneralSkeleton:Spine1")
tracks/1/interp = 0
tracks/1/loop_wrap = true
tracks/1/keys = PackedFloat32Array(0, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.033333335, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.06666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.1, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.13333334, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.16666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.2, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.23333333, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.26666668, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.3, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.33333334, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.36666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.4, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.43333334, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.46666667, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.5, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262, 0.53333336, 1, -0.37573725, 7.399904e-07, -5.741303e-07, 0.9267262)
tracks/2/type = "position_3d"
tracks/2/imported = true
tracks/2/enabled = true
tracks/2/path = NodePath("GeneralSkeleton:Head")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = PackedFloat32Array(0, 1, -4.6746674e-14, 0.2846942, 4.029311e-08, 0.033333335, 1, -4.6746674e-14, 0.2846942, 4.029311e-08, 0.06666667, 1, 1.8372835e-11, 0.28409952, -4.25255e-05, 0.1, 1, 6.628614e-11, 0.28255674, -0.00015297998, 0.13333334, 1, 1.3236509e-10, 0.28042763, -0.00030540815, 0.16666667, 1, 2.0540808e-10, 0.2780739, -0.0004739114, 0.2, 1, 2.7420188e-10, 0.27585748, -0.0006325992, 0.23333333, 1, 3.274454e-10, 0.2741401, -0.00075552636, 0.26666668, 1, 3.5398307e-10, 0.2732835, -0.0008168635, 0.3, 1, 3.4606162e-10, 0.27353978, -0.00079850736, 0.33333334, 1, 3.0935515e-10, 0.2747225, -0.000713845, 0.36666667, 1, 2.5311647e-10, 0.2765357, -0.0005840312, 0.4, 1, 1.8652813e-10, 0.27868313, -0.0004302963, 0.43333334, 1, 1.1868731e-10, 0.2808688, -0.0002738157, 0.46666667, 1, 5.888155e-11, 0.28279662, -0.0001358146, 0.5, 1, 1.6273892e-11, 0.28417036, -3.7479695e-05, 0.53333336, 1, -4.6746674e-14, 0.2846942, 4.029311e-08)
tracks/3/type = "rotation_3d"
tracks/3/imported = true
tracks/3/enabled = true
tracks/3/path = NodePath("GeneralSkeleton:Head")
tracks/3/interp = 0
tracks/3/loop_wrap = true
tracks/3/keys = PackedFloat32Array(0, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.033333335, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.06666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.1, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.13333334, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.16666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.2, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.23333333, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.26666668, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.3, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.33333334, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.36666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.4, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.43333334, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.46666667, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.5, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635, 0.53333336, 1, -0.1371792, -3.6541434e-07, -2.2739195e-07, 0.99054635)
tracks/4/type = "position_3d"
tracks/4/imported = true
tracks/4/enabled = true
tracks/4/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/4/interp = 0
tracks/4/loop_wrap = true
tracks/4/keys = PackedFloat32Array(0, 1, 0.09795613, 0.42777258, 0.016737785, 0.033333335, 1, 0.09795613, 0.42777258, 0.016737785, 0.06666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.1, 1, 0.09795613, 0.42777258, 0.016737785, 0.13333334, 1, 0.09795613, 0.42777258, 0.016737785, 0.16666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.2, 1, 0.09795613, 0.42777258, 0.016737785, 0.23333333, 1, 0.09795613, 0.42777258, 0.016737785, 0.26666668, 1, 0.09795613, 0.42777258, 0.016737785, 0.3, 1, 0.09795613, 0.42777258, 0.016737785, 0.33333334, 1, 0.09795613, 0.42777258, 0.016737785, 0.36666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.4, 1, 0.09795613, 0.42777258, 0.016737785, 0.43333334, 1, 0.09795613, 0.42777258, 0.016737785, 0.46666667, 1, 0.09795613, 0.42777258, 0.016737785, 0.5, 1, 0.09795613, 0.42777258, 0.016737785, 0.53333336, 1, 0.09795613, 0.42777258, 0.016737785)
tracks/5/type = "rotation_3d"
tracks/5/imported = true
tracks/5/enabled = true
tracks/5/path = NodePath("GeneralSkeleton:LeftShoulder")
tracks/5/interp = 0
tracks/5/loop_wrap = true
tracks/5/keys = PackedFloat32Array(0, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.033333335, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.06666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.1, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.13333334, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.16666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.2, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.23333333, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.26666668, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.3, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.33333334, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.36666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.4, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.43333334, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.46666667, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.5, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432, 0.53333336, 1, -0.5634963, -0.51754683, -0.46929562, 0.44088432)
tracks/6/type = "position_3d"
tracks/6/imported = true
tracks/6/enabled = true
tracks/6/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = PackedFloat32Array(0, 1, -0.0016287166, 0.14501561, 0.00025157674, 0.033333335, 1, -0.0016287166, 0.14501561, 0.00025157674, 0.06666667, 1, -0.0017734149, 0.14506163, -0.0003335565, 0.1, 1, -0.0021488192, 0.14518102, -0.0018515008, 0.13333334, 1, -0.0026668992, 0.1453458, -0.0039463816, 0.16666667, 1, -0.0032396442, 0.14552797, -0.006262323, 0.2, 1, -0.0037789438, 0.1456995, -0.008443098, 0.23333333, 1, -0.004196892, 0.14583242, -0.010132994, 0.26666668, 1, -0.0044053355, 0.14589871, -0.010975973, 0.3, 1, -0.0043429704, 0.14587888, -0.0107237045, 0.33333334, 1, -0.0040551536, 0.14578734, -0.009559953, 0.36666667, 1, -0.0036139528, 0.14564702, -0.007775792, 0.4, 1, -0.003091374, 0.14548081, -0.0056629023, 0.43333334, 1, -0.0025595534, 0.14531165, -0.0035123436, 0.46666667, 1, -0.0020904627, 0.14516246, -0.0016155058, 0.5, 1, -0.0017561435, 0.14505613, -0.00026364537, 0.53333336, 1, -0.0016287166, 0.14501561, 0.00025157674)
tracks/7/type = "rotation_3d"
tracks/7/imported = true
tracks/7/enabled = true
tracks/7/path = NodePath("GeneralSkeleton:LeftUpperArm")
tracks/7/interp = 0
tracks/7/loop_wrap = true
tracks/7/keys = PackedFloat32Array(0, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.033333335, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.06666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.1, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.13333334, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.16666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.2, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.23333333, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.26666668, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.3, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.33333334, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.36666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.4, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.43333334, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.46666667, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.5, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397, 0.53333336, 1, 0.26007834, -0.25464663, -0.41803253, 0.83232397)
tracks/8/type = "rotation_3d"
tracks/8/imported = true
tracks/8/enabled = true
tracks/8/path = NodePath("GeneralSkeleton:LeftLowerArm")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = PackedFloat32Array(0, 1, 0.33293048, -0.3350286, -0.27948672, 0.8359428, 0.033333335, 1, 0.33293048, -0.3350286, -0.27948672, 0.8359428, 0.06666667, 1, 0.3333426, -0.33511743, -0.27944934, 0.8357554, 0.1, 1, 0.33441046, -0.3353484, -0.27935344, 0.8352681, 0.13333334, 1, 0.33588165, -0.3356686, -0.27922368, 0.8345923, 0.16666667, 1, 0.337504, -0.3360242, -0.27908355, 0.8338412, 0.2, 1, 0.3390282, -0.33636126, -0.27895495, 0.8331297, 0.23333333, 1, 0.34020686, -0.33662364, -0.27885735, 0.8325758, 0.26666668, 1, 0.34079418, -0.33675486, -0.2788096, 0.83229846, 0.3, 1, 0.3406185, -0.33671555, -0.2788239, 0.8323815, 0.33333334, 1, 0.33980745, -0.3365345, -0.27889028, 0.83276385, 0.36666667, 1, 0.33856225, -0.33625814, -0.27899405, 0.83334774, 0.4, 1, 0.33708444, -0.3359321, -0.27911958, 0.83403593, 0.43333334, 1, 0.33557707, -0.33560196, -0.2792504, 0.83473265, 0.46666667, 1, 0.3342446, -0.3353123, -0.27936825, 0.835344, 0.5, 1, 0.33329365, -0.33510682, -0.27945387, 0.8357777, 0.53333336, 1, 0.33293048, -0.3350286, -0.27948672, 0.8359428)
tracks/9/type = "position_3d"
tracks/9/imported = true
tracks/9/enabled = true
tracks/9/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/9/interp = 0
tracks/9/loop_wrap = true
tracks/9/keys = PackedFloat32Array(0, 1, -0.09795646, 0.42777103, 0.016737178, 0.033333335, 1, -0.09795646, 0.42777103, 0.016737178, 0.06666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.1, 1, -0.09795646, 0.42777103, 0.016737178, 0.13333334, 1, -0.09795646, 0.42777103, 0.016737178, 0.16666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.2, 1, -0.09795646, 0.42777103, 0.016737178, 0.23333333, 1, -0.09795646, 0.42777103, 0.016737178, 0.26666668, 1, -0.09795646, 0.42777103, 0.016737178, 0.3, 1, -0.09795646, 0.42777103, 0.016737178, 0.33333334, 1, -0.09795646, 0.42777103, 0.016737178, 0.36666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.4, 1, -0.09795646, 0.42777103, 0.016737178, 0.43333334, 1, -0.09795646, 0.42777103, 0.016737178, 0.46666667, 1, -0.09795646, 0.42777103, 0.016737178, 0.5, 1, -0.09795646, 0.42777103, 0.016737178, 0.53333336, 1, -0.09795646, 0.42777103, 0.016737178)
tracks/10/type = "rotation_3d"
tracks/10/imported = true
tracks/10/enabled = true
tracks/10/path = NodePath("GeneralSkeleton:RightShoulder")
tracks/10/interp = 0
tracks/10/loop_wrap = true
tracks/10/keys = PackedFloat32Array(0, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.033333335, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.06666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.1, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.13333334, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.16666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.2, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.23333333, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.26666668, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.3, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.33333334, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.36666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.4, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.43333334, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.46666667, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.5, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513, 0.53333336, 1, -0.56349725, 0.5175456, 0.4692949, 0.44088513)
tracks/11/type = "position_3d"
tracks/11/imported = true
tracks/11/enabled = true
tracks/11/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = PackedFloat32Array(0, 1, 0.00162871, 0.14501564, 0.00025160934, 0.033333335, 1, 0.00162871, 0.14501564, 0.00025160934, 0.06666667, 1, 0.0017734237, 0.14506167, -0.00033363982, 0.1, 1, 0.0021488585, 0.14518107, -0.0018515768, 0.13333334, 1, 0.002666969, 0.14534588, -0.003946391, 0.16666667, 1, 0.0032397194, 0.14552808, -0.0062623858, 0.2, 1, 0.0037791107, 0.14569964, -0.008443264, 0.23333333, 1, 0.0041970327, 0.14583257, -0.010133039, 0.26666668, 1, 0.0044054757, 0.14589885, -0.010975776, 0.3, 1, 0.004343134, 0.14587903, -0.010723805, 0.33333334, 1, 0.0040552947, 0.14578746, -0.009559882, 0.36666667, 1, 0.0036140687, 0.14564712, -0.007775907, 0.4, 1, 0.003091463, 0.1454809, -0.005662904, 0.43333334, 1, 0.0025596116, 0.14531171, -0.003512355, 0.46666667, 1, 0.0020904616, 0.14516251, -0.0016154677, 0.5, 1, 0.001756152, 0.14505614, -0.00026373038, 0.53333336, 1, 0.00162871, 0.14501564, 0.00025160934)
tracks/12/type = "rotation_3d"
tracks/12/imported = true
tracks/12/enabled = true
tracks/12/path = NodePath("GeneralSkeleton:RightUpperArm")
tracks/12/interp = 0
tracks/12/loop_wrap = true
tracks/12/keys = PackedFloat32Array(0, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.033333335, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.06666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.1, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.13333334, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.16666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.2, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.23333333, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.26666668, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.3, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.33333334, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.36666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.4, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.43333334, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.46666667, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.5, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673, 0.53333336, 1, 0.3420072, 0.44325665, 0.4187797, 0.7149673)
tracks/13/type = "rotation_3d"
tracks/13/imported = true
tracks/13/enabled = true
tracks/13/path = NodePath("GeneralSkeleton:RightLowerArm")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = PackedFloat32Array(0, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706, 0.033333335, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706, 0.06666667, 1, 0.14572267, -0.0057624606, 0.26361868, 0.9535392, 0.1, 1, 0.14395136, -0.0061668158, 0.26394954, 0.9537142, 0.13333334, 1, 0.1415052, -0.0067227054, 0.26440892, 0.95394915, 0.16666667, 1, 0.1387989, -0.00733442, 0.26492098, 0.95420015, 0.2, 1, 0.13624829, -0.007907767, 0.2654071, 0.9544281, 0.23333333, 1, 0.13427058, -0.008350169, 0.2657863, 0.9545991, 0.26666668, 1, 0.13328372, -0.008570235, 0.26597643, 0.9546824, 0.3, 1, 0.133579, -0.008504472, 0.26591948, 0.9546577, 0.33333334, 1, 0.13494149, -0.008200373, 0.26565757, 0.95454156, 0.36666667, 1, 0.13702889, -0.007732628, 0.26525792, 0.95435923, 0.4, 1, 0.13949957, -0.007176376, 0.26478806, 0.95413613, 0.43333334, 1, 0.14201224, -0.006607715, 0.2643134, 0.9539011, 0.46666667, 1, 0.14422686, -0.0061040483, 0.26389793, 0.9536872, 0.5, 1, 0.14580408, -0.0057438863, 0.26360357, 0.95353097, 0.53333336, 1, 0.1464052, -0.005606344, 0.26349184, 0.9534706)
tracks/14/type = "rotation_3d"
tracks/14/imported = true
tracks/14/enabled = true
tracks/14/path = NodePath("GeneralSkeleton:RightHand")
tracks/14/interp = 0
tracks/14/loop_wrap = true
tracks/14/keys = PackedFloat32Array(0, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.033333335, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.06666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.1, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.13333334, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.16666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.2, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.23333333, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.26666668, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.3, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.33333334, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.36666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.4, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.43333334, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.46666667, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.5, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404, 0.53333336, 1, 0.04333621, -0.010644135, -0.03354829, 0.9984404)
[resource]
_data = {
&"dasher_getting_hit": SubResource("Animation_pebao"),
&"dasher_hit": SubResource("Animation_p0uhi"),
&"dasher_hold": SubResource("Animation_xciuw"),
&"dasher_put": SubResource("Animation_3s20j"),
&"dasher_stun": SubResource("Animation_58ei7"),
&"dasher_take": SubResource("Animation_stu12")
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://bhaoe16cwuhgn"
path="res://.godot/imported/ted_mesh.glb-3a244082b66ad864a2330884dc3cfef0.scn"
[deps]
source_file="res://assets/characters/tektons/ted_mesh.glb"
dest_files=["res://.godot/imported/ted_mesh.glb-3a244082b66ad864a2330884dc3cfef0.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

@@ -0,0 +1,45 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d3pkw7elxf3uj"
path.s3tc="res://.godot/imported/ted_mesh_Ted_tex.png-4d174c9da5478cc8fa9a7dc133c769a9.s3tc.ctex"
path.etc2="res://.godot/imported/ted_mesh_Ted_tex.png-4d174c9da5478cc8fa9a7dc133c769a9.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "ad130a61dfc420142fb25fb3f8aa3c6f"
}
[deps]
source_file="res://assets/characters/tektons/ted_mesh_Ted_tex.png"
dest_files=["res://.godot/imported/ted_mesh_Ted_tex.png-4d174c9da5478cc8fa9a7dc133c769a9.s3tc.ctex", "res://.godot/imported/ted_mesh_Ted_tex.png-4d174c9da5478cc8fa9a7dc133c769a9.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://crj13iq2laas2"
path="res://.godot/imported/tekton_chuck.glb-635c14eb795891e496e379a5e8e8da76.scn"
[deps]
source_file="res://assets/characters/tektons/tekton_chuck.glb"
dest_files=["res://.godot/imported/tekton_chuck.glb-635c14eb795891e496e379a5e8e8da76.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

@@ -0,0 +1,45 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cuvid5ung2t00"
path.s3tc="res://.godot/imported/tekton_chuck_Chuck_Tex.png-e0045591d28f0268fdd766f2957b1ef1.s3tc.ctex"
path.etc2="res://.godot/imported/tekton_chuck_Chuck_Tex.png-e0045591d28f0268fdd766f2957b1ef1.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "73774d4b25b8bce2a6b7098b17cf4dc5"
}
[deps]
source_file="res://assets/characters/tektons/tekton_chuck_Chuck_Tex.png"
dest_files=["res://.godot/imported/tekton_chuck_Chuck_Tex.png-e0045591d28f0268fdd766f2957b1ef1.s3tc.ctex", "res://.godot/imported/tekton_chuck_Chuck_Tex.png-e0045591d28f0268fdd766f2957b1ef1.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://fno6pom1orvl"
path="res://.godot/imported/tekton_nest.glb-36c2a8dfaddd466203be329bdc5cb237.scn"
[deps]
source_file="res://assets/characters/tektons/tekton_nest.glb"
dest_files=["res://.godot/imported/tekton_nest.glb-36c2a8dfaddd466203be329bdc5cb237.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 524 KiB

@@ -0,0 +1,45 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bsidqfrr4rfbe"
path.s3tc="res://.godot/imported/tekton_nest_Nest_Tex.png-35ffaafebbf3b41a5eb925ccb6a1d73e.s3tc.ctex"
path.etc2="res://.godot/imported/tekton_nest_Nest_Tex.png-35ffaafebbf3b41a5eb925ccb6a1d73e.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
generator_parameters={
"md5": "a0e413b66e1f7568f7bc7e985cd740a2"
}
[deps]
source_file="res://assets/characters/tektons/tekton_nest_Nest_Tex.png"
dest_files=["res://.godot/imported/tekton_nest_Nest_Tex.png-35ffaafebbf3b41a5eb925ccb6a1d73e.s3tc.ctex", "res://.godot/imported/tekton_nest_Nest_Tex.png-35ffaafebbf3b41a5eb925ccb6a1d73e.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
Binary file not shown.
@@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b7w0ygo6ar0g1"
path="res://.godot/imported/tekton_throwing_tiles.glb-ed040127419938b4e0975d9058b97819.scn"
[deps]
source_file="res://assets/characters/tektons/tekton_throwing_tiles.glb"
dest_files=["res://.godot/imported/tekton_throwing_tiles.glb-ed040127419938b4e0975d9058b97819.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmoyhmh4jpep0"
path="res://.godot/imported/playerboard_scatter.png-56acbbf1272f9ca0a0f4c05748cbb311.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/vfx/playerboard_scatter.png"
dest_files=["res://.godot/imported/playerboard_scatter.png-56acbbf1272f9ca0a0f4c05748cbb311.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvv33rheu02jt"
path="res://.godot/imported/spawn_baruu.png-070f37821844382ed2de00e4868812a2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/vfx/spawn_baruu.png"
dest_files=["res://.godot/imported/spawn_baruu.png-070f37821844382ed2de00e4868812a2.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cwmqu5wsing63"
path="res://.godot/imported/take_powerup.png-9020da02d6cb4ea40dac3fd7cd66fcef.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/graphics/vfx/take_powerup.png"
dest_files=["res://.godot/imported/take_powerup.png-9020da02d6cb4ea40dac3fd7cd66fcef.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
+6 -1
View File
@@ -1254,7 +1254,12 @@ func _create_tekton(pos: Vector2i, tekton_id: int, is_static: bool = false):
var node_name = "Tekton_%d" % tekton_id
if has_node(node_name): return
var tekton_scene = load("res://scenes/tekton.tscn")
var tekton_scene
if is_static:
tekton_scene = load("res://scenes/static_tekton.tscn")
else:
tekton_scene = load("res://scenes/tekton.tscn")
var tekton = tekton_scene.instantiate()
tekton.name = node_name
add_child(tekton)
+35 -44
View File
@@ -247,8 +247,10 @@ func _ready():
# Visible to all human players. Green for local player, Red for others.
var pointer = get_node_or_null("CharacterPointer")
# === Dynamically load new Dasher animations ===
_load_dasher_animations()
# === Dasher animations are loaded statically via player.tscn ext_resource ===
# The dasher-pack.tres AnimationLibrary is referenced on the AnimationPlayer
# node as a second library ("dasher-pack"). See tools/convert_dasher_animations.gd
# and tools/build_dasher_pack.gd to regenerate the .tres from the source .glb files.
if pointer:
pointer.visible = true
@@ -374,45 +376,10 @@ func _init_floor_spawn_anchor():
floor_spawn_top.reparent(floor_spawn_anchor, false)
func _load_dasher_animations():
"""Dynamically loads dasher animations from GLB files and adds them to the AnimationPlayer."""
if not anim_player: return
var anim_library = anim_player.get_animation_library("animation-pack")
if not anim_library:
anim_library = AnimationLibrary.new()
anim_player.add_animation_library("animation-pack", anim_library)
var dasher_files = [
{"path": "res://assets/characters/dashers/dasher_getting_hit.glb", "name": "dasher_getting_hit"},
{"path": "res://assets/characters/dashers/dasher_hit.glb", "name": "dasher_hit"},
{"path": "res://assets/characters/dashers/dasher_hold.glb", "name": "dasher_hold"},
{"path": "res://assets/characters/dashers/dasher_put.glb", "name": "dasher_put"},
{"path": "res://assets/characters/dashers/dasher_stun.glb", "name": "dasher_stun"},
{"path": "res://assets/characters/dashers/dasher_take.glb", "name": "dasher_take"}
]
for file_data in dasher_files:
var gltf_doc = GLTFDocument.new()
var gltf_state = GLTFState.new()
var error = gltf_doc.append_from_file(file_data.path, gltf_state)
if error == OK:
var anim_player_node = gltf_state.get_animation_player(0)
# Godot's GLTF importer creates an AnimationPlayer inside the scene
var scene = gltf_doc.generate_scene(gltf_state)
if scene:
var scene_anim_player = scene.find_child("AnimationPlayer", true, false)
if scene_anim_player:
var libs = scene_anim_player.get_animation_library_list()
for lib_name in libs:
var temp_lib = scene_anim_player.get_animation_library(lib_name)
for anim_name in temp_lib.get_animation_list():
var anim = temp_lib.get_animation(anim_name)
if not anim_library.has_animation(file_data.name):
anim_library.add_animation(file_data.name, anim)
scene.queue_free()
print("[Player] Dasher animations loaded into 'animation-pack'.")
# Deprecated: dasher animations are now loaded statically via the
# dasher-pack.tres AnimationLibrary referenced on the AnimationPlayer node
# in player.tscn. Keep this stub for backward compatibility / no-op.
pass
@onready var floor_spawn_bot: AnimatedSprite3D = $floor_spawn_bot
@onready var floor_spawn_top: AnimatedSprite3D = $floor_spawn_top
@@ -684,6 +651,8 @@ const ANIMATION_SPEED: float = 2.0
func play_walk_animation() -> void:
"""Play walking animation at increased speed."""
if is_carrying_tekton and anim_player and anim_player.has_animation("dasher-pack/dasher_hold"):
return # Let dasher_hold keep playing
if anim_player and anim_player.has_animation("animation-pack/walk_forward"):
anim_player.play("animation-pack/walk_forward", -1, ANIMATION_SPEED)
@@ -704,6 +673,8 @@ func play_special_animation() -> void:
func play_idle_animation() -> void:
"""Play idle animation at normal speed."""
if is_carrying_tekton and anim_player and anim_player.has_animation("dasher-pack/dasher_hold"):
return # Let dasher_hold keep playing
if anim_player and anim_player.has_animation("animation-pack/idle"):
anim_player.play("animation-pack/idle")
@@ -1002,6 +973,10 @@ func apply_stagger(duration: float = 1.5):
# Play knock VFX sequence on the receiver
_play_knock_vfx()
if anim_player and anim_player.has_animation("dasher-pack/dasher_getting_hit"):
anim_player.play("dasher-pack/dasher_getting_hit")
if anim_player.has_animation("dasher-pack/dasher_stun"):
anim_player.queue("dasher-pack/dasher_stun")
# Set immunity (3 seconds as requested)
immunity_timer = 3.0
@@ -1019,6 +994,7 @@ func apply_stagger(duration: float = 1.5):
is_frozen = false
_refresh_player_visuals()
play_idle_animation()
func _play_knock_vfx() -> void:
"""Plays the three knock receiver VFX concurrently.
@@ -2439,7 +2415,10 @@ func sync_snatch_tekton(carrier_path: NodePath, tekton_path: NodePath):
is_charged_strike = false
SfxManager.play("pick_up_tekton_roaming")
play_pickup_animation()
if anim_player and anim_player.has_animation("dasher-pack/dasher_take"):
anim_player.play("dasher-pack/dasher_take")
if anim_player.has_animation("dasher-pack/dasher_hold"):
anim_player.queue("dasher-pack/dasher_hold")
# Visual feedback for the victim
if carrier.has_method("sync_bump"):
@@ -2452,6 +2431,11 @@ func sync_snatch_tekton(carrier_path: NodePath, tekton_path: NodePath):
func sync_grab_tekton(tekton_path: NodePath):
var tekton = get_node_or_null(tekton_path)
if tekton:
if anim_player and anim_player.has_animation("dasher-pack/dasher_take"):
anim_player.play("dasher-pack/dasher_take")
if anim_player.has_animation("dasher-pack/dasher_hold"):
anim_player.queue("dasher-pack/dasher_hold")
carried_tekton = tekton
self.is_carrying_tekton = true
tekton.set_carried(true, self )
@@ -2461,7 +2445,6 @@ func sync_grab_tekton(tekton_path: NodePath):
is_charged_strike = false
SfxManager.play("pick_up_tekton_roaming")
play_pickup_animation()
print("[Player %s] Grabbed Tekton %s" % [name, tekton.name])
func throw_tekton():
@@ -2499,6 +2482,8 @@ func throw_tekton():
@rpc("any_peer", "call_local", "reliable")
func sync_throw_tekton(target_pos: Vector2i):
if anim_player and anim_player.has_animation("dasher-pack/dasher_put"):
anim_player.play("dasher-pack/dasher_put")
if carried_tekton:
var tekton = carried_tekton
carried_tekton = null
@@ -2582,6 +2567,8 @@ func drop_tekton():
@rpc("any_peer", "call_local", "reliable")
func sync_drop_tekton():
if anim_player and anim_player.has_animation("dasher-pack/dasher_put"):
anim_player.play("dasher-pack/dasher_put")
if carried_tekton:
var tekton = carried_tekton
carried_tekton = null
@@ -2619,6 +2606,8 @@ func update_active_player_indicator():
@rpc("any_peer", "call_local", "unreliable")
func sync_bump(target_pos: Vector2i, is_soft: bool = false):
"""Visual attack 'bump' or collision animation."""
if not is_soft and anim_player and anim_player.has_animation("dasher-pack/dasher_hit"):
anim_player.play("dasher-pack/dasher_hit")
# Always return to LOGICAL position to prevent character drift!
var original_pos = grid_to_world(current_position)
var target_world = grid_to_world(target_pos)
@@ -2650,7 +2639,7 @@ func knock_tekton():
# Consume Boost if we haven't already (or just consume it now if we are in mode)
if powerup_manager:
powerup_manager.consume_boost(100.0)
if is_multiplayer_authority():
rpc("sync_knock_tekton", tekton.get_path())
@@ -2665,6 +2654,8 @@ func knock_tekton():
@rpc("any_peer", "call_local", "reliable")
func sync_knock_tekton(tekton_path: NodePath):
if anim_player and anim_player.has_animation("dasher-pack/dasher_hit"):
anim_player.play("dasher-pack/dasher_hit")
var tekton = get_node_or_null(tekton_path)
if tekton:
# Intensity 2.0 for knock (drops 200% tiles) + Shrink/Recover
+3 -2
View File
@@ -6,6 +6,7 @@
[ext_resource type="PackedScene" uid="uid://1vk0mjnwkngi" path="res://assets/characters/Masbro.glb" id="2_mjsl8"]
[ext_resource type="PackedScene" uid="uid://d4cul3w3wem5w" path="res://assets/characters/Gatot.glb" id="4_3tlf6"]
[ext_resource type="PackedScene" uid="uid://bmln7v6v5kvxg" path="res://assets/characters/Oldpop.glb" id="5_alfd1"]
[ext_resource type="AnimationLibrary" uid="uid://nsko4grplr5m" path="res://assets/characters/animations/dasher-pack.res" id="6a_dashp"]
[ext_resource type="AnimationLibrary" uid="uid://c3pyopnwibckj" path="res://assets/characters/animations/animation-pack.res" id="6_5oq5w"]
[ext_resource type="Script" uid="uid://cwwwixc07jc86" path="res://scripts/bot_controller.gd" id="7_botctrl"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="8_y4r1p"]
@@ -50,8 +51,9 @@ visible = false
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.485, 0)
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1085499957]
root_node = NodePath("../Masbro")
root_node = NodePath("../Oldpop")
libraries/animation-pack = ExtResource("6_5oq5w")
libraries/dasher-pack = ExtResource("6a_dashp")
[node name="CharacterPointer" type="MeshInstance3D" parent="." unique_id=1262762501]
transform = Transform3D(0.3535534, 0, 0.35355335, 0, 0.5, 0, -0.35355335, 0, 0.3535534, 0, -0.468462, 0)
@@ -85,7 +87,6 @@ billboard = 1
no_depth_test = true
render_priority = 2
outline_render_priority = 1
modulate = Color(0.32, 0.614667, 1, 1)
text = "1st"
font = ExtResource("8_y4r1p")
font_size = 62
+61
View File
@@ -0,0 +1,61 @@
[gd_scene format=3 uid="uid://d4mjd3tkf21xe"]
[ext_resource type="Script" uid="uid://dyovwailce5tf" path="res://scripts/tekton.gd" id="1_tekton"]
[ext_resource type="Script" uid="uid://c67yq846u8y68" path="res://scripts/tekton_controller.gd" id="2_controller"]
[ext_resource type="PackedScene" uid="uid://statictektonmesh001" path="res://scenes/static_tekton_mesh.tscn" id="3_d2kpk"]
[ext_resource type="Texture2D" uid="uid://biun2yvglxgij" path="res://assets/graphics/touch_control/grab_tekton.png" id="4_grab_icon"]
[sub_resource type="BoxShape3D" id="BoxShape3D_tekton"]
size = Vector3(0.8, 1, 0.8)
[node name="Tekton" type="Node3D" unique_id=119914767 groups=["Tektons"]]
script = ExtResource("1_tekton")
[node name="TektonController" type="Node" parent="." unique_id=1658331083]
script = ExtResource("2_controller")
[node name="Visuals" type="Node3D" parent="." unique_id=1698719440]
[node name="tekton" parent="Visuals" unique_id=2052742928 instance=ExtResource("3_d2kpk")]
[node name="HitArea" type="Area3D" parent="." unique_id=2139590311]
collision_layer = 4
collision_mask = 2
[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea" unique_id=818146069]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
shape = SubResource("BoxShape3D_tekton")
[node name="InteractionPrompt" type="Node3D" parent="." unique_id=855764577]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.4, 0)
[node name="PromptIcon" type="Sprite3D" parent="InteractionPrompt" unique_id=11135903]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3731489, 0)
pixel_size = 0.002
billboard = 1
no_depth_test = true
render_priority = 1
texture = ExtResource("4_grab_icon")
[node name="KeyLabel" type="Label3D" parent="InteractionPrompt" unique_id=1816493043]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.30466843, 0)
pixel_size = 0.01
billboard = 1
no_depth_test = true
render_priority = 2
outline_render_priority = 1
modulate = Color(0.1, 1, 0.2, 1)
text = "[ G ]"
font_size = 48
outline_size = 18
[node name="ActionLabel" type="Label3D" parent="InteractionPrompt" unique_id=848495007]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.79176676, 0)
pixel_size = 0.01
billboard = 1
no_depth_test = true
render_priority = 2
outline_render_priority = 1
text = "LIFT TEKTON"
font_size = 38
outline_size = 10
File diff suppressed because one or more lines are too long
+3
View File
@@ -167,6 +167,9 @@ func _process(delta: float) -> void:
if not is_active:
return
if not multiplayer.has_multiplayer_peer() or multiplayer.multiplayer_peer == null:
return
elapsed_time += delta
# Phase escalation
+1 -1
View File
@@ -103,7 +103,7 @@ func handle_unhandled_input(event):
if event.is_action_pressed("action_knock_tekton"):
if player.powerup_manager:
player.powerup_manager.use_special_effect()
if player.is_attack_mode and player.has_method("enter_attack_mode"):
if player.get("is_attack_mode") and player.has_method("enter_attack_mode"):
player.enter_attack_mode()
get_viewport().set_input_as_handled()
+2 -2
View File
@@ -149,7 +149,7 @@ func can_use_special() -> bool:
func enable_attack_mode():
"""Enable Attack Mode without consuming boost."""
player.is_attack_mode = true
player.set("is_attack_mode", true)
NotificationManager.send_message(player, NotificationManager.MESSAGES.ATTACK_MODE_READY, NotificationManager.MessageType.POWERUP)
print("[PowerUp] Attack Mode Enabled (Free).")
@@ -177,7 +177,7 @@ func consume_boost(amount: float):
current_boost -= amount
if current_boost <= 0:
current_boost = 0.0
player.is_attack_mode = false # Out of fuel
player.set("is_attack_mode", false) # Out of fuel
emit_signal("boost_reset") # UI update for empty
print("[PowerUp] Boost depleted. Attack Mode OFF.")
+5 -10
View File
@@ -317,16 +317,11 @@ func is_controller_button_used(button_index: int) -> String:
return ""
func get_control_keycode(action_name: String) -> int:
# Map friendly names to their internal settings.controls keys
var mapped_name = action_name
if action_name == "tekton_grab":
mapped_name = "action_grab_tekton"
elif action_name == "attack_mode":
mapped_name = "action_knock_tekton"
elif action_name == "grab":
mapped_name = "action_grab"
return settings.controls.get(mapped_name, -1)
# settings.controls stores keys by the same name callers pass in
# (e.g. "tekton_grab", "attack_mode", "grab"). The InputMap action name
# (e.g. "action_grab_tekton") is a separate concept handled by
# apply_control_settings(). Do NOT remap here.
return settings.controls.get(action_name, -1)
func get_control_text(action_name: String) -> String:
var code = get_control_keycode(action_name)
+1 -1
View File
@@ -4,7 +4,7 @@ extends Node
# Handles spawning and placement of Static Tektons in restricted zones.
const STAND_SCENE_PATH = "res://scenes/static_tekton_stand.tscn"
const TEKTON_SCENE_PATH = "res://scenes/tekton.tscn"
const TEKTON_SCENE_PATH = "res://scenes/static_tekton.tscn"
const STATIC_CONTROLLER_SCRIPT = "res://scripts/static_tekton_controller.gd"
const PERIMETER_BUFFER = 1 # 1-tile safe zone on all sides (matches main.gd)
+3
View File
@@ -90,6 +90,9 @@ func _process(delta):
if not is_active:
return
if not multiplayer.has_multiplayer_peer() or multiplayer.multiplayer_peer == null:
return
# Decrement timer locally for all peers (smoother HUD than waiting for RPC)
phase_timer -= delta
+35 -12
View File
@@ -97,14 +97,14 @@ func move_to(target_pos: Vector2i):
var target_rot = atan2(dir.x, dir.z)
rotation.y = target_rot
play_animation("tekton_move")
play_animation("tekton_move" if not is_static_turret else "Armature|tekton_move")
tween = create_tween()
tween.tween_property(self , "position", target_world_pos, movement_speed).set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_IN_OUT)
tween.tween_callback(func():
current_position = target_pos
is_moving = false
play_animation("tekton_idle")
play_animation("tekton_idle" if not is_static_turret else "Armature|tekton_idle")
emit_signal("movement_finished")
)
@@ -143,7 +143,7 @@ func set_carried(state: bool, p_carrier: Node3D = null):
carrier = p_carrier
if is_carried:
play_animation("tekton_idle")
play_animation("tekton_idle" if not is_static_turret else "Armature|tekton_idle")
is_moving = false
if tween: tween.kill()
@@ -242,6 +242,10 @@ func _update_prompt_label():
prompt_container.visible = false
func _ready():
# For static tekton, mark it as static
if name.begins_with("StaticTekton") or has_node("Visuals/static_tekton_mesh"):
is_static_turret = true
# Cache meshes and their initial scales
_cache_meshes(self)
@@ -329,7 +333,12 @@ func on_thrown_landing(attacker: Node = null, intensity: float = 1.0):
spawn_tiles_around(int(8 * intensity))
# Floor Freeze (Visual/Instant - Run on all clients locally)
temporarily_change_floor(current_position, 1, 6, 3.0)
var mode_val = GameMode.Mode.FREEMODE
if LobbyManager:
mode_val = LobbyManager.get_game_mode()
if mode_val != GameMode.Mode.FREEMODE:
temporarily_change_floor(current_position, 1, 6, 3.0)
# Wait 3.0 seconds
await get_tree().create_timer(3.0).timeout
@@ -345,8 +354,8 @@ func on_thrown_landing(attacker: Node = null, intensity: float = 1.0):
is_recovering = false
# Resume AI
if controller and controller.has_method("_start_timer"):
if is_multiplayer_authority() and not is_carried:
if not is_multiplayer_authority() or not is_carried:
if controller and controller.has_method("_start_timer"):
controller._start_timer()
@@ -417,22 +426,24 @@ func spawn_tiles_around(count: int = 4):
# If it's a static turret, make it face the target tile it's about to spawn instead
if is_static_turret:
# We don't have a specific target yet, but we can pick an average direction
# Or just let it throw randomly like the others. Wait, the user wants:
# "static tekton, should facing toward where they're going to thrown the tiles"
# We'll calculate rotation inside the spawning loop for static turrets.
pass
else:
rotation.y = random_angle
# Play throw animation
if not is_carried and not is_thrown:
if not is_carried and not is_thrown and has_node("Visuals/tekton/Armature/AnimationPlayer"):
play_animation("tekton_throw_tile")
# Queue idle after animation finishes (approx 1.0s)
get_tree().create_timer(1.0).timeout.connect(func():
if not is_moving and not is_carried and not is_thrown:
play_animation("tekton_idle")
)
elif is_static_turret and not is_carried and not is_thrown:
play_animation("Armature|tekton_throw_tile")
get_tree().create_timer(1.0).timeout.connect(func():
if not is_moving and not is_carried and not is_thrown:
play_animation("Armature|tekton_idle")
)
print("[Tekton] Spawning %d tiles around %s" % [count, current_position])
@@ -453,6 +464,11 @@ func spawn_tiles_around(count: int = 4):
var throw_dir = Vector3(x, 0, y).normalized()
if throw_dir.length_squared() > 0.01:
rotation.y = atan2(throw_dir.x, throw_dir.z)
# Also make the visuals node rotate if needed (sometimes necessary for static items)
var visuals = get_node_or_null("Visuals")
if visuals:
visuals.rotation.y = 0 # keep base at 0 since parent rotated
# Don't overwrite the Tekton's own cell? Or do?
# Maybe avoid center.
@@ -496,8 +512,10 @@ func spawn_tiles_around(count: int = 4):
if LobbyManager:
mode = LobbyManager.get_game_mode()
if mode == GameMode.Mode.TEKTON_DOORS:
if LobbyManager and LobbyManager.get_game_mode() == GameMode.Mode.TEKTON_DOORS:
item_id = [11, 14].pick_random()
elif mode == GameMode.Mode.FREEMODE:
item_id = rng.randi_range(7, 10) # No powerups in freemode either, just normal tiles
else:
item_id = rng.randi_range(11, 14)
@@ -540,6 +558,11 @@ func play_animation(anim_name: String):
# Try specific user path first
var anim_player = get_node_or_null("Visuals/tekton/Armature/AnimationPlayer")
if is_static_turret:
anim_player = get_node_or_null("Visuals/static_tekton_mesh/tekton_throwing_tiles/AnimationPlayer")
if not anim_player:
anim_player = get_node_or_null("Visuals/tekton_throwing_tiles/AnimationPlayer") # Check direct child just in case
# If not found, try finding recursive
if not anim_player:
anim_player = find_child("AnimationPlayer", true, false)
+63
View File
@@ -0,0 +1,63 @@
# Dasher Animation Tools
The dasher character (`assets/characters/dashers/dasher_*.glb`) provides six
animation clips. They need to be retargeted to the player rig (which uses
`GeneralSkeleton` + Mixamo bone names) and packed into a single
`AnimationLibrary` that `player.tscn` can reference.
## One-time generation (headless, no editor needed)
```bash
godot --headless --path /home/beng/Godot/Projects/tekton-enet \
--script res://tools/convert_dasher_animations_headless.gd
godot --headless --path /home/beng/Godot/Projects/tekton-enet \
--script res://tools/build_dasher_pack_headless.gd
```
Output:
- `assets/characters/animations/dasher_<name>.res` (one per glb)
- `assets/characters/animations/dasher-pack.res` (combined library)
`scenes/player.tscn` already references `dasher-pack.res` as a second
AnimationLibrary on the AnimationPlayer node, alongside the original
`animation-pack.res`.
## Or run inside the editor
Use the EditorScript variants:
- `tools/convert_dasher_animations.gd` (`@tool extends EditorScript`)
- `tools/build_dasher_pack.gd` (`@tool extends EditorScript`)
Open each in the editor and `File > Run` (`Ctrl+Shift+X`).
## Usage
```gdscript
anim_player.play("dasher-pack/dasher_hit")
anim_player.play("dasher-pack/dasher_stun")
# etc.
```
## How it works
Each `dasher_*.glb` contains three source animations in a single
`AnimationLibrary` (e.g. `dasher_hold.glb` has `bob-rig|Hold|Anima_Layer`,
`bob-rig|Put|Anima_Layer`, `bob-rig|bob ani|Anima_Layer`). The converter
picks the most relevant one based on the glb filename
(`ANIM_PICK` constant in `convert_dasher_animations_headless.gd`) and
retargets the bone names. The resulting `.res` has one animation per glb
named after the glb (`dasher_hold`, `dasher_hit`, etc.), retargeted to
`GeneralSkeleton:<MixamoBone>` paths so they apply against the player's
shared skeleton.
The `BONE_REMAP` table in the converter defines Blender → Mixamo bone
name translations (e.g. `head``Head`, `hand.L``LeftHand`).
Helper nodes (`head_end`, `hand.L_end`, etc.) that don't exist in the
player rig are silently dropped.
## Editing the bone remap
If a dasher animation doesn't apply correctly, the most likely cause is a
bone name in the glb that's not in `BONE_REMAP`. Add the entry in
`convert_dasher_animations_headless.gd` and re-run both tools.
+52
View File
@@ -0,0 +1,52 @@
@tool
extends EditorScript
# Editor tool: combine all dasher_<name>.tres AnimationLibrary files into a
# single dasher-pack.tres for player.tscn to reference.
#
# Run AFTER convert_dasher_animations.gd.
# File > Run (Ctrl+Shift+X) on this script.
#
# Output: res://assets/characters/animations/dasher-pack.tres
#
# Then add an ext_resource to scenes/player.tscn:
# [ext_resource type="AnimationLibrary" path="res://assets/characters/animations/dasher-pack.tres" id="..."]
# And on the AnimationPlayer node:
# libraries/dasher-pack = ExtResource("...")
const ANIM_DIR := "res://assets/characters/animations"
const OUTPUT := "res://assets/characters/animations/dasher-pack.res"
func _run() -> void:
var combined := AnimationLibrary.new()
var dir := DirAccess.open(ANIM_DIR)
if not dir:
push_error("[Build] Cannot open %s" % ANIM_DIR)
return
var loaded: Array[String] = []
for fname in dir.get_files():
if not fname.begins_with("dasher_"): continue
if not fname.ends_with(".res"): continue
if fname == "dasher-pack.res": continue
var path := "%s/%s" % [ANIM_DIR, fname]
var res: Resource = load(path)
if not res is AnimationLibrary:
push_warning("[Build] %s is not an AnimationLibrary, skipping" % fname)
continue
var lib: AnimationLibrary = res
for anim_name in lib.get_animation_list():
if combined.has_animation(anim_name):
push_warning("[Build] Duplicate anim name '%s' in %s, skipping" % [anim_name, fname])
continue
combined.add_animation(anim_name, lib.get_animation(anim_name))
loaded.append("%s/%s" % [fname, anim_name])
var err := ResourceSaver.save(combined, OUTPUT)
if err != OK:
push_error("[Build] ResourceSaver.save failed: %d" % err)
return
print("[Build] %d animation(s) written to %s" % [loaded.size(), OUTPUT])
for l in loaded:
print(" - %s" % l)
+48
View File
@@ -0,0 +1,48 @@
extends SceneTree
# Headless equivalent of build_dasher_pack.gd.
# Run from CLI AFTER convert_dasher_animations_headless.gd:
# godot --headless --path /home/beng/Godot/Projects/tekton-enet --script res://tools/build_dasher_pack_headless.gd
#
# Produces: res://assets/characters/animations/dasher-pack.tres
const ANIM_DIR := "res://assets/characters/animations"
const OUTPUT := "res://assets/characters/animations/dasher-pack.res"
func _init() -> void:
print("[Build] Headless run starting...")
var combined := AnimationLibrary.new()
var dir := DirAccess.open(ANIM_DIR)
if not dir:
push_error("[Build] Cannot open %s" % ANIM_DIR)
quit(1)
return
var loaded: Array[String] = []
for fname in dir.get_files():
if not fname.begins_with("dasher_"): continue
if not fname.ends_with(".res"): continue
if fname == "dasher-pack.res": continue
var path := "%s/%s" % [ANIM_DIR, fname]
var res: Resource = load(path)
if not res is AnimationLibrary:
push_warning("[Build] %s is not an AnimationLibrary, skipping" % fname)
continue
var lib: AnimationLibrary = res
for anim_name in lib.get_animation_list():
if combined.has_animation(anim_name):
push_warning("[Build] Duplicate anim name '%s' in %s, skipping" % [anim_name, fname])
continue
combined.add_animation(anim_name, lib.get_animation(anim_name))
loaded.append("%s/%s" % [fname, anim_name])
var err := ResourceSaver.save(combined, OUTPUT)
if err != OK:
push_error("[Build] ResourceSaver.save failed: %d" % err)
quit(1)
return
print("[Build] Done. %d animation(s) written to %s" % [loaded.size(), OUTPUT])
for l in loaded:
print(" - %s" % l)
quit(0)
-1
View File
@@ -1 +0,0 @@
uid://baco51hmps6s1
+185
View File
@@ -0,0 +1,185 @@
@tool
extends EditorScript
# Editor tool: convert each dasher_*.glb into an AnimationLibrary .tres file
# with tracks retargeted to the player rig (GeneralSkeleton + Mixamo bone names).
#
# Run once in the Godot editor:
# File > Run (Ctrl+Shift+X) on this script, OR
# from a @tool script: EditorInterface.get_resource_filesystem().scan()
#
# Output:
# assets/characters/animations/dasher_<name>.tres (one per glb)
# Plus a combined library:
# assets/characters/animations/dasher-pack.tres
#
# Run build_dasher_pack.gd after this to consolidate.
const DASHER_DIR := "res://assets/characters/dashers"
const ANIM_DIR := "res://assets/characters/animations"
# Map dasher glb bone names (Blender/standard) -> player rig bone names (Mixamo).
# Tracks whose node name is not in this map are dropped (e.g. helper "head_end" empties).
const BONE_REMAP := {
"bob-hold": "Hips", # root of the dasher glb
"spine": "Hips",
"spine.001": "Spine",
"head": "Head",
"hand.L": "LeftHand",
"hand.R": "RightHand",
"forearm.L": "LeftLowerArm",
"forearm.R": "RightLowerArm",
"upper_arm.L": "LeftUpperArm",
"upper_arm.R": "RightUpperArm",
"shoulder.L": "LeftShoulder",
"shoulder.R": "RightShoulder",
"leg.L": "LeftLowerLeg",
"leg.R": "RightLowerLeg",
"thigh.L": "LeftUpperLeg",
"thigh.R": "RightUpperLeg",
"foot.L": "LeftFoot",
"foot.R": "RightFoot",
"toe.L": "LeftToeBase",
"toe.R": "RightToeBase",
}
const TRACK_TYPES := [
"position", # 3D position tracks
"rotation", # 3D rotation tracks (quaternion)
"scale", # 3D scale tracks
]
func _run() -> void:
var dasher_dir := DirAccess.open(DASHER_DIR)
if not dasher_dir:
push_error("[Convert] Cannot open %s" % DASHER_DIR)
return
var converted: Array[String] = []
for fname in dasher_dir.get_files():
if not fname.ends_with(".glb"): continue
if not fname.begins_with("dasher_"): continue
var stem := fname.get_basename() # e.g. "dasher_hold"
var out_path := "%s/%s.res" % [ANIM_DIR, stem]
var ok := _convert_one("%s/%s" % [DASHER_DIR, fname], stem, out_path)
if ok:
converted.append(out_path)
else:
push_warning("[Convert] Skipped %s" % fname)
print("[Convert] %d dasher glb(s) converted: %s" % [converted.size(), converted])
func _convert_one(glb_path: String, anim_name: String, out_path: String) -> bool:
print("[Convert] %s -> %s" % [glb_path, out_path])
var doc := GLTFDocument.new()
var state := GLTFState.new()
var err := doc.append_from_file(glb_path, state)
if err != OK:
push_error("[Convert] append_from_file failed: %d" % err)
return false
var scene := doc.generate_scene(state)
if not scene:
push_error("[Convert] generate_scene returned null")
return false
var src_player: AnimationPlayer = scene.find_child("AnimationPlayer", true, false)
if not src_player:
push_error("[Convert] No AnimationPlayer in %s" % glb_path)
scene.queue_free()
return false
var out_lib := AnimationLibrary.new()
for lib_name in src_player.get_animation_library_list():
var src_lib := src_player.get_animation_library(lib_name)
for src_anim_name in src_lib.get_animation_list():
var src_anim: Animation = src_lib.get_animation(src_anim_name)
var retargeted := _retarget(src_anim)
if retargeted and retargeted.get_track_count() > 0:
out_lib.add_animation(anim_name, retargeted)
print(" + %s (%d tracks)" % [anim_name, retargeted.get_track_count()])
else:
push_warning(" - %s produced 0 tracks after retarget" % src_anim_name)
scene.queue_free()
if out_lib.get_animation_list().is_empty():
push_error("[Convert] Output library is empty for %s" % glb_path)
return false
var save_err := ResourceSaver.save(out_lib, out_path)
if save_err != OK:
push_error("[Convert] ResourceSaver.save failed: %d" % save_err)
return false
return true
func _retarget(src: Animation) -> Animation:
var dst := Animation.new()
dst.length = src.length
dst.loop_mode = src.loop_mode
dst.step = src.step
# Map: original_track_idx -> new track path or -1 to drop
for i in src.get_track_count():
var orig_path: String = src.track_get_path(i)
var bone := _extract_bone_name(orig_path)
if not BONE_REMAP.has(bone):
# drop helper nodes like head_end, hand.L_end, etc.
continue
var new_bone: String = BONE_REMAP[bone]
var new_path := "%%GeneralSkeleton:%s" % new_bone
# Match the suffix type (:position/:rotation/:scale)
var type_suffix := ""
if orig_path.ends_with(":position"): type_suffix = "position"
elif orig_path.ends_with(":rotation"): type_suffix = "rotation"
elif orig_path.ends_with(":scale"): type_suffix = "scale"
else:
push_warning(" Unrecognized track path: %s" % orig_path)
continue
match type_suffix:
"position":
if new_bone != "Hips": continue
dst.add_track(Animation.TYPE_POSITION_3D)
"rotation":
dst.add_track(Animation.TYPE_ROTATION_3D)
"scale":
if new_bone != "Hips": continue
dst.add_track(Animation.TYPE_SCALE_3D)
var new_idx := dst.get_track_count() - 1
dst.track_set_path(new_idx, NodePath(new_path))
dst.track_set_interpolation_type(new_idx, src.track_get_interpolation_type(i))
dst.track_set_imported(new_idx, src.track_is_imported(i))
dst.track_set_enabled(new_idx, src.track_is_enabled(i))
# Copy keyframes
var key_count := src.track_get_key_count(i)
for k in key_count:
var t: float = src.track_get_key_time(i, k)
var v: Variant = src.track_get_key_value(i, k)
var trans := src.track_get_key_transition(i, k)
match type_suffix:
"position":
dst.track_insert_key(new_idx, t, v)
"rotation":
dst.track_insert_key(new_idx, t, v)
"scale":
dst.track_insert_key(new_idx, t, v)
dst.track_set_key_transition(new_idx, k, trans)
return dst
func _extract_bone_name(path: String) -> String:
# Tracks look like: "bob-hold/Skeleton3D:hand.L:rotation"
# We want the bone name "hand.L".
# Find the last ":" that precedes a type suffix; everything between the previous
# ":" (or start) and that ":" is the bone name. Easier: split on ":" and take
# the second-to-last segment.
var parts := path.split(":")
if parts.size() < 2:
return ""
# parts[-1] is the type ("rotation" etc), parts[-2] is the bone name
# but bone names can contain "." (e.g. "hand.L"), so just take parts[-2] as-is.
return parts[-2]
+256
View File
@@ -0,0 +1,256 @@
extends SceneTree
# Headless: convert each dasher_*.glb into a dasher_<name>.res with proper retargeting.
# Reads rest poses from both source GLB skeleton and target GeneralSkeleton (player.tscn)
# to compute per-bone correction quaternions.
const DASHER_DIR := "res://assets/characters/dashers"
const ANIM_DIR := "res://assets/characters/animations"
const BONE_REMAP := {
"bob-hold": "Hips",
"spine": "Hips",
"spine.001": "Spine",
"head": "Head",
"hand.L": "LeftHand",
"hand.R": "RightHand",
"forearm.L": "LeftLowerArm",
"forearm.R": "RightLowerArm",
"upper_arm.L": "LeftUpperArm",
"upper_arm.R": "RightUpperArm",
"shoulder.L": "LeftShoulder",
"shoulder.R": "RightShoulder",
"leg.L": "LeftLowerLeg",
"leg.R": "RightLowerLeg",
"thigh.L": "LeftUpperLeg",
"thigh.R": "RightUpperLeg",
"foot.L": "LeftFoot",
"foot.R": "RightFoot",
"toe.L": "LeftToeBase",
"toe.R": "RightToeBase",
}
const ANIM_PICK := {
"dasher_getting_hit": "Getting Hit",
"dasher_hit": "Hit",
"dasher_hold": "Hold",
"dasher_put": "Put",
"dasher_stun": "Stun",
"dasher_take": "bob ani",
}
# Source bone rest transforms (from GLB)
var src_rest: Dictionary = {} # bone_name -> Transform3D
# Target bone rest transforms (from GeneralSkeleton)
var tgt_rest: Dictionary = {} # bone_name -> Transform3D
# Precomputed correction quaternions
var corrections: Dictionary = {} # bone_name -> Quaternion
func _init() -> void:
print("[Convert] Headless run starting...")
# Step 1: Load target skeleton rest poses from player scene
_load_target_rest()
# Step 2: Convert each GLB
var dasher_dir := DirAccess.open(DASHER_DIR)
if not dasher_dir:
push_error("[Convert] Cannot open %s" % DASHER_DIR)
quit(1); return
var converted: Array[String] = []
for fname in dasher_dir.get_files():
if not fname.ends_with(".glb"): continue
if not fname.begins_with("dasher_"): continue
var stem := fname.get_basename()
var out_path := "%s/%s.res" % [ANIM_DIR, stem]
var ok := _convert_one("%s/%s" % [DASHER_DIR, fname], stem, out_path)
if ok:
converted.append(out_path)
else:
push_warning("[Convert] Skipped %s" % fname)
print("[Convert] Done. %d dasher glb(s) converted:" % converted.size())
for p in converted:
print(" - %s" % p)
quit(0)
func _load_target_rest() -> void:
# Load Masbro.glb directly to extract GeneralSkeleton rest poses
# (player.tscn may fail to load if dasher-pack.res doesn't exist yet)
var doc := GLTFDocument.new()
var state := GLTFState.new()
var err := doc.append_from_file("res://assets/characters/Masbro.glb", state)
if err != OK:
push_error("[Convert] Cannot load Masbro.glb: %d" % err)
return
var instance = doc.generate_scene(state)
if not instance:
push_error("[Convert] generate_scene returned null for Masbro.glb")
return
# Find the Skeleton3D (named GeneralSkeleton in the scene tree)
var skeleton: Skeleton3D = instance.find_child("GeneralSkeleton", true, false)
if not skeleton:
# Try finding any Skeleton3D
skeleton = instance.find_child("Skeleton3D", true, false)
if not skeleton:
push_error("[Convert] No Skeleton3D in Masbro.glb")
instance.free()
return
print("[Convert] Target skeleton: '%s' with %d bones" % [skeleton.name, skeleton.get_bone_count()])
for bone_idx in skeleton.get_bone_count():
var bone_name := skeleton.get_bone_name(bone_idx)
tgt_rest[bone_name] = skeleton.get_bone_rest(bone_idx)
instance.free()
print("[Convert] Loaded %d target bone rest poses" % tgt_rest.size())
func _convert_one(glb_path: String, anim_name: String, out_path: String) -> bool:
print("[Convert] %s -> %s" % [glb_path, out_path])
var doc := GLTFDocument.new()
var state := GLTFState.new()
var err := doc.append_from_file(glb_path, state)
if err != OK:
push_error("[Convert] append_from_file failed: %d" % err)
return false
var scene: Node = doc.generate_scene(state)
if not scene:
push_error("[Convert] generate_scene returned null")
return false
# Extract source skeleton rest poses
src_rest.clear()
var src_skeleton: Skeleton3D = scene.find_child("Skeleton3D", true, false)
if src_skeleton:
for bone_idx in src_skeleton.get_bone_count():
var bone_name := src_skeleton.get_bone_name(bone_idx)
src_rest[bone_name] = src_skeleton.get_bone_rest(bone_idx)
print(" Source skeleton: %d bones" % src_rest.size())
else:
push_error("[Convert] No Skeleton3D in %s" % glb_path)
scene.queue_free()
return false
# Compute per-bone correction quaternions
corrections.clear()
for src_bone in BONE_REMAP:
var tgt_bone: String = BONE_REMAP[src_bone]
if src_rest.has(src_bone) and tgt_rest.has(tgt_bone):
var src_basis: Basis = src_rest[src_bone].basis
var tgt_basis: Basis = tgt_rest[tgt_bone].basis
# correction = tgt_rest.inverse() * src_rest
# Applied as: final_q = correction * keyframe_q
corrections[src_bone] = tgt_basis.inverse() * src_basis
# print(" Correction for %s -> %s: %s" % [src_bone, tgt_bone, str(corrections[src_bone])])
var src_player: AnimationPlayer = scene.find_child("AnimationPlayer", true, false)
if not src_player:
push_error("[Convert] No AnimationPlayer in %s" % glb_path)
scene.queue_free()
return false
# Pick the animation whose middle segment matches the keyword
var pick_keyword: String = ANIM_PICK.get(anim_name, anim_name.replace("dasher_", ""))
var picked: Animation = null
for lib_name in src_player.get_animation_library_list():
var src_lib: AnimationLibrary = src_player.get_animation_library(lib_name)
for src_anim_name in src_lib.get_animation_list():
var segments := src_anim_name.split("|")
var mid_segment: String = segments[1] if segments.size() >= 3 else src_anim_name
if pick_keyword.to_lower() == mid_segment.to_lower():
picked = src_lib.get_animation(src_anim_name)
break
if picked: break
if not picked:
for lib_name in src_player.get_animation_library_list():
var src_lib: AnimationLibrary = src_player.get_animation_library(lib_name)
if src_lib.get_animation_list().size() > 0:
picked = src_lib.get_animation(src_lib.get_animation_list()[0])
break
if not picked:
push_error("[Convert] No animations in %s" % glb_path)
scene.queue_free()
return false
var retargeted := _retarget(picked)
scene.queue_free()
if retargeted.get_track_count() == 0:
push_error("[Convert] Retarget produced 0 tracks for %s" % glb_path)
return false
var out_lib := AnimationLibrary.new()
out_lib.add_animation(anim_name, retargeted)
print(" + %s (%d tracks from %s)" % [anim_name, retargeted.get_track_count(), picked.resource_name if picked.resource_name else "<anon>"])
var save_err := ResourceSaver.save(out_lib, out_path)
if save_err != OK:
push_error("[Convert] ResourceSaver.save failed: %d" % save_err)
return false
return true
func _retarget(src: Animation) -> Animation:
var dst := Animation.new()
dst.length = src.length
dst.loop_mode = src.loop_mode
dst.step = src.step
var usable: Array[int] = []
for i in src.get_track_count():
var orig_path: String = src.track_get_path(i)
var bone := _extract_bone_name(orig_path)
if BONE_REMAP.has(bone):
usable.append(i)
for i in usable:
var orig_path: String = src.track_get_path(i)
var bone: String = _extract_bone_name(orig_path)
var new_bone: String = BONE_REMAP[bone]
var new_path := "%%GeneralSkeleton:%s" % new_bone
var track_type := src.track_get_type(i)
match track_type:
Animation.TYPE_POSITION_3D:
if new_bone != "Hips": continue
dst.add_track(Animation.TYPE_POSITION_3D)
Animation.TYPE_ROTATION_3D:
dst.add_track(Animation.TYPE_ROTATION_3D)
Animation.TYPE_SCALE_3D:
if new_bone != "Hips": continue
dst.add_track(Animation.TYPE_SCALE_3D)
Animation.TYPE_BLEND_SHAPE: continue
_: continue
var new_idx := dst.get_track_count() - 1
dst.track_set_path(new_idx, NodePath(new_path))
dst.track_set_interpolation_type(new_idx, src.track_get_interpolation_type(i))
dst.track_set_imported(new_idx, src.track_is_imported(i))
dst.track_set_enabled(new_idx, src.track_is_enabled(i))
var key_count := src.track_get_key_count(i)
for k in key_count:
var t: float = src.track_get_key_time(i, k)
var v: Variant = src.track_get_key_value(i, k)
var trans := src.track_get_key_transition(i, k)
# Apply rest-pose correction to rotation tracks
if track_type == Animation.TYPE_ROTATION_3D and corrections.has(bone):
var orig_q: Quaternion = v
var corr_q: Quaternion = corrections[bone]
v = corr_q * orig_q
dst.track_insert_key(new_idx, t, v)
dst.track_set_key_transition(new_idx, k, trans)
return dst
func _extract_bone_name(path: String) -> String:
var parts := path.split(":")
if parts.size() < 2:
return ""
return parts[-1]
@@ -0,0 +1 @@
uid://dgwmo0tdt8dwl
+20
View File
@@ -0,0 +1,20 @@
extends SceneTree
const DASHER_DIR := "res://assets/characters/dashers"
func _init() -> void:
var dir := DirAccess.open(DASHER_DIR)
for fname in dir.get_files():
if not fname.ends_with(".glb"): continue
var doc = GLTFDocument.new()
var state = GLTFState.new()
doc.append_from_file("%s/%s" % [DASHER_DIR, fname], state)
var scene = doc.generate_scene(state)
var ap: AnimationPlayer = scene.find_child("AnimationPlayer", true, false)
if ap:
print("=== %s ===" % fname)
for lib_name in ap.get_animation_library_list():
var lib = ap.get_animation_library(lib_name)
for anim_name in lib.get_animation_list():
print(" ", anim_name)
quit()
+1
View File
@@ -0,0 +1 @@
uid://cau1rt1kfa32y
+32
View File
@@ -0,0 +1,32 @@
extends SceneTree
func _init() -> void:
var scene = preload("res://scenes/player.tscn").instantiate()
var skel: Skeleton3D = null
# Find GeneralSkeleton anywhere in the player scene
var queue = [scene]
while queue.size() > 0:
var n = queue.pop_front()
if n is Skeleton3D and n.name == "GeneralSkeleton":
skel = n
break
for c in n.get_children():
queue.append(c)
if skel:
print("Found GeneralSkeleton! Bones:")
for i in skel.get_bone_count():
print(" - ", skel.get_bone_name(i))
else:
print("GeneralSkeleton not found in player.tscn!")
print("Tree:")
_print_tree(scene, 0)
quit()
func _print_tree(n: Node, depth: int) -> void:
var indent = " ".repeat(depth)
print("%s- %s (%s)" % [indent, n.name, n.get_class()])
for c in n.get_children():
_print_tree(c, depth + 1)
+1
View File
@@ -0,0 +1 @@
uid://dxxtbdm3usgdp
+15
View File
@@ -0,0 +1,15 @@
extends SceneTree
func _init() -> void:
var scene = preload("res://scenes/player.tscn").instantiate()
var masbro = scene.get_node("Masbro")
if masbro:
print("Masbro found! Children:")
_print_tree(masbro, 0)
else:
print("No Masbro")
quit()
func _print_tree(n: Node, depth: int) -> void:
var indent = " ".repeat(depth)
print("%s- %s (%s)" % [indent, n.name, n.get_class()])
for c in n.get_children():
_print_tree(c, depth + 1)
+1
View File
@@ -0,0 +1 @@
uid://dt8bew0d4r6bp
+8
View File
@@ -0,0 +1,8 @@
extends SceneTree
func _init() -> void:
print("TYPE_VALUE: ", Animation.TYPE_VALUE)
print("TYPE_POSITION_3D: ", Animation.TYPE_POSITION_3D)
print("TYPE_ROTATION_3D: ", Animation.TYPE_ROTATION_3D)
print("TYPE_SCALE_3D: ", Animation.TYPE_SCALE_3D)
quit()
+1
View File
@@ -0,0 +1 @@
uid://dl8svqqgt6m3n
+33
View File
@@ -0,0 +1,33 @@
extends SceneTree
func _init() -> void:
var lib = load("res://assets/characters/animations/dasher-pack.res") as AnimationLibrary
if not lib:
quit(1)
return
var anim_name = "dasher_hit"
if lib.has_animation(anim_name):
var anim = lib.get_animation(anim_name)
print("Animation: ", anim_name)
var has_pos = 0
var has_rot = 0
var has_scale = 0
var pos_bones = []
for i in anim.get_track_count():
var type = anim.track_get_type(i)
var path = anim.track_get_path(i)
if type == Animation.TYPE_POSITION_3D:
has_pos += 1
pos_bones.append(str(path))
elif type == Animation.TYPE_ROTATION_3D:
has_rot += 1
elif type == Animation.TYPE_SCALE_3D:
has_scale += 1
print(" Positions: ", has_pos, " (", pos_bones, ")")
print(" Rotations: ", has_rot)
print(" Scales: ", has_scale)
quit(0)
+1
View File
@@ -0,0 +1 @@
uid://bleaj3miugqrm
+13
View File
@@ -0,0 +1,13 @@
extends SceneTree
func _init() -> void:
var lib = load("res://assets/characters/animations/dasher-pack.res") as AnimationLibrary
for anim_name in lib.get_animation_list():
var anim = lib.get_animation(anim_name)
print("=== %s (%d tracks) ===" % [anim_name, anim.get_track_count()])
for i in anim.get_track_count():
var type = anim.track_get_type(i)
var path = anim.track_get_path(i)
var type_str = ["VALUE","POSITION","ROTATION","SCALE"][type]
print(" [%d] type=%s path=%s" % [i, type_str, path])
quit()
+1
View File
@@ -0,0 +1 @@
uid://yyhb801dk5ve
+16
View File
@@ -0,0 +1,16 @@
extends SceneTree
func _init() -> void:
var lib = load("res://assets/characters/animations/dasher-pack.res") as AnimationLibrary
if not lib:
print("Failed to load dasher-pack.res")
quit(1)
return
var anim_name = lib.get_animation_list()[0]
var anim = lib.get_animation(anim_name)
print("First animation: ", anim_name)
for i in min(anim.get_track_count(), 5):
print(" Track ", i, " path: ", anim.track_get_path(i))
quit(0)
+1
View File
@@ -0,0 +1 @@
uid://ce58ow1re1l24
+19
View File
@@ -0,0 +1,19 @@
extends SceneTree
func _init() -> void:
var doc = GLTFDocument.new()
var state = GLTFState.new()
var err = doc.append_from_file("res://assets/characters/dashers/dasher_hit.glb", state)
var scene = doc.generate_scene(state)
var ap: AnimationPlayer = scene.find_child("AnimationPlayer", true, false)
var lib = ap.get_animation_library("")
var anim_name = "dasher_take|Hit|Anima_Layer"
if lib.has_animation(anim_name):
var anim = lib.get_animation(anim_name)
print("=== RAW TRACKS ===")
for i in anim.get_track_count():
var type = anim.track_get_type(i)
var path = anim.track_get_path(i)
print(" Track ", i, " type: ", type, " path: ", path)
quit()
+1
View File
@@ -0,0 +1 @@
uid://dcoduco766d6w
+34
View File
@@ -0,0 +1,34 @@
extends SceneTree
func _init() -> void:
var lib = load("res://assets/characters/animations/animation-pack.res") as AnimationLibrary
if not lib:
print("Failed to load animation-pack.res")
quit(1)
return
var anim_name = "walk_forward"
if lib.has_animation(anim_name):
var anim = lib.get_animation(anim_name)
print("Animation: ", anim_name)
var has_pos = 0
var has_rot = 0
var has_scale = 0
var pos_bones = []
for i in anim.get_track_count():
var type = anim.track_get_type(i)
var path = anim.track_get_path(i)
if type == Animation.TYPE_POSITION_3D:
has_pos += 1
pos_bones.append(str(path))
elif type == Animation.TYPE_ROTATION_3D:
has_rot += 1
elif type == Animation.TYPE_SCALE_3D:
has_scale += 1
print(" Positions: ", has_pos, " (", pos_bones, ")")
print(" Rotations: ", has_rot)
print(" Scales: ", has_scale)
quit(0)
+1
View File
@@ -0,0 +1 @@
uid://c1boh2egfnnfu
+12
View File
@@ -0,0 +1,12 @@
extends SceneTree
func _init() -> void:
var lib = load("res://assets/characters/animations/animation-pack.res") as AnimationLibrary
var anim = lib.get_animation("walk_forward")
print("=== walk_forward tracks ===")
for i in anim.get_track_count():
var type = anim.track_get_type(i)
var path = anim.track_get_path(i)
var type_str = ["VALUE","POSITION","ROTATION","SCALE"][type]
print(" [%d] type=%s path=%s" % [i, type_str, path])
quit()
+1
View File
@@ -0,0 +1 @@
uid://dajp15327baah