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 @@ - + +