diff --git a/assets/scripts/anim/robotAnim.js b/assets/scripts/anim/robotAnim.js
new file mode 100644
index 00000000..6fc21c4c
--- /dev/null
+++ b/assets/scripts/anim/robotAnim.js
@@ -0,0 +1,3255 @@
+ const ANIMATIONS = {
+ // fall loop
+ // 5 frames
+ fall_loop: {
+ frameCount: 5,
+ frames: [
+ // frame 1
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-0.925, -8.0],
+ scale: [0.99686, 0.99843],
+ rotation: -33.36830139160156,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.925, -1.025],
+ scale: [0.99686, 0.99842],
+ rotation: 36.843536376953125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.95, -11.25],
+ scale: [0.998, 0.99899],
+ rotation: -21.94415283203125,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.25, 5.625],
+ scale: [0.99975, 0.99983],
+ rotation: 1.938385009765625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.775, -6.675],
+ scale: [0.9999, 0.99994],
+ rotation: -8.179550170898438,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.15, -0.4],
+ scale: [0.99947, 0.99972],
+ rotation: 47.778106689453125,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.35, -11.8],
+ scale: [0.998, 0.99895],
+ rotation: -14.668869018554688,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 2
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.175, -7.7],
+ scale: [0.99681, 0.99838],
+ rotation: -35.64031982421875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.95, -0.8],
+ scale: [0.99678, 0.99838],
+ rotation: 39.72314453125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.875, -11.0],
+ scale: [0.99797, 0.99894],
+ rotation: -26.534271240234375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.3, 5.65],
+ scale: [0.99971, 0.99979],
+ rotation: 3.021270751953125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.975, -6.9],
+ scale: [0.99988, 0.99993],
+ rotation: -11.054824829101562,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.325, -0.35],
+ scale: [0.99943, 0.99968],
+ rotation: 49.14811706542969,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.275, -11.65],
+ scale: [0.99795, 0.9989],
+ rotation: -18.751190185546875,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 3
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.425, -7.375],
+ scale: [0.99685, 0.99844],
+ rotation: -38.06318664550781,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.925, -0.525],
+ scale: [0.99685, 0.99842],
+ rotation: 42.800567626953125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.825, -10.625],
+ scale: [0.99801, 0.99899],
+ rotation: -31.438003540039062,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.25, 5.625],
+ scale: [0.99974, 0.99982],
+ rotation: 4.1759490966796875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.15, -7.05],
+ scale: [0.99991, 0.99995],
+ rotation: -14.126724243164062,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.4, -0.275],
+ scale: [0.99947, 0.99972],
+ rotation: 50.51924133300781,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.225, -11.425],
+ scale: [0.99801, 0.99895],
+ rotation: -23.110000610351562,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 4
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.325, -7.525],
+ scale: [0.99626, 0.99786],
+ rotation: -36.879913330078125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.95, -0.675],
+ scale: [0.99626, 0.99781],
+ rotation: 41.2891845703125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.825, -10.8],
+ scale: [0.99754, 0.99849],
+ rotation: -29.080734252929688,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.2, 5.675],
+ scale: [0.99968, 0.99976],
+ rotation: 3.608551025390625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.075, -7.0],
+ scale: [0.99967, 0.99971],
+ rotation: -12.638275146484375,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.325, -0.3],
+ scale: [0.99887, 0.99912],
+ rotation: 49.86711120605469,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.25, -11.525],
+ scale: [0.99767, 0.99861],
+ rotation: -20.961196899414062,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 5
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.075, -7.825],
+ scale: [0.99532, 0.9969],
+ rotation: -34.60044860839844,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.9, -0.925],
+ scale: [0.99525, 0.99681],
+ rotation: 38.37884521484375,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.925, -11.075],
+ scale: [0.99675, 0.99774],
+ rotation: -24.545242309570312,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.225, 5.625],
+ scale: [0.99959, 0.99965],
+ rotation: 2.513641357421875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.85, -6.775],
+ scale: [0.99934, 0.99941],
+ rotation: -9.771102905273438,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.2, -0.375],
+ scale: [0.99784, 0.99808],
+ rotation: 48.61174011230469,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.35, -11.7],
+ scale: [0.9971, 0.99804],
+ rotation: -16.823638916015625,
+ zValue: 6
+ },
+ ]
+ },
+ ]
+ },
+
+ // fall_start
+ // 7 frames
+ fall_start: {
+ frameCount: 7,
+ frames: [
+ // frame 1
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.25, -4.175],
+ scale: [0.99883, 0.99939],
+ rotation: -39.04736328125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, 1.8],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-2.25, -9.075],
+ scale: [0.99748, 0.99874],
+ rotation: 7.55072021484375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.6],
+ scale: [0.99888, 0.99911],
+ rotation: -7.78857421875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.6, -3.575],
+ scale: [0.9969, 0.99844],
+ rotation: -20.385696411132812,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.55, 1.075],
+ scale: [0.99823, 0.99912],
+ rotation: 39.761383056640625,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.65, -9.875],
+ scale: [0.9968, 0.99839],
+ rotation: 21.35809326171875,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 2
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.0, -4.45],
+ scale: [0.99863, 0.99926],
+ rotation: -38.64967346191406,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.0, 1.625],
+ scale: [0.99727, 0.9986],
+ rotation: 27.28228759765625,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-1.9, -9.25],
+ scale: [0.9975, 0.99872],
+ rotation: 5.4814605712890625,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.35, 6.55],
+ scale: [0.99892, 0.99913],
+ rotation: -7.1078033447265625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.55, -3.825],
+ scale: [0.99708, 0.9985],
+ rotation: -19.529891967773438,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.45, 0.925],
+ scale: [0.99825, 0.9991],
+ rotation: 40.32298278808594,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.65, -10.0],
+ scale: [0.99684, 0.99839],
+ rotation: 18.831893920898438,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 3
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-4.2, -5.1],
+ scale: [0.99828, 0.99911],
+ rotation: -37.63090515136719,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.775, 1.1],
+ scale: [0.99718, 0.99855],
+ rotation: 29.127456665039062,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-0.975, -9.65],
+ scale: [0.99758, 0.99878],
+ rotation: 0.1888427734375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.375],
+ scale: [0.99907, 0.99927],
+ rotation: -5.3618927001953125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.4, -4.375],
+ scale: [0.99763, 0.99876],
+ rotation: -17.338882446289062,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.225, 0.675],
+ scale: [0.99849, 0.99923],
+ rotation: 41.7625732421875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.575, -10.375],
+ scale: [0.99706, 0.99849],
+ rotation: 12.364120483398438,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 4
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-3.175, -6.025],
+ scale: [0.9978, 0.99887],
+ rotation: -36.27384948730469,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.55, 0.425],
+ scale: [0.99704, 0.9985],
+ rotation: 31.582260131835938,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [0.275, -10.15],
+ scale: [0.99772, 0.99883],
+ rotation: -6.85369873046875,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.3, 6.15],
+ scale: [0.99927, 0.99943],
+ rotation: -3.0369720458984375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.2, -5.125],
+ scale: [0.99834, 0.99912],
+ rotation: -14.423141479492188,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.9, 0.325],
+ scale: [0.99879, 0.99934],
+ rotation: 43.67616271972656,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.5, -10.825],
+ scale: [0.99734, 0.99863],
+ rotation: 3.7617950439453125,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 5
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-2.125, -6.975],
+ scale: [0.99734, 0.99865],
+ rotation: -34.889678955078125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.275, -0.25],
+ scale: [0.99693, 0.99844],
+ rotation: 34.08909606933594,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [1.5, -10.7],
+ scale: [0.99783, 0.99888],
+ rotation: -14.040359497070312,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.3, 5.9],
+ scale: [0.9995, 0.99961],
+ rotation: -0.6687774658203125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.025, -5.9],
+ scale: [0.99905, 0.99948],
+ rotation: -11.448410034179688,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.55, 0.0],
+ scale: [0.99909, 0.99951],
+ rotation: 45.62956237792969,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.425, -11.3],
+ scale: [0.99762, 0.99877],
+ rotation: -5.01678466796875,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 6
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.275, -7.675],
+ scale: [0.99697, 0.99845],
+ rotation: -33.80633544921875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.025, -0.775],
+ scale: [0.99683, 0.99839],
+ rotation: 36.04875183105469,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.5, -11.125],
+ scale: [0.99792, 0.99895],
+ rotation: -19.663345336914062,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.275, 5.725],
+ scale: [0.99965, 0.99974],
+ rotation: 1.1844635009765625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.85, -6.475],
+ scale: [0.99964, 0.99979],
+ rotation: -9.122024536132812,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.275, -0.275],
+ scale: [0.99932, 0.99963],
+ rotation: 47.15898132324219,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.375, -11.675],
+ scale: [0.99786, 0.99886],
+ rotation: -11.886947631835938,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 7
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-0.925, -8.0],
+ scale: [0.99686, 0.99843],
+ rotation: -33.36830139160156,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.925, -1.025],
+ scale: [0.99686, 0.99842],
+ rotation: 36.843536376953125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.95, -11.25],
+ scale: [0.998, 0.99899],
+ rotation: -21.94415283203125,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.25, 5.625],
+ scale: [0.99975, 0.99983],
+ rotation: 1.938385009765625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.775, -6.675],
+ scale: [0.9999, 0.99994],
+ rotation: -8.179550170898438,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.15, -0.4],
+ scale: [0.99947, 0.99972],
+ rotation: 47.778106689453125,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.35, -11.8],
+ scale: [0.998, 0.99895],
+ rotation: -14.668869018554688,
+ zValue: 6
+ },
+ ]
+ },
+ ]
+ },
+
+ // idle
+ // 1 frame
+ idle: {
+ frameCount: 1,
+ frames: [
+ // frame 1
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.175, -6.875],
+ scale: [0.99687, 0.99841],
+ rotation: -29.67291259765625,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.175, -1.025],
+ scale: [0.99684, 0.99844],
+ rotation: 57.96818542480469,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-2.675, -10.9],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.25, 5.5],
+ scale: [0.99974, 0.99982],
+ rotation: -2.285858154296875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-4.525, -6.625],
+ scale: [0.99987, 0.99993],
+ rotation: -42.94146728515625,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-5.75, -2.15],
+ scale: [0.99945, 0.99971],
+ rotation: 42.50115966796875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.275, -10.9],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 6
+ },
+ ]
+ },
+ ]
+ },
+
+ // jump_loop
+ // 5 frames
+ jump_loop: {
+ frameCount: 5,
+ frames: [
+ // frame 1
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.25, -4.175],
+ scale: [0.99883, 0.99939],
+ rotation: -39.04736328125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, 1.8],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-2.25, -9.075],
+ scale: [0.99748, 0.99874],
+ rotation: 7.55072021484375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.6],
+ scale: [0.99888, 0.99911],
+ rotation: -7.78857421875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.6, -3.575],
+ scale: [0.9969, 0.99844],
+ rotation: -20.385696411132812,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.55, 1.075],
+ scale: [0.99823, 0.99912],
+ rotation: 39.761383056640625,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.65, -9.875],
+ scale: [0.9968, 0.99839],
+ rotation: 21.35809326171875,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 2
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.875, -4.2],
+ scale: [0.99879, 0.99933],
+ rotation: -31.856796264648438,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, 1.8],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-3.1, -9.25],
+ scale: [0.99746, 0.99872],
+ rotation: 9.823745727539062,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.875],
+ scale: [0.99886, 0.9991],
+ rotation: -9.979843139648438,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.95, -4.05],
+ scale: [0.99688, 0.9984],
+ rotation: -20.384933471679688,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.775, 0.7],
+ scale: [0.99817, 0.99907],
+ rotation: 39.76190185546875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-5.1, -10.325],
+ scale: [0.99675, 0.99835],
+ rotation: 18.860092163085938,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 3
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.525, -4.275],
+ scale: [0.99884, 0.99939],
+ rotation: -23.304229736328125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, 1.8],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.025, -9.4],
+ scale: [0.99747, 0.99874],
+ rotation: 12.52667236328125,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 7.1],
+ scale: [0.99889, 0.99912],
+ rotation: -12.00994873046875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-8.35, -4.575],
+ scale: [0.9969, 0.99844],
+ rotation: -20.385696411132812,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-8.05, 0.325],
+ scale: [0.99823, 0.99912],
+ rotation: 39.761383056640625,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-5.65, -10.875],
+ scale: [0.99682, 0.9984],
+ rotation: 15.885101318359375,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 4
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.3, -4.225],
+ scale: [0.99825, 0.99882],
+ rotation: -28.527587890625,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.05, 1.8],
+ scale: [0.99685, 0.9982],
+ rotation: 26.558761596679688,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-3.6, -9.35],
+ scale: [0.99728, 0.99857],
+ rotation: 11.716049194335938,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 7.0],
+ scale: [0.99866, 0.9989],
+ rotation: -11.020294189453125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-8.175, -4.375],
+ scale: [0.99651, 0.99805],
+ rotation: -20.360336303710938,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.95, 0.525],
+ scale: [0.99764, 0.99853],
+ rotation: 39.783599853515625,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-5.425, -10.65],
+ scale: [0.99644, 0.99801],
+ rotation: 17.105987548828125,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 5
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.85, -4.1],
+ scale: [0.99722, 0.99779],
+ rotation: -39.08636474609375,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, 1.8],
+ scale: [0.99604, 0.99736],
+ rotation: 26.55316162109375,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-2.55, -9.225],
+ scale: [0.99695, 0.9982],
+ rotation: 9.77789306640625,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.75],
+ scale: [0.99835, 0.99859],
+ rotation: -9.02142333984375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.825, -3.875],
+ scale: [0.99584, 0.99736],
+ rotation: -20.308074951171875,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.7, 0.85],
+ scale: [0.9966, 0.99748],
+ rotation: 39.83003234863281,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.925, -10.175],
+ scale: [0.99576, 0.99735],
+ rotation: 19.574142456054688,
+ zValue: 6
+ },
+ ]
+ },
+ ]
+ },
+
+ // jump_start
+ // 5 frames
+ jump_start: {
+ frameCount: 5,
+ frames: [
+ // frame 1
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.875, -7.575],
+ scale: [0.99884, 0.99942],
+ rotation: 28.6307373046875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.525, -1.8],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-9.525, -12.725],
+ scale: [0.99748, 0.99874],
+ rotation: 48.41596984863281,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 5.725],
+ scale: [0.99955, 0.99976],
+ rotation: -3.762664794921875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-0.575, -5.55],
+ scale: [0.9969, 0.99844],
+ rotation: -54.65989685058594,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.175, -0.225],
+ scale: [0.99822, 0.99912],
+ rotation: -16.279006958007812,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [5.35, -8.7],
+ scale: [0.99681, 0.99842],
+ rotation: -36.59808349609375,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 2
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.625, -7.075],
+ scale: [0.99878, 0.99936],
+ rotation: 18.3961181640625,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.625, -1.25],
+ scale: [0.9973, 0.99863],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-8.425, -12.2],
+ scale: [0.99743, 0.99869],
+ rotation: 42.23722839355469,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.35, 5.875],
+ scale: [0.99952, 0.99974],
+ rotation: -4.32635498046875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.6, -5.275],
+ scale: [0.99685, 0.99838],
+ rotation: -49.47587585449219,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.625, 0.075],
+ scale: [0.9982, 0.9991],
+ rotation: -7.80401611328125,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [3.825, -8.875],
+ scale: [0.99676, 0.99839],
+ rotation: -27.8333740234375,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 3
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.1, -5.925],
+ scale: [0.99878, 0.99936],
+ rotation: -4.4384765625,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.8, -0.05],
+ scale: [0.9973, 0.99863],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-6.0, -10.975],
+ scale: [0.99744, 0.99869],
+ rotation: 28.447891235351562,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.35, 6.125],
+ scale: [0.99953, 0.99974],
+ rotation: -5.58453369140625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-3.975, -4.575],
+ scale: [0.99685, 0.9984],
+ rotation: -37.91166687011719,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-5.6, 0.7],
+ scale: [0.9982, 0.9991],
+ rotation: 11.1053466796875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [0.475, -9.275],
+ scale: [0.99677, 0.99835],
+ rotation: -8.278884887695312,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 4
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.5, -4.75],
+ scale: [0.99879, 0.99933],
+ rotation: -27.93719482421875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.975, 1.175],
+ scale: [0.9973, 0.99863],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-3.45, -9.7],
+ scale: [0.99746, 0.99871],
+ rotation: 14.258193969726562,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.375],
+ scale: [0.99955, 0.99976],
+ rotation: -6.879547119140625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.45, -3.9],
+ scale: [0.99685, 0.99838],
+ rotation: -26.011978149414062,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.6, 1.35],
+ scale: [0.99819, 0.99907],
+ rotation: 30.56121826171875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-3.025, -9.65],
+ scale: [0.99675, 0.99836],
+ rotation: 11.84423828125,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 5
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.25, -4.175],
+ scale: [0.99883, 0.99939],
+ rotation: -39.04736328125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, 1.8],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-2.25, -9.075],
+ scale: [0.99748, 0.99874],
+ rotation: 7.55072021484375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 6.475],
+ scale: [0.99955, 0.99976],
+ rotation: -7.492279052734375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.6, -3.575],
+ scale: [0.9969, 0.99844],
+ rotation: -20.385696411132812,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.55, 1.075],
+ scale: [0.99823, 0.99912],
+ rotation: 39.761383056640625,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.65, -9.875],
+ scale: [0.9968, 0.99839],
+ rotation: 21.35809326171875,
+ zValue: 6
+ },
+ ]
+ },
+ ]
+ },
+
+ // run
+ // 16 frames
+ run: {
+ frameCount: 16,
+ frames: [
+ // frame 1
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.5, -5.175],
+ scale: [0.99883, 0.99941],
+ rotation: 100.26283264160156,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.65, -1.95],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-14.5, -4.925],
+ scale: [0.99749, 0.99874],
+ rotation: 114.5517578125,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 5.975],
+ scale: [0.99955, 0.99976],
+ rotation: -3.762664794921875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-0.575, -5.55],
+ scale: [0.9969, 0.99844],
+ rotation: -54.65989685058594,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.175, -0.225],
+ scale: [0.99822, 0.99912],
+ rotation: -16.279006958007812,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [6.1, -8.075],
+ scale: [0.99681, 0.99842],
+ rotation: -36.59808349609375,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 2
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-4.625, -5.825],
+ scale: [0.99996, 0.99998],
+ rotation: 89.74559020996094,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-1.975, -2.4],
+ scale: [0.99949, 0.99975],
+ rotation: 4.256805419921875,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-12.225, -6.625],
+ scale: [0.99802, 0.999],
+ rotation: 108.52827453613281,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.35, 5.25],
+ scale: [0.99967, 0.99982],
+ rotation: -2.764892578125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-0.7, -7.325],
+ scale: [0.99706, 0.99853],
+ rotation: -58.68115234375,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-5.25, -2.0],
+ scale: [0.99995, 0.99998],
+ rotation: 0.2517852783203125,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [4.95, -9.625],
+ scale: [0.99803, 0.999],
+ rotation: -18.276382446289062,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 3
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.75, -6.475],
+ scale: [0.9987, 0.99936],
+ rotation: 78.73564147949219,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-0.3, -2.825],
+ scale: [0.99812, 0.99904],
+ rotation: -17.534652709960938,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-9.975, -8.3],
+ scale: [0.99858, 0.99929],
+ rotation: 102.76223754882812,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.425, 4.325],
+ scale: [0.99976, 0.99986],
+ rotation: -2.005615234375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-0.8, -9.05],
+ scale: [0.9973, 0.99863],
+ rotation: -62.44903564453125,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.125, -2.525],
+ scale: [0.99819, 0.99908],
+ rotation: 16.785995483398438,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [3.85, -11.225],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 4
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [0.775, -4.65],
+ scale: [0.99736, 0.99868],
+ rotation: 63.44964599609375,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [1.425, -0.275],
+ scale: [0.99726, 0.99863],
+ rotation: -28.060562133789062,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-4.975, -8.175],
+ scale: [0.99817, 0.99909],
+ rotation: 73.47801208496094,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.375, 3.85],
+ scale: [0.99992, 0.99995],
+ rotation: 0.055084228515625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.075, -7.425],
+ scale: [0.99687, 0.99845],
+ rotation: -35.83673095703125,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-6.975, -1.375],
+ scale: [0.99715, 0.99856],
+ rotation: 30.063430786132812,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-1.825, -11.225],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 5
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [2.425, -2.075],
+ scale: [0.9967, 0.99835],
+ rotation: 26.395538330078125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-0.9, 3.3],
+ scale: [0.99681, 0.9984],
+ rotation: -38.60699462890625,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [0.05, -8.025],
+ scale: [0.9967, 0.99834],
+ rotation: 44.12237548828125,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 4.45],
+ scale: [0.99992, 0.99995],
+ rotation: 0.51580810546875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-9.35, -5.775],
+ scale: [0.99896, 0.99945],
+ rotation: -9.012893676757812,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.825, -0.175],
+ scale: [0.9967, 0.99836],
+ rotation: 43.11900329589844,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-7.5, -11.225],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 6
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [4.6, -2.75],
+ scale: [0.99948, 0.99972],
+ rotation: -4.758148193359375,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-1.125, 2.425],
+ scale: [0.99673, 0.99837],
+ rotation: -40.85888671875,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [6.125, -6.575],
+ scale: [0.99973, 0.99987],
+ rotation: -2.253570556640625,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 5.475],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-11.1, -3.2],
+ scale: [0.99751, 0.99875],
+ rotation: 24.54595947265625,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.575, 1.15],
+ scale: [0.99684, 0.99843],
+ rotation: 53.4114990234375,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-13.525, -8.675],
+ scale: [0.99675, 0.99836],
+ rotation: 41.61335754394531,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 7
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [5.95, -2.625],
+ scale: [0.99707, 0.99852],
+ rotation: -58.182952880859375,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-1.85, 2.8],
+ scale: [0.99671, 0.99835],
+ rotation: -42.86968994140625,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [12.2, -5.175],
+ scale: [0.99672, 0.99835],
+ rotation: -48.88751220703125,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.45, 6.6],
+ scale: [0.99976, 0.99989],
+ rotation: -1.76458740234375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-12.9, -0.625],
+ scale: [0.99706, 0.99854],
+ rotation: 58.42535400390625,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.425, 2.4],
+ scale: [0.99737, 0.99867],
+ rotation: 63.69502258300781,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-18.45, -4.525],
+ scale: [0.99925, 0.99962],
+ rotation: 83.49212646484375,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 8
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [3.325, -4.325],
+ scale: [0.99704, 0.9985],
+ rotation: -57.6788330078125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.1, 1.4],
+ scale: [0.99901, 0.9995],
+ rotation: -8.506484985351562,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [9.95, -6.65],
+ scale: [0.99672, 0.99836],
+ rotation: -42.865936279296875,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 7.075],
+ scale: [0.99955, 0.99976],
+ rotation: -3.762664794921875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-11.9, -2.1],
+ scale: [0.99881, 0.9994],
+ rotation: 79.49017333984375,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.225, 1.0],
+ scale: [0.99671, 0.99835],
+ rotation: 45.12831115722656,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-18.2, -3.925],
+ scale: [0.99894, 0.99949],
+ rotation: 99.00862121582031,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 9
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [0.65, -6.0],
+ scale: [0.997, 0.9985],
+ rotation: -56.92967224121094,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.825, 0.1],
+ scale: [0.9974, 0.99874],
+ rotation: 14.550994873046875,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [7.675, -8.075],
+ scale: [0.99681, 0.99842],
+ rotation: -36.59808349609375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.275, 6.45],
+ scale: [0.99965, 0.99983],
+ rotation: -3.9924163818359375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-10.875, -3.6],
+ scale: [0.99883, 0.99941],
+ rotation: 100.26283264160156,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-7.025, -0.4],
+ scale: [0.99737, 0.99868],
+ rotation: 26.56085205078125,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-17.875, -3.35],
+ scale: [0.99749, 0.99874],
+ rotation: 114.5517578125,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 10
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-1.25, -7.2],
+ scale: [0.99685, 0.99841],
+ rotation: -52.15968322753906,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.175, -1.4],
+ scale: [0.99686, 0.99842],
+ rotation: 36.843536376953125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [4.95, -9.65],
+ scale: [0.99803, 0.999],
+ rotation: -18.276382446289062,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.25, 5.625],
+ scale: [0.99975, 0.99984],
+ rotation: -3.7504730224609375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-8.55, -4.95],
+ scale: [0.99996, 0.99998],
+ rotation: 89.74559020996094,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-5.9, -1.525],
+ scale: [0.99949, 0.99975],
+ rotation: 4.256805419921875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-16.175, -5.75],
+ scale: [0.99802, 0.999],
+ rotation: 108.52827453613281,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 11
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-3.175, -8.35],
+ scale: [0.99671, 0.99837],
+ rotation: -47.630279541015625,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.875, -2.75],
+ scale: [0.99673, 0.99836],
+ rotation: 48.1436767578125,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [2.275, -11.225],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.375, 4.525],
+ scale: [1.0, 1.0],
+ rotation: -1.7628326416015625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-6.25, -6.35],
+ scale: [0.9987, 0.99936],
+ rotation: 78.73564147949219,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.8, -2.675],
+ scale: [0.99812, 0.99904],
+ rotation: -17.534652709960938,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-14.475, -8.175],
+ scale: [0.99858, 0.99929],
+ rotation: 102.76223754882812,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 12
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-5.2, -7.275],
+ scale: [0.99879, 0.99937],
+ rotation: -11.0135498046875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.025, -1.275],
+ scale: [0.99698, 0.99847],
+ rotation: 33.82926940917969,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-2.45, -11.225],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.325, 3.775],
+ scale: [0.99973, 0.99982],
+ rotation: 0.593597412109375,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-4.9, -5.85],
+ scale: [0.998, 0.99902],
+ rotation: 71.72439575195312,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-3.725, -1.625],
+ scale: [0.99734, 0.99868],
+ rotation: -26.552459716796875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-10.95, -8.55],
+ scale: [0.99905, 0.99952],
+ rotation: 81.74166870117188,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 13
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-7.2, -6.125],
+ scale: [0.99748, 0.99872],
+ rotation: 25.05029296875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.1, 0.275],
+ scale: [0.99797, 0.99897],
+ rotation: 19.287246704101562,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-7.175, -11.225],
+ scale: [1.0, 1.0],
+ rotation: 0.0,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.4, 4.725],
+ scale: [0.99978, 0.99983],
+ rotation: 0.6006011962890625,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-4.025, -6.05],
+ scale: [0.99747, 0.99873],
+ rotation: 58.22715759277344,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.6, -0.6],
+ scale: [0.99689, 0.99843],
+ rotation: -35.3406982421875,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-6.775, -9.525],
+ scale: [0.99715, 0.99856],
+ rotation: 53.97239685058594,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 14
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-9.675, -4.175],
+ scale: [0.99672, 0.99835],
+ rotation: 47.13641357421875,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.975, 1.05],
+ scale: [0.99685, 0.9984],
+ rotation: 36.84185791015625,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-11.725, -7.825],
+ scale: [0.99675, 0.99836],
+ rotation: 41.61335754394531,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.375, 5.625],
+ scale: [0.99999, 0.99999],
+ rotation: -0.5166778564453125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [0.425, -4.725],
+ scale: [0.99963, 0.99982],
+ rotation: 3.00384521484375,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.1, 0.275],
+ scale: [0.9968, 0.9984],
+ rotation: -39.10215759277344,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [1.225, -10.35],
+ scale: [0.99936, 0.99965],
+ rotation: 5.75421142578125,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 15
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-12.125, -2.2],
+ scale: [0.99782, 0.99889],
+ rotation: 69.20977783203125,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-5.85, 1.85],
+ scale: [0.99689, 0.99844],
+ rotation: 54.41572570800781,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-16.325, -4.425],
+ scale: [0.99925, 0.99962],
+ rotation: 83.49212646484375,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.3, 6.525],
+ scale: [0.99983, 0.99995],
+ rotation: -1.4859161376953125,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [4.475, -4.2],
+ scale: [0.99707, 0.99852],
+ rotation: -58.182952880859375,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-1.625, 1.125],
+ scale: [0.99671, 0.99835],
+ rotation: -42.86968994140625,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [9.725, -6.075],
+ scale: [0.99672, 0.99835],
+ rotation: -48.88751220703125,
+ zValue: 6
+ },
+ ]
+ },
+ // frame 16
+ {
+ sprites: [
+ {
+ layer: 0,
+ tag: 0,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [-9.8, -3.7],
+ scale: [0.9994, 0.99968],
+ rotation: 84.74818420410156,
+ zValue: 0
+ },
+ {
+ layer: 1,
+ tag: 1,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-4.75, -0.075],
+ scale: [0.99675, 0.99835],
+ rotation: 40.60636901855469,
+ zValue: 1
+ },
+ {
+ layer: 2,
+ tag: 2,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [-15.4, -4.675],
+ scale: [0.99894, 0.99949],
+ rotation: 99.00862121582031,
+ zValue: 2
+ },
+ {
+ layer: 3,
+ tag: 3,
+ texture: 'robot_01_01_001',
+ part: 'head',
+ hasGlow: true,
+ position: [0.375, 6.175],
+ scale: [0.99954, 0.9997],
+ rotation: -2.5345916748046875,
+ zValue: 3
+ },
+ {
+ layer: 4,
+ tag: 4,
+ texture: 'robot_01_03_001',
+ part: 'leg',
+ hasGlow: true,
+ position: [1.95, -4.875],
+ scale: [0.99699, 0.99849],
+ rotation: -56.42364501953125,
+ zValue: 4
+ },
+ {
+ layer: 5,
+ tag: 5,
+ texture: 'robot_01_02_001',
+ part: 'thigh',
+ hasGlow: false,
+ position: [-2.6, 0.5],
+ scale: [0.99716, 0.99857],
+ rotation: -29.564559936523438,
+ zValue: 5
+ },
+ {
+ layer: 6,
+ tag: 6,
+ texture: 'robot_01_04_001',
+ part: 'foot',
+ hasGlow: false,
+ position: [7.925, -7.075],
+ scale: [0.99672, 0.99836],
+ rotation: -42.865936279296875,
+ zValue: 6
+ },
+ ]
+ },
+ ]
+ },
+};
+
+function getAnimation(name) {
+ return ANIMATIONS[name] || null;
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+ module.exports = { ANIMATIONS, getAnimation };
+}
\ No newline at end of file
diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js
index 6d008e6e..34a3ec51 100644
--- a/assets/scripts/core/game-scene.js
+++ b/assets/scripts/core/game-scene.js
@@ -6201,8 +6201,13 @@ _handleEditorCamera = (delta) => {
_initEditorLogic = () => {
if (this._editorGridGraphics) this._editorGridGraphics.destroy();
this._editorGridGraphics = this.add.graphics().setDepth(5);
- const allObj = window.allobjects();
- this._totalIds = Object.keys(allObj).length;
+const allObj = window.allobjects();
+let maxId = 0;
+for (const key in allObj) {
+ const num = parseInt(key, 10);
+ if (!isNaN(num) && num > maxId) maxId = num;
+}
+this._totalIds = maxId;
this._editorPage = 0;
this._maxPerPage = 12;
this._isSwipeEnabled = false;
@@ -6990,6 +6995,17 @@ _placeObject = () => {
window.levelObjects.push(saveData);
this._level._spawnObject(saveData);
+ // teleport portal pairing
+ if (objId === 747) {
+ const outData = JSON.parse(JSON.stringify(saveData));
+ outData.id = 749;
+ outData._raw["1"] = "749";
+ window.levelObjects.push(outData);
+ this._level._spawnObject(outData);
+ const outIndex = this._level.objectSprites.length - 1;
+ this._selectEditorObjectByIndex(outIndex);
+ }
+
const placedIndex = this._level.objectSprites.length - 1;
const newestSprites = this._level.objectSprites[placedIndex];
diff --git a/assets/scripts/core/level.js b/assets/scripts/core/level.js
index d5e70b76..c328f219 100644
--- a/assets/scripts/core/level.js
+++ b/assets/scripts/core/level.js
@@ -247,6 +247,7 @@ if (!allObjects[1331]) {
};
}
+
const _speedPortalIds = [200, 201, 202, 203, 1334];
for (const _spId of _speedPortalIds) {
if (!allObjects[_spId] || allObjects[_spId].type !== "speed") {
@@ -949,6 +950,25 @@ window.LevelObject = class LevelObject {
(objectDef.type === portalType || objectDef.type === speedType) &&
frameName.includes("_front_");
+ // define portalsub to stop reference errors
+ const portalSub = objectDef.sub || {
+ 10: "gravity_flip",
+ 11: "gravity_normal",
+ 12: "cube",
+ 13: "fly",
+ 45: "mirrora",
+ 46: "mirrorb",
+ 47: "ball",
+ 660: "wave",
+ 111: "ufo",
+ 745: "robot",
+ 747: "teleport_in",
+ 749: "teleport_out",
+ 1331: "spider",
+ 286: "dual_on",
+ 287: "dual_off"
+ }[levelObj.id];
+
const zLayer =
levelObj.zLayer || (objectDef.default_z_layer !== undefined ? objectDef.default_z_layer : 0);
const zOrd =
@@ -1322,6 +1342,9 @@ window.LevelObject = class LevelObject {
47: "ball",
660: "wave",
111: "ufo",
+ 745: "robot",
+ 747: "teleport_in",
+ 749: "teleport_out",
1331: "spider",
286: "dual_on",
287: "dual_off"
@@ -1338,18 +1361,23 @@ window.LevelObject = class LevelObject {
ball: "portal_ball",
wave: portalWaveType,
ufo: portalUfoType,
+ robot: "portal_robot",
spider: "portal_spider",
mirrora: "portal_mirror_on",
mirrorb: "portal_mirror_off",
shrink: "portal_mini_on",
grow: "portal_mini_off",
+ teleport_in: "portal_teleport_in",
+ teleport_out: "portal_teleport_out",
dual_on: "portal_dual_on",
dual_off: "portal_dual_off"
}[portalSub] || null;
if (portalColliderType) {
const collider = new Collider(portalColliderType, worldX, worldY, portalW, portalH, levelObj.rot || 0);
+ // store portal Y for both portals
collider.portalY = worldY;
+ collider.portalObjId = levelObj.id;
registerCollider(collider);
this.objects.push(collider);
hasCollisionEntry = true;
@@ -1431,8 +1459,94 @@ window.LevelObject = class LevelObject {
}
}
- unknownObjectIds.size;
if (unknownObjectIds.size > 0) {
+ console.log("[Level] Unknown object IDs skipped:", [...unknownObjectIds]);
+ }
+
+ // portal logic once again
+
+ const _tpInList = this.objects.filter(o => o.type === "portal_teleport_in");
+ const _tpOutList = this.objects.filter(o => o.type === "portal_teleport_out");
+
+ // check if we need to create orange portals from blue portals key 54 offsets
+ if (_tpInList.length > 0 && _tpOutList.length === 0) {
+ let possibleOrangePortals = [];
+ for (const levelObj of _0x35f1ae) {
+ if (levelObj && levelObj.id === 749) {
+ possibleOrangePortals.push(levelObj);
+ }
+ }
+
+ if (possibleOrangePortals.length > 0) {
+ for (const orangeObj of possibleOrangePortals) {
+ this._spawnObject(orangeObj);
+ }
+ } else {
+ // ONLy create orange portal offsets if a blue teleport portal exists, with the raw data
+
+ for (const _tpIn of _tpInList) {
+ let rawBluePortal = null;
+ let key54Value = 0;
+
+ for (const rawObj of _0x35f1ae) {
+ if (rawObj && rawObj.id === 747) {
+ const rawWorldX = rawObj.x * 2;
+ const rawWorldY = rawObj.y * 2;
+
+ if (Math.abs(rawWorldX - _tpIn.x) < 5 && Math.abs(rawWorldY - _tpIn.y) < 5) {
+ rawBluePortal = rawObj;
+ key54Value = rawObj._raw && rawObj._raw["54"] ? parseFloat(rawObj._raw["54"]) : 0;
+ break;
+ }
+ }
+ }
+
+ const _orangeWorldY = (_tpIn.y || _tpIn.portalY || 0) + (key54Value * 2);
+
+ // orange portal should use its rotation on raw data
+ // will fix later
+ let orangeRotation = 0;
+
+ for (const rawObj749 of _0x35f1ae) {
+ if (rawObj749 && rawObj749.id === 749) {
+ const raw749WorldX = rawObj749.x * 2;
+ const raw749WorldY = rawObj749.y * 2;
+
+ if (Math.abs(raw749WorldX - _tpIn.x) < 5 && Math.abs(raw749WorldY - _orangeWorldY) < 5) {
+ orangeRotation = rawObj749._raw && rawObj749._raw["6"] ? parseFloat(rawObj749._raw["6"]) : (rawBluePortal._raw && rawBluePortal._raw["6"] ? parseFloat(rawBluePortal._raw["6"]) : 0);
+ break;
+ }
+ }
+ }
+
+ if (orangeRotation === 0) {
+ orangeRotation = rawBluePortal._raw && rawBluePortal._raw["6"] ? parseFloat(rawBluePortal._raw["6"]) : 0;
+ }
+
+ const _syntheticObj = {
+ id: 749,
+ x: _tpIn.x / 2,
+ y: _orangeWorldY / 2,
+ flipX: rawBluePortal.flipX || false,
+ flipY: rawBluePortal.flipY || false,
+ rot: orangeRotation,
+ scale: 1,
+ zLayer: 5,
+ zOrder: 10,
+ groups: "",
+ color1: 0,
+ color2: -1,
+ gameMode: 0,
+ miniMode: 0,
+ speed: 0,
+ mirrored: 0,
+ flipGravity: false,
+ _raw: {}
+ };
+
+ this._spawnObject(_syntheticObj);
+ }
+ }
}
const colTypeCounts = {};
diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js
index 03278d39..4492f5b0 100644
--- a/assets/scripts/core/player.js
+++ b/assets/scripts/core/player.js
@@ -32,10 +32,21 @@ class PlayerState {
this.queuedHold = false;
this.isDead = false;
this.mirrored = false;
+ this._robotHold = false;
+ this._robotHoldTimer = 0;
this.isDashing = false;
this.dashYVelocity = 0;
this.isDual = false;
this.ignorePortals = false;
+ this.robotCurrentAnimation = null;
+ this.robotAnimationFrame = 0;
+ this.robotAnimationTimer = 0;
+ this.robotAnimationFrameDuration = 45;
+ this.robotIsAnimating = false;
+ this._robotAnimState = 'GROUND';
+ this.robotJumpStartTimer = 0;
+ this.robotFallStartTimer = 0;
+ this.robotSpeedMultiplier = 1.0;
}
}
@@ -343,6 +354,14 @@ class PlayerObject {
deaths: 0
};
}
+ updateGroundRotation(delta) {
+ this._rotation += delta * 0.15;
+ for (const layer of this._playerLayers) {
+ if (layer && layer.sprite && layer.sprite.visible) {
+ layer.sprite.setRotation(this._rotation);
+ }
+ }
+}
_createSprites() {
const spriteY = this._scene;
const spriteX = b(this.p.y);
@@ -457,7 +476,48 @@ class PlayerObject {
}
this._birdLayers = [this._birdSpriteLayer, this._birdGlowLayer, this._birdOverlayLayer, this._birdExtraLayer].filter(x => !!x);
- this._allLayers = [...this._playerLayers, ...this._ballLayers, ...this._waveLayers, ...this._shipLayers, ...this._spiderLayers, ...this._birdLayers];
+ // robot layers
+ const rBase = window.currentRobot || 'robot_01';
+
+ // head
+ this._robotHeadLayer = ds(spriteY, particleY, spriteX, `${rBase}_01_001.png`, 10, false);
+ this._robotHeadOuterLayer = ds(spriteY, particleY, spriteX, `${rBase}_01_2_001.png`, 9, false);
+
+ // back limbs
+ this._robotLegStemBackLayer = ds(spriteY, particleY, spriteX, `${rBase}_03_001.png`, 7, false);
+ this._robotLegStemBackOuterLayer = ds(spriteY, particleY, spriteX, `${rBase}_03_2_001.png`, 6, false);
+ this._robotThighBackLayer = ds(spriteY, particleY, spriteX, `${rBase}_02_001.png`, 8, false);
+ this._robotFootBackLayer = ds(spriteY, particleY, spriteX, `${rBase}_04_001.png`, 10, false);
+
+ // front limbs
+ this._robotLegStemFrontLayer = ds(spriteY, particleY, spriteX, `${rBase}_03_001.png`, 10, false);
+ this._robotLegStemFrontOuterLayer = ds(spriteY, particleY, spriteX, `${rBase}_03_2_001.png`, 8, false);
+ this._robotThighFrontLayer = ds(spriteY, particleY, spriteX, `${rBase}_02_001.png`, 10, false);
+ this._robotFootFrontLayer = ds(spriteY, particleY, spriteX, `${rBase}_04_001.png`, 10, false);
+
+ // main color
+ if (this._robotHeadLayer) this._robotHeadLayer.sprite.setTint(window.mainColor);
+ if (this._robotLegStemBackLayer) this._robotLegStemBackLayer.sprite.setTint(window.mainColor);
+ if (this._robotThighBackLayer) this._robotThighBackLayer.sprite.setTint(window.mainColor);
+ if (this._robotFootBackLayer) this._robotFootBackLayer.sprite.setTint(window.mainColor);
+ if (this._robotLegStemFrontLayer) this._robotLegStemFrontLayer.sprite.setTint(window.mainColor);
+ if (this._robotThighFrontLayer) this._robotThighFrontLayer.sprite.setTint(window.mainColor);
+ if (this._robotFootFrontLayer) this._robotFootFrontLayer.sprite.setTint(window.mainColor);
+
+ // secondary color
+ if (this._robotHeadOuterLayer) this._robotHeadOuterLayer.sprite.setTint(window.secondaryColor);
+ if (this._robotLegStemBackOuterLayer) this._robotLegStemBackOuterLayer.sprite.setTint(window.secondaryColor);
+ if (this._robotLegStemFrontOuterLayer) this._robotLegStemFrontOuterLayer.sprite.setTint(window.secondaryColor);
+
+ this._robotLayers = [
+ this._robotHeadLayer, this._robotHeadOuterLayer,
+ this._robotLegStemBackLayer, this._robotLegStemBackOuterLayer,
+ this._robotThighBackLayer, this._robotFootBackLayer,
+ this._robotLegStemFrontLayer, this._robotLegStemFrontOuterLayer,
+ this._robotThighFrontLayer, this._robotFootFrontLayer
+ ].filter(x => !!x);
+
+ this._allLayers = [...this._playerLayers, ...this._ballLayers, ...this._waveLayers, ...this._shipLayers, ...this._spiderLayers, ...this._birdLayers, ...this._robotLayers];
this._dashAnimationSprite = spriteY.add.image(particleY, spriteX, "GJ_GameSheetGlow", "playerDash2_001.png");
this._dashAnimationSprite.setDepth(7);
@@ -482,6 +542,217 @@ class PlayerObject {
this._dashAnimationTimer = 0;
}
}
+
+ // animation methods
+ getAnimationSpeedForMultiplier(multiplier) {
+ const speedMap = {
+ 0.5: 1.0,
+ 1: 1.35,
+ 2: 1.75,
+ 3: 2.20,
+ 4: 2.80
+ };
+ return speedMap[multiplier] || 1.0;
+ }
+
+ playRobotAnimation(animationName, forceRestart = false) {
+ if (!this.p.isRobot) return;
+ if (this.p.robotCurrentAnimation === animationName && !forceRestart) return;
+
+ const animData = getAnimation(animationName);
+ if (!animData) {
+ console.warn(`Robot animation "${animationName}" not found`);
+ return;
+ }
+
+ this.p.robotCurrentAnimation = animationName;
+ this.p.robotAnimationFrame = 0;
+ this.p.robotAnimationTimer = 0;
+ this.p.robotIsAnimating = true;
+ }
+
+ getRobotSpeedMultiplierFromPlayerSpeed() {
+ const baseSpeed = 11.540004;
+ const ratio = playerSpeed / baseSpeed;
+ if (ratio < 0.75) return 0.5;
+ if (ratio < 1.5) return 1;
+ if (ratio < 2.5) return 2;
+ if (ratio < 3.5) return 3;
+ return 4;
+ }
+
+ updateRobotAnimation(deltaTime) {
+ if (!this.p.isRobot || !this.p.robotCurrentAnimation) return;
+
+ const animData = getAnimation(this.p.robotCurrentAnimation);
+ if (!animData) return;
+
+ let frameDuration = this.p.robotAnimationFrameDuration;
+
+ if (this.p.robotCurrentAnimation === 'run') {
+ const speedMultiplier = this.getAnimationSpeedForMultiplier(this.getRobotSpeedMultiplierFromPlayerSpeed());
+ frameDuration = frameDuration / speedMultiplier;
+ }
+
+ this.p.robotAnimationTimer += deltaTime * 1000;
+
+ if (this.p.robotAnimationTimer >= frameDuration) {
+ this.p.robotAnimationTimer -= frameDuration;
+ this.p.robotAnimationFrame++;
+
+ if (this.p.robotAnimationFrame >= animData.frameCount) {
+ if (this.p.robotCurrentAnimation === 'run') {
+ this.p.robotAnimationFrame = 0;
+ } else {
+ this.p.robotAnimationFrame = animData.frameCount - 1;
+ this.p.robotIsAnimating = false;
+ }
+ }
+ }
+
+ this.applyRobotAnimationFrame();
+ }
+
+ applyRobotAnimationFrame() {
+ const animData = getAnimation(this.p.robotCurrentAnimation);
+ if (!animData || !animData.frames[this.p.robotAnimationFrame]) return;
+
+ const currentFrame = animData.frames[this.p.robotAnimationFrame];
+
+ const spriteMap = {
+ 0: this._robotLegStemBackLayer,
+ 1: this._robotThighBackLayer,
+ 2: this._robotFootBackLayer,
+ 3: this._robotHeadLayer,
+ 4: this._robotLegStemFrontLayer,
+ 5: this._robotThighFrontLayer,
+ 6: this._robotFootFrontLayer
+ };
+
+ const baseX = this._robotBaseX !== undefined ? this._robotBaseX : 0;
+ const baseY = this._robotBaseY !== undefined ? this._robotBaseY : 0;
+
+ // sync sprites
+ const miniScale = this.p.isMini ? 0.6 : 1;
+ const mirrorMult = this.p.mirrored ? -1 : 1;
+ const gravityMult = this.p.gravityFlipped ? -1 : 1;
+
+ const ROBOT_SCALE = 2;
+
+ for (const layer of this._robotLayers) {
+ if (layer && layer.sprite) layer.sprite.setVisible(false);
+ }
+
+ const sortedSprites = [...currentFrame.sprites].sort((a, b) => a.zValue - b.zValue);
+
+ for (const spriteData of sortedSprites) {
+ const layer = spriteMap[spriteData.tag];
+ if (!layer || !layer.sprite) continue;
+
+ layer.sprite.setVisible(true);
+
+ // reverse
+ const offsetX = spriteData.position[0] * ROBOT_SCALE * miniScale * mirrorMult;
+ const offsetY = -spriteData.position[1] * ROBOT_SCALE * miniScale * gravityMult;
+ layer.sprite.x = baseX + offsetX;
+ layer.sprite.y = baseY + offsetY;
+
+ layer.sprite.scaleX = spriteData.scale[0] * miniScale * mirrorMult;
+ layer.sprite.scaleY = spriteData.scale[1] * miniScale * gravityMult;
+
+ layer.sprite.rotation = spriteData.rotation * Math.PI / 180;
+
+ layer.sprite.setDepth(10 + spriteData.zValue);
+
+ if (layer === this._robotHeadLayer && this._robotHeadOuterLayer) {
+ this._syncRobotOuterLayer(this._robotHeadOuterLayer, layer.sprite, 2);
+ } else if (layer === this._robotLegStemBackLayer && this._robotLegStemBackOuterLayer) {
+ this._syncRobotOuterLayer(this._robotLegStemBackOuterLayer, layer.sprite, 2);
+ } else if (layer === this._robotLegStemFrontLayer && this._robotLegStemFrontOuterLayer) {
+ this._syncRobotOuterLayer(this._robotLegStemFrontOuterLayer, layer.sprite, 2);
+ }
+ }
+ }
+
+ _syncRobotOuterLayer(outerLayer, innerSprite, depthOffset) {
+ if (!outerLayer || !outerLayer.sprite) return;
+ outerLayer.sprite.setVisible(innerSprite.visible);
+ outerLayer.sprite.x = innerSprite.x;
+ outerLayer.sprite.y = innerSprite.y;
+ outerLayer.sprite.rotation = innerSprite.rotation;
+ outerLayer.sprite.scaleX = innerSprite.scaleX;
+ outerLayer.sprite.scaleY = innerSprite.scaleY;
+ outerLayer.sprite.setDepth(innerSprite.depth - depthOffset);
+ }
+
+ updateRobotAnimationState(deltaTime) {
+ if (!this.p.isRobot) return;
+
+ // always run on ground
+ if (this.p.onGround && !this.p.isJumping) {
+ if (this.p.robotCurrentAnimation !== 'run') {
+ this.playRobotAnimation('run', true);
+ }
+ this.p.robotJumpStartTimer = 0;
+ this.p.robotFallStartTimer = 0;
+ return;
+ }
+
+ if (this.p.isJumping && !this.p.onGround) {
+ if (this.p.robotCurrentAnimation !== 'jump_start' && this.p.robotCurrentAnimation !== 'jump_loop') {
+ this.p.robotJumpStartTimer = 0;
+ this.playRobotAnimation('jump_start', true);
+ }
+
+ this.p.robotJumpStartTimer += deltaTime;
+
+ if (this.p.robotJumpStartTimer >= 0.5 && this.p.robotCurrentAnimation === 'jump_start') {
+ this.playRobotAnimation('jump_loop', true);
+ }
+
+ this.p.robotFallStartTimer = 0;
+ return;
+ }
+
+ if (!this.p.onGround && !this.p.isJumping) {
+ if (this.p.robotCurrentAnimation !== 'fall_start' && this.p.robotCurrentAnimation !== 'fall_loop') {
+ this.p.robotFallStartTimer = 0;
+ this.playRobotAnimation('fall_start', true);
+ }
+
+ this.p.robotFallStartTimer += deltaTime;
+
+ if (this.p.robotFallStartTimer >= 0.6 && this.p.robotCurrentAnimation === 'fall_start') {
+ this.playRobotAnimation('fall_loop', true);
+ }
+
+ this.p.robotJumpStartTimer = 0;
+ return;
+ }
+ }
+
+ rotateRobotDirect(newRotation) {
+ if (this.p.isRobot) {
+ this._rotation = this.p.gravityFlipped ? Math.PI : 0;
+ this.applyRobotLayerRotation(this._rotation);
+ }
+ }
+
+ rotateRobotOther(newRotation, duration = 200) {
+ if (!this.p.isRobot) return;
+ this._rotation = newRotation;
+ this.applyRobotLayerRotation(newRotation);
+ }
+
+ applyRobotLayerRotation(rotation) {
+ for (const layer of this._robotLayers) {
+ if (layer && layer.sprite) {
+ layer.sprite.rotation = this.p.mirrored ? -rotation : rotation;
+ }
+ }
+ }
+
+
_initParticles(scene) {
this._particleEmitter = scene.add.particles(0, 0, "GJ_WebSheet", {
frame: "square.png",
@@ -643,12 +914,8 @@ class PlayerObject {
tint: window.mainColor,
emitting: false
};
- this._landEmitter1 = scene.add.particles(0, 0, "GJ_WebSheet", {
- ..._0x57911a
- });
- this._landEmitter2 = scene.add.particles(0, 0, "GJ_WebSheet", {
- ..._0x57911a
- });
+ this._landEmitter1 = scene.add.particles(0, 0, "GJ_WebSheet", Object.assign({}, _0x57911a));
+ this._landEmitter2 = scene.add.particles(0, 0, "GJ_WebSheet", Object.assign({}, _0x57911a));
this._aboveContainer = scene.add.container(0, 0);
this._aboveContainer.setDepth(13);
this._gameLayer.topContainer.add(this._landEmitter1);
@@ -659,6 +926,7 @@ class PlayerObject {
this._waveTrail = new WaveTrail(this._scene, window.secondaryColor, window.secondaryColor);
this._waveTrail.addToContainer(this._gameLayer.container, 9);
}
+
_updateParticles(_0xc43238, _0x52b718, _0x5af874) {
if (this.p.isDead) {
return;
@@ -796,6 +1064,11 @@ class PlayerObject {
}
}
}
+ setRobotVisible(v) {
+ for (const layer of (this._robotLayers || [])) {
+ layer.sprite.setVisible(v);
+ }
+ }
syncSprites(cameraX, cameraY, _0x3afedf, mirrorOffset) {
if (this._endAnimating) {
return;
@@ -878,36 +1151,24 @@ if (this.p.isFlying || this.p.isUfo) {
for (const playerLayer of this._allLayers) {
if (playerLayer) {
- playerLayer.sprite.x = _0x7f0705;
- playerLayer.sprite.y = _0x1a433c;
- const isBallLayer = this._ballLayers.includes(playerLayer);
- playerLayer.sprite.rotation = isBallLayer ? playerRotation : (this.p.mirrored ? -playerRotation : playerRotation);
- let _miniS = this.p.isMini ? 0.6 : 1;
- if (this.p.isWave && this._waveLayers.includes(playerLayer)) {
- _miniS *= 0.94; //fix wave size
- }
- playerLayer.sprite.scaleY = (this.p.gravityFlipped ? -_miniS : _miniS);
- playerLayer.sprite.scaleX = (this.p.mirrored ? -_miniS : _miniS);
- }
- }
- for (const layer of this._spiderLayers) {
- if (layer) {
- layer.sprite.setVisible(false);
- }
- }
-
- for (const playerLayer of this._allLayers) {
- if (playerLayer) {
- playerLayer.sprite.x = _0x7f0705;
- playerLayer.sprite.y = _0x1a433c;
- const isBallLayer = this._ballLayers.includes(playerLayer);
+ playerLayer.sprite.x = _0x7f0705;
+ playerLayer.sprite.y = _0x1a433c;
+ const isBallLayer = this._ballLayers.includes(playerLayer);
+ const isRobotLayer = this._robotLayers.includes(playerLayer);
+ if (isRobotLayer) {
+ playerLayer.sprite.setVisible(this.p.isRobot);
+ playerLayer.sprite.rotation = 0;
+ this._robotBaseX = _0x7f0705;
+ this._robotBaseY = _0x1a433c;
+ } else {
playerLayer.sprite.rotation = isBallLayer ? playerRotation : (this.p.mirrored ? -playerRotation : playerRotation);
- let _miniS = this.p.isMini ? 0.6 : 1;
- if (this.p.isWave && this._waveLayers.includes(playerLayer)) {
- _miniS *= 0.94; //fix wave size
- }
- playerLayer.sprite.scaleY = (this.p.gravityFlipped ? -_miniS : _miniS);
- playerLayer.sprite.scaleX = (this.p.mirrored ? -_miniS : _miniS);
+ }
+ let _miniS = this.p.isMini ? 0.6 : 1;
+ if (this.p.isWave && this._waveLayers.includes(playerLayer)) {
+ _miniS *= 0.94; //fix wave size
+ }
+ playerLayer.sprite.scaleY = (this.p.gravityFlipped ? -_miniS : _miniS);
+ playerLayer.sprite.scaleX = (this.p.mirrored ? -_miniS : _miniS);
}
}
}
@@ -927,6 +1188,12 @@ if (this.p.isFlying || this.p.isUfo) {
this._dashAnimationSprite.scaleX = _miniS;
}
+ // update robot animations
+ if (this.p.isRobot) {
+ this.updateRobotAnimation(_0x3afedf);
+ this.updateRobotAnimationState(_0x3afedf);
+ }
+
if (!this._scene._slideIn){
if (window.showHitboxes || this.p.isDead && window.hitboxesOnDeath) {
this.drawHitboxes(this._hitboxGraphics, cameraX, cameraY);
@@ -940,6 +1207,7 @@ if (this.p.isFlying || this.p.isUfo) {
return;
}
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.p.isFlying = true;
this._scene.toggleGlitter(true);
@@ -1041,6 +1309,7 @@ if (this.p.isFlying || this.p.isUfo) {
}
this.exitShipMode();
this.exitBallMode();
+ this.exitRobotMode();
this.p.isWave = true;
this.p.yVelocity = 0;
this.p.onGround = false;
@@ -1083,11 +1352,63 @@ if (this.p.isFlying || this.p.isUfo) {
this.setShipVisible(this.p.isFlying);
this.setSpiderVisible(false);
this._gameLayer.setFlyMode(false, 0);
+ }
+ enterRobotMode(portal = null, fromCheckpoint = false) {
+ if (this.p.isRobot) return;
+ this.exitShipMode();
+ this.exitBallMode();
+ this.exitWaveMode();
+ this.exitUfoMode();
+ this.exitSpiderMode();
+ this.exitRobotMode();
+ this.p.isRobot = true;
+ this.p.onGround = false;
+ this.p.canJump = false;
+ this.p._robotHoldTimer = 0;
+ this.p.isJumping = false;
+ this.p._robotHold = false;
+ this.stopRotation();
+ this._rotation = 0;
+ this.setCubeVisible(false);
+ this.setBallVisible(false);
+ this.setShipVisible(false);
+ this.setWaveVisible(false);
+ this.setBirdVisible(false);
+ this.setSpiderVisible(false);
+ this.setRobotVisible(true);
+ let _y = this.p.y;
+ if (portal) _y = portal.portalY !== undefined ? portal.portalY : portal.y;
+
+ // init state
+ this.p.robotCurrentAnimation = null;
+ this.p.robotAnimationFrame = 0;
+ this.p.robotAnimationTimer = 0;
+ this.p.robotIsAnimating = false;
+ this.p.robotJumpStartTimer = 0;
+ this.p.robotFallStartTimer = 0;
+ this.p.robotSpeedMultiplier = 1.0;
+ this.playRobotAnimation('idle');
+ }
+
+ exitRobotMode() {
+ if (!this.p.isRobot) return;
+ this.p.isRobot = false;
+ this.p.onGround = false;
+ this.p.canJump = false;
+ this.p.isJumping = false;
+ this.p._robotHold = false;
+ this.p._robotHoldTimer = 0;
+ this.stopRotation();
+ this._rotation = 0;
+ this.setRobotVisible(false);
+ this.setCubeVisible(true);
+ this._gameLayer.setFlyMode(false, 0);
}
enterSpiderMode(portal = null) {
if (this.p.isSpider) return;
this.exitShipMode();
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.p.isSpider = true;
this.p.yVelocity = 0;
@@ -1124,6 +1445,7 @@ if (this.p.isFlying || this.p.isUfo) {
enterUfoMode(_portal = null, fromCheckpoint = false) {
if (this.p.isUfo) return;
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.exitShipMode();
this.p.isUfo = true;
@@ -1200,6 +1522,19 @@ if (this.p.isFlying || this.p.isUfo) {
}
} else if (this.p.isWave) {
this._rotation = 0;
+
+ } else if (this.p.isRobot) {
+ // if gravity flipped be upside down
+ this._rotation = this.p.gravityFlipped ? Math.PI : 0;
+ this.stopRotation();
+ this.p._robotHold = false;
+ this.p._robotHoldTimer = 0;
+ this.p._robotAnimState = 'GROUND';
+ this.p.robotJumpStartTimer = 0;
+ this.p.robotFallStartTimer = 0;
+ if (this.p.robotCurrentAnimation !== 'run') {
+ this.playRobotAnimation('run', true);
+ }
}
this.stopRotation();
if (_0x4a38a5 && !this.p.isFlying && !this.p.isWave && !this.p.isSpider) {
@@ -1302,7 +1637,7 @@ if (this.p.isFlying || this.p.isUfo) {
height: sliderBar,
add: false
});
- const _0x5c571a = [this._playerGlowLayer, this._playerOverlayLayer, this._ballGlowLayer, this._ballOverlayLayer, this._waveGlowLayer, this._waveOverlayLayer, this._waveExtraLayer, this._shipGlowLayer, this._shipOverlayLayer, this._playerSpriteLayer, this._playerExtraLayer, this._ballSpriteLayer, this._waveSpriteLayer, this._shipSpriteLayer, this._shipExtraLayer, this._birdSpriteLayer, this._birdGlowLayer, this._birdOverlayLayer, this._birdExtraLayer];
+ const _0x5c571a = [this._playerGlowLayer, this._playerOverlayLayer, this._ballGlowLayer, this._ballOverlayLayer, this._waveGlowLayer, this._waveOverlayLayer, this._waveExtraLayer, this._shipGlowLayer, this._shipOverlayLayer, this._playerSpriteLayer, this._playerExtraLayer, this._ballSpriteLayer, this._waveSpriteLayer, this._shipSpriteLayer, this._shipExtraLayer, this._birdSpriteLayer, this._birdGlowLayer, this._birdOverlayLayer, this._birdExtraLayer, this._robotHeadLayer, this._robotHeadOuterLayer, this._robotLegStemBackLayer, this._robotLegStemBackOuterLayer, this._robotThighBackLayer, this._robotFootBackLayer, this._robotLegStemFrontLayer, this._robotLegStemFrontOuterLayer, this._robotThighFrontLayer, this._robotFootFrontLayer];
for (const _0x1f09e3 of _0x5c571a) {
if (!_0x1f09e3) {
continue;
@@ -1531,6 +1866,61 @@ if (this.p.isFlying || this.p.isUfo) {
});
}
}
+
+ // teleport portals
+ _findTeleportOut(fromPortal) {
+ // blue tp portal shares same X with orange
+ const sections = this._gameLayer && this._gameLayer._collisionSections;
+ if (!sections) {
+ return null;
+ }
+
+ const SECTION_SIZE = 400;
+ const startSec = Math.max(0, Math.floor(fromPortal.x / SECTION_SIZE));
+ const endSec = sections.length - 1;
+
+ let bestOut = null;
+ let bestDist = Infinity;
+
+ for (let si = startSec; si <= endSec; si++) {
+ const sec = sections[si];
+ if (!sec) continue;
+ for (const obj of sec) {
+ if ((obj.type === "portal_teleport_out" || obj.sub === "teleport_out") &&
+ obj !== fromPortal) {
+ const dist = obj.x - fromPortal.x;
+ const xDiff = Math.abs(obj.x - fromPortal.x);
+
+ if (xDiff < 200 && dist >= 0 && dist < bestDist) {
+ bestDist = dist;
+ bestOut = obj;
+ }
+ }
+ }
+ }
+
+ return bestOut;
+ }
+
+ _teleportPlayer(toPortal) {
+ // only change Y pos, not X
+ const targetY = toPortal.portalY !== undefined ? toPortal.portalY : toPortal.y;
+
+ this.p.y = targetY;
+ this.p.lastY = targetY;
+ this.p.lastGroundPosY = targetY;
+
+ // reducing velocity after you teleport
+ this.p.vy *= 0.8;
+ this.p.yVelocity *= 0.8;
+
+ this.p.onGround = false;
+ this.p.canJump = false;
+ this.p.isJumping = false;
+
+ this._playPortalShine(toPortal, 1);
+ }
+
_checkSnapJump(_0x1f801b) {
const _0x483058 = [{
dx: 240,
@@ -1589,6 +1979,9 @@ if (this.p.isFlying || this.p.isUfo) {
this.p.yVelocity *= _0x11bbde;
this.p.onGround = false;
this.p.canJump = false;
+ if (this.p.isRobot) {
+ this.runRotateAction();
+ }
}
runRotateAction() {
this.rotateActionActive = true;
@@ -1649,7 +2042,7 @@ if (this.p.isFlying || this.p.isUfo) {
return out + out;
}
updateGroundRotation(_0x5c24f7) {
- if (this.p.isBall || this.p.isWave || this.p.isSpider) {
+ if (this.p.isBall || this.p.isWave || this.p.isSpider || this.p.isRobot) {
return;
}
let _0x183c2a = this.convertToClosestRotation();
@@ -1703,9 +2096,11 @@ if (this.p.isFlying || this.p.isUfo) {
this._updateBallJump(_0x3d1c6f);
} else if (this.p.isUfo) {
this._updateUfoJump(_0x3d1c6f);
- } else if (this.p.isSpider) {
- this._updateSpiderJump(_0x3d1c6f);
- } else if (this.p.upKeyDown && this.p.canJump) {
+ } else if (this.p.isSpider) {
+ this._updateSpiderJump(_0x3d1c6f);
+ } else if (this.p.isRobot) {
+ this._updateRobotJump(_0x3d1c6f);
+ } else if (this.p.upKeyDown && this.p.canJump) {
this.p.isJumping = true;
this.p.onGround = false;
this.p.canJump = false;
@@ -1866,7 +2261,7 @@ _updateWaveJump() {
this.p.upKeyPressed = false;
this.p.queuedHold = false;
const _floorY = this._gameLayer.getFloorY();
- const _ceilY = this._gameLayer.getCeilingY();
+ const _ceilY = this._gameLayer.getCeilingY() || f;
let nearestSurfaceY;
if (!this.p.gravityFlipped) {
nearestSurfaceY = _ceilY !== null ? _ceilY : Infinity;
@@ -1935,6 +2330,79 @@ _updateWaveJump() {
}
}
}
+
+_updateRobotJump(dt) {
+ const dtSec = dt > 1 ? dt / 1000 : dt
+
+ const robotJumpInit = 10.25
+ const robotHoldMax = 15.8
+ const robotHoldForce = p * 0.2
+ const robotGravityHold = p * 0.15
+ const robotGravityFall = p * 0.81
+ const robotReleaseCut = 0.9
+ const robotReleaseMinTime = 0
+ const robotMaxFall = 28
+ const robotMaxRise = 30
+
+ if (this.p.upKeyPressed && this.p.canJump) {
+ this.p.upKeyPressed = false
+ this.p.isJumping = true
+ this.p.onGround = false
+ this.p.canJump = false
+ this.p.queuedHold = false
+ this.p.yVelocity = this.flipMod() * robotJumpInit
+ this.p._robotHold = true
+ this.p._robotHoldTimer = 0
+ return
+ }
+
+ if (this.p.isJumping) {
+ if (this.p._robotHold) {
+ this.p._robotHoldTimer += dtSec
+
+ if (this.p._robotHoldTimer >= robotHoldMax || !this.p.upKeyDown) {
+ this.p._robotHold = false
+
+ const goingUp = this.p.gravityFlipped
+ ? this.p.yVelocity < 0
+ : this.p.yVelocity > 0
+
+ if (goingUp && this.p._robotHoldTimer > robotReleaseMinTime) {
+ this.p.yVelocity *= robotReleaseCut
+ }
+ } else {
+ this.p.yVelocity += this.flipMod() * robotHoldForce * dtSec
+ }
+ }
+
+ if (this.p._robotHold) {
+ this.p.yVelocity -= robotGravityHold * dtSec * this.flipMod()
+ } else {
+ this.p.yVelocity -= robotGravityFall * dtSec * this.flipMod()
+ }
+
+ if (this.playerIsFalling()) {
+ this.p.isJumping = false
+ this.p._robotHold = false
+ }
+ } else {
+ this.p.yVelocity -= robotGravityFall * dtSec * this.flipMod()
+ }
+
+ if (this.p.gravityFlipped) {
+ this.p.yVelocity = Math.min(this.p.yVelocity, robotMaxRise)
+ this.p.yVelocity = Math.max(this.p.yVelocity, -robotMaxFall)
+ } else {
+ this.p.yVelocity = Math.max(this.p.yVelocity, -robotMaxRise)
+ this.p.yVelocity = Math.min(this.p.yVelocity, robotMaxFall)
+ }
+
+ if (this.playerIsFalling()) {
+ this.p.canJump = false
+ }
+}
+
+
checkCollisions(_0x2f5078) {
this.noclipStats.totalFrames++;
this.p.diedThisFrame = false;
@@ -1988,6 +2456,7 @@ _updateWaveJump() {
gameObj.activated = true;
this._playPortalShine(gameObj);
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.exitShipMode();
this.exitUfoMode();
@@ -1998,6 +2467,7 @@ _updateWaveJump() {
gameObj.activated = true;
this._playPortalShine(gameObj);
this.exitBallMode();
+ this.exitRobotMode();
this.exitShipMode();
this.exitWaveMode();
this.exitUfoMode();
@@ -2008,6 +2478,7 @@ _updateWaveJump() {
gameObj.activated = true;
this._playPortalShine(gameObj);
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.exitShipMode();
this.enterUfoMode(gameObj);
@@ -2018,6 +2489,7 @@ _updateWaveJump() {
this._playPortalShine(gameObj);
this.exitShipMode();
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.exitUfoMode();
}
@@ -2029,6 +2501,7 @@ _updateWaveJump() {
this.exitWaveMode();
this.exitUfoMode();
this.exitBallMode();
+ this.exitRobotMode();
this.enterBallMode(gameObj);
}
} else if (_colType === "portal_spider") {
@@ -2037,10 +2510,36 @@ _updateWaveJump() {
this._playPortalShine(gameObj);
this.exitShipMode();
this.exitBallMode();
+ this.exitRobotMode();
this.exitWaveMode();
this.exitUfoMode();
this.exitSpiderMode();
this.enterSpiderMode(gameObj);
+ }
+ } else if (_colType === "portal_robot" || gameObj.sub === "robot") {
+ if (!gameObj.activated) {
+ gameObj.activated = true;
+ this._playPortalShine(gameObj);
+ this.exitShipMode();
+ this.exitBallMode();
+ this.exitWaveMode();
+ this.exitUfoMode();
+ this.exitSpiderMode();
+ this.exitRobotMode();
+ this.enterRobotMode(gameObj);
+ }
+ } else if (_colType === "portal_teleport_in" || gameObj.sub === "teleport_in") {
+ if (!gameObj.activated) {
+ gameObj.activated = true;
+ this._playPortalShine(gameObj);
+ const teleportOut = this._findTeleportOut(gameObj);
+ if (teleportOut) {
+ this._teleportPlayer(teleportOut);
+ }
+ }
+ } else if (_colType === "portal_teleport_out" || gameObj.sub === "teleport_out") {
+ if (!gameObj.activated) {
+ gameObj.activated = true;
}
} else if (_colType === "portal_gravity_down") {
if (!gameObj.activated) {
@@ -2293,7 +2792,7 @@ _updateWaveJump() {
else if (_orbId === 141) { _orbVel = _ballBase * 0.77; }
else if (_orbId === 1333) { _orbVel = _ballBase * 1.34; }
else if (_orbId === 84) { _orbVel = _ballBase * 0.4; _flipAfter = true; }
- else if (_orbId === 1022) { _orbVel = _ballBase * -1; _flipAfter = true; }
+ else if (_orbId === 1022) { _orbVel = _ballBase * -1.94; _flipAfter = true; }
else if (_orbId === 1330) { _orbVel = -30; }
} else if (this.p.isUfo) {
const _ufoYellowOrb = this.p.isMini ? 17.888 : 22.36;
@@ -2310,7 +2809,7 @@ _updateWaveJump() {
else if (_orbId === 141) { _orbVel = _cubeJump * 0.72; }
else if (_orbId === 1333) { _orbVel = _cubeJump * 1.28; }
else if (_orbId === 84) { _orbVel = _cubeJump * 0.4; _flipAfter = true; }
- else if (_orbId === 1022) { _orbVel = _cubeJump * -1; _flipAfter = true; }
+ else if (_orbId === 1022) { _orbVel = _cubeJump * -1.94; _flipAfter = true; }
else if (_orbId === 1330) { _orbVel = -30; }
} else if (this.p.isSpider) {
const _spiderBase = _cubeJump * 0.7;
@@ -2616,8 +3115,10 @@ _updateWaveJump() {
let hitboxColor = 65280;
if (nearObject.type === hazardType) {
hitboxColor = 16729156;
- } else if (nearObject.type === "portal_fly" || nearObject.type === "portal_cube" || nearObject.type === "portal_ball" || nearObject.type === portalWaveType || nearObject.type === portalUfoType) {
+ } else if (nearObject.type === "portal_fly" || nearObject.type === "portal_cube" || nearObject.type === "portal_ball" || nearObject.type === portalWaveType || nearObject.type === portalUfoType || nearObject.type === "portal_robot" || nearObject.sub === "robot") {
hitboxColor = 4491519;
+ } else if (nearObject.type === "portal_teleport_in" || nearObject.type === "portal_teleport_out" || nearObject.sub === "teleport_in" || nearObject.sub === "teleport_out") {
+ hitboxColor = 8388352;
} else if (nearObject.type === "portal_gravity_down" || nearObject.type === "portal_gravity_up" || nearObject.type === "portal_gravity_toggle") {
hitboxColor = 16776960;
} else if (nearObject.type === "portal_mirror_on" || nearObject.type === "portal_mirror_off") {
@@ -2762,7 +3263,7 @@ _updateWaveJump() {
const _0x47ae60 = _0x501b73;
const _0x1f2e19 = _0x4a45d7 + 80;
const _0x8bc9f4 = _0x568b25 + 300;
- const _0x11b580 = [this._playerSpriteLayer, this._playerGlowLayer, this._playerOverlayLayer, this._playerExtraLayer, this._ballSpriteLayer, this._ballGlowLayer, this._ballOverlayLayer, this._waveSpriteLayer, this._waveOverlayLayer, this._waveExtraLayer, this._waveGlowLayer, this._shipSpriteLayer, this._shipGlowLayer, this._shipOverlayLayer, this._shipExtraLayer].filter(_0x3e9c62 => _0x3e9c62 && _0x3e9c62.sprite.visible).map(_0x5cedeb => _0x5cedeb.sprite);
+ const _0x11b580 = [this._playerSpriteLayer, this._playerGlowLayer, this._playerOverlayLayer, this._playerExtraLayer, this._ballSpriteLayer, this._ballGlowLayer, this._ballOverlayLayer, this._waveSpriteLayer, this._waveOverlayLayer, this._waveExtraLayer, this._waveGlowLayer, this._shipSpriteLayer, this._shipGlowLayer, this._shipOverlayLayer, this._shipExtraLayer, this._birdSpriteLayer, this._birdGlowLayer, this._birdOverlayLayer, this._birdExtraLayer, this._robotHeadLayer, this._robotHeadOuterLayer, this._robotLegStemBackLayer, this._robotLegStemBackOuterLayer, this._robotThighBackLayer, this._robotFootBackLayer, this._robotLegStemFrontLayer, this._robotLegStemFrontOuterLayer, this._robotThighFrontLayer, this._robotFootFrontLayer].filter(_0x3e9c62 => _0x3e9c62 && _0x3e9c62.sprite.visible).map(_0x5cedeb => _0x5cedeb.sprite);
this._startPercent = (this._scene._playerWorldX / this._scene._level.endXPos) * 100;
this._particleEmitter.stop();
this._flyParticleEmitter.stop();
@@ -2850,6 +3351,7 @@ _updateWaveJump() {
this.setBallVisible(false);
this.setWaveVisible(false);
this.setBirdVisible(false);
+ this.setRobotVisible(false);
this.setSpiderVisible(false);
for (const _0x5a0fa9 of this._allLayers) {
if (_0x5a0fa9) {
@@ -2877,4 +3379,4 @@ _updateWaveJump() {
this._waveTrail.stop();
this._waveTrail.reset();
}
-}
+}
\ No newline at end of file
diff --git a/assets/scripts/game/allObjects.js b/assets/scripts/game/allObjects.js
index eca442ed..a92ddcdc 100644
--- a/assets/scripts/game/allObjects.js
+++ b/assets/scripts/game/allObjects.js
@@ -12321,10 +12321,12 @@ window.allobjects = function() {
"default_base_color_channel": 0,
"frame": "portal_15_front_001.png",
"glow_frame": "portal_15_front_glow_001.png",
+ "glow": true,
"gridH": 3,
"gridW": 0.8333333134651184,
"spritesheet": "GJ_GameSheet02-uhd",
- "type": "deco",
+ "type": "portal",
+ "sub": "teleport_in",
"z": 10,
"default_detail_color_channel": -1,
"default_z_layer": 5,
@@ -12335,10 +12337,12 @@ window.allobjects = function() {
"default_base_color_channel": 0,
"frame": "portal_16_front_001.png",
"glow_frame": "portal_16_front_glow_001.png",
+ "glow": true,
"gridH": 3,
"gridW": 1.2833333015441895,
"spritesheet": "GJ_GameSheet02-uhd",
- "type": "deco",
+ "type": "portal",
+ "sub": "teleport_out",
"z": 10,
"default_detail_color_channel": -1,
"default_z_layer": 5,
diff --git a/index.html b/index.html
index e2bb38a6..afc5e8ba 100644
--- a/index.html
+++ b/index.html
@@ -38,10 +38,11 @@
-
+
+