diff --git a/.freebuff/project-id b/.freebuff/project-id
new file mode 100644
index 00000000..0b91373f
--- /dev/null
+++ b/.freebuff/project-id
@@ -0,0 +1 @@
+1218ac03-12ab-4fba-8cbf-102a5dfc6e7a
diff --git a/.gitignore b/.gitignore
index a22d8315..4d451d89 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,5 @@
/.claude
/node_modules
/server.js
-*.env*
\ No newline at end of file
+*.env*
+/iSpyWithMyLittleEye.gmd
diff --git a/assets/scripts/core/beast-anim.js b/assets/scripts/core/beast-anim.js
new file mode 100644
index 00000000..b3f1cd57
--- /dev/null
+++ b/assets/scripts/core/beast-anim.js
@@ -0,0 +1,411 @@
+const BEAST_ANIM_OBJECT_IDS = [918, 1327, 1328, 1584, 2012];
+
+const BEAST_ANIM_NAME_BY_ID = {
+ 918: "GJBeast01",
+ 1327: "GJBeast02",
+ 1328: "GJBeast03",
+ 1584: "GJBeast04",
+ 2012: "GJBeast05"
+};
+
+const BEAST_ANIM_DEFAULT_ANIM_ID = { 918: 0, 1327: 0, 1328: 0, 1584: 0, 2012: 0 };
+
+const BEAST_ANIM_DEFS = {
+ GJBeast01: {
+ defaultAnimation: "bite",
+ animations: {
+ bite: { delay: 0.025, frames: 16, looped: true },
+ attack01: { delay: 0.025, frames: 3, looped: false },
+ attack01_loop: { delay: 0.025, frames: 7, looped: true },
+ attack01_end: { delay: 0.04, frames: 6, looped: false },
+ idle01: { delay: 0.05, frames: 8, looped: true }
+ }
+ },
+ GJBeast02: {
+ defaultAnimation: "idle01",
+ animations: {
+ idle01: { delay: 0.06, frames: 9, looped: false },
+ idle02: { delay: 0.06, frames: 9, looped: false }
+ }
+ },
+ GJBeast03: {
+ defaultAnimation: "idle01",
+ animations: {
+ idle01: { delay: 0.06, frames: 9, looped: false },
+ idle02: { delay: 0.06, frames: 9, looped: false }
+ }
+ },
+ GJBeast04: {
+ defaultAnimation: "idle01",
+ animations: {
+ idle01: { delay: 0.06, frames: 14, looped: false },
+ idle02: { delay: 0.06, frames: 14, looped: false },
+ idle03: { delay: 0.06, frames: 14, looped: false },
+ attack01: { delay: 0.06, frames: 9, looped: false },
+ attack02: { delay: 0.06, frames: 3, looped: false },
+ attack02_loop: { delay: 0.05, frames: 6, looped: true },
+ attack02_end: { delay: 0.06, frames: 5, looped: false },
+ sleep: { delay: 0.06, frames: 9, looped: false },
+ sleep_loop: { delay: 0.05, frames: 13, looped: true },
+ sleep_end: { delay: 0.06, frames: 9, looped: false }
+ }
+ },
+ GJBeast05: {
+ defaultAnimation: "idle01",
+ animations: {
+ idle01: { delay: 0.06, frames: 13, looped: false },
+ idle02: { delay: 0.06, frames: 12, looped: false },
+ idle03: { delay: 0.06, frames: 9, looped: false },
+ toAttack01: { delay: 0.045, frames: 8, looped: false },
+ attack01: { delay: 0.06, frames: 13, looped: true },
+ attack02: { delay: 0.06, frames: 13, looped: false },
+ toAttack03: { delay: 0.045, frames: 8, looped: false },
+ attack03: { delay: 0.04, frames: 4, looped: true },
+ fromAttack03: { delay: 0.05, frames: 9, looped: false }
+ }
+ }
+};
+
+const BEAST_ANIM_NAMES_BY_ID = {
+ 918: ["bite", "attack01", "attack01_end", "idle01", "attack01_loop"],
+ 1584: ["idle01", "idle02", "idle03", "attack01", "attack02", "attack02_end", "sleep", "sleep_loop", "sleep_end", "attack02_loop"],
+ 2012: ["idle01", "idle02", "toAttack01", "attack01", "attack02", "toAttack03", "attack03", "idle03", "fromAttack03"]
+};
+
+const BEAST_ANIM_EYES = {
+ 918: { frame: "GJBeast01_03_001.png", parent: "GJBeast01_01_001.png" }
+};
+
+const BEAST_ANIM_30FPS_DELAY = 1 / 30;
+
+const BEAST_ANIM_UNIT_SCALE = 2;
+
+const BEAST_ANIM_TWEEN_TIME = 0.15;
+
+function beastAnimAnimDef(animName, base) {
+ const defs = BEAST_ANIM_DEFS[animName];
+ return (defs && defs.animations && defs.animations[base]) || null;
+}
+
+function beastAnimDelay(state) {
+ const def = beastAnimAnimDef(state.animName, state.base);
+ return def && Number.isFinite(def.delay) && def.delay > 0 ? def.delay : BEAST_ANIM_30FPS_DELAY;
+}
+
+function beastAnimFrameCount(state) {
+ const def = beastAnimAnimDef(state.animName, state.base);
+ const group = state.desc.groups[state.animName + "_" + state.base];
+ const available = group ? group.length : 0;
+ if (def && Number.isFinite(def.frames) && def.frames > 0) return Math.min(def.frames, available);
+ return available;
+}
+
+function beastAnimIsLoopingBase(state, base) {
+ const def = beastAnimAnimDef(state.animName, base);
+ if (def) return !!def.looped;
+ return typeof base === "string" && /_loop$/.test(base);
+}
+
+function beastAnimRandomizeTimer(state) {
+ if (!state) return;
+ state.rng = Math.random();
+ state.timer = state.rng * beastAnimDelay(state);
+}
+
+const beastAnimCache = {};
+
+function beastAnimParsePair(str, defX, defY) {
+ if (typeof str !== "string") return { x: defX, y: defY };
+ const m = str.match(/\{\s*([^,]+)\s*,\s*([^}]+)\s*\}/);
+ if (!m) return { x: defX, y: defY };
+ return { x: parseFloat(m[1]) || 0, y: parseFloat(m[2]) || 0 };
+}
+
+function beastAnimReadSceneDesc(descKey) {
+ try {
+ const sceneRef = window.scene;
+ const scene = sceneRef && sceneRef.systems && sceneRef.systems.scene ? sceneRef.systems.scene : sceneRef;
+ if (scene && scene.cache && scene.cache.json) return scene.cache.json.get(descKey) || null;
+ } catch (err) {}
+ return null;
+}
+
+function beastAnimGetDesc(animName) {
+ const key = animName;
+ if (beastAnimCache[key] !== undefined) return beastAnimCache[key];
+ let data = null;
+ try {
+ if (typeof window !== "undefined") data = window[animName + "_AnimDesc"] || null;
+ if (!data) {
+ data = beastAnimReadSceneDesc(animName + "_AnimDesc");
+ if (data && typeof window !== "undefined") window[animName + "_AnimDesc"] = data;
+ }
+ } catch (err) { data = null; }
+ if (!data && typeof BEAST_DESC_FALLBACK !== "undefined") data = null;
+ if (!data || !data.animationContainer) {
+ beastAnimCache[key] = null;
+ return null;
+ }
+ const groups = {};
+ const container = data.animationContainer;
+ for (const frameKey of Object.keys(container)) {
+ const m = frameKey.match(/^(.*?)_(\d+)\.png$/);
+ if (!m) continue;
+ const base = m[1];
+ if (!groups[base]) groups[base] = [];
+ groups[base].push(frameKey);
+ }
+ for (const base of Object.keys(groups)) {
+ groups[base].sort((a, b) => {
+ const na = parseInt((a.match(/_(\d+)\.png$/) || [0, 0])[1], 10) || 0;
+ const nb = parseInt((b.match(/_(\d+)\.png$/) || [0, 0])[1], 10) || 0;
+ return na - nb;
+ });
+ }
+ const desc = { raw: data, groups, container };
+ beastAnimCache[key] = desc;
+ return desc;
+}
+
+function beastAnimGetGroup(animName, base) {
+ const desc = beastAnimGetDesc(animName);
+ return desc ? (desc.groups[animName + "_" + base] || null) : null;
+}
+
+function beastAnimFrameExists(animName, base) {
+ const desc = beastAnimGetDesc(animName);
+ return !!(desc && desc.groups[animName + "_" + base] && desc.groups[animName + "_" + base].length);
+}
+
+function beastAnimResolveBase(id) {
+ return BEAST_ANIM_NAME_BY_ID[id] || null;
+}
+
+function beastAnimAnimNameForCommand(id, animIdx) {
+ const names = BEAST_ANIM_NAMES_BY_ID[id];
+ if (names && animIdx >= 0 && animIdx < names.length) return names[animIdx];
+ return null;
+}
+
+function beastAnimCreateState(objectId) {
+ const animName = beastAnimResolveBase(objectId);
+ if (!animName) return null;
+ const desc = beastAnimGetDesc(animName);
+ if (!desc) return null;
+ const state = {
+ objectId,
+ animName,
+ desc,
+ animId: 0,
+ base: null,
+ frameIdx: 0,
+ timer: 0,
+ rng: Math.random()
+ };
+ beastAnimDefaultBase(state);
+ return state;
+}
+
+function beastAnimSetBase(state, base, animId) {
+ const group = state.desc.groups[state.animName + "_" + base];
+ if (!group || !group.length) return false;
+ state.base = base;
+ state.frameIdx = 0;
+ state.timer = 0;
+ if (animId !== undefined) state.animId = animId;
+ return true;
+}
+
+function beastAnimFinishAction(state) {
+ const id = state.objectId;
+ const rnd = Math.random();
+ switch (id) {
+ case 918: {
+ const prev = state.base;
+ if (prev === "attack01") {
+ if (beastAnimFrameExists(state.animName, "attack01_loop")) {
+ beastAnimSetBase(state, "attack01_loop", 1);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ beastAnimSetBase(state, "bite", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (prev === "bite") return;
+ beastAnimSetBase(state, "idle01", 3);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ case 1327: {
+ if (rnd <= 0.75) beastAnimSetBase(state, "idle01", 0);
+ else beastAnimSetBase(state, "idle02", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ case 1328: {
+ if (rnd <= 0.9) beastAnimSetBase(state, "idle01", 0);
+ else beastAnimSetBase(state, "idle02", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ case 1584: {
+ const prev = state.base;
+ if (prev === "attack02") {
+ if (beastAnimFrameExists(state.animName, "attack02_loop")) {
+ beastAnimSetBase(state, "attack02_loop", 9);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ }
+ if (prev === "sleep") {
+ if (beastAnimFrameExists(state.animName, "sleep_loop")) {
+ beastAnimSetBase(state, "sleep_loop", 7);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ }
+ if (prev === "sleep_loop") {
+ if (beastAnimFrameExists(state.animName, "sleep_end")) {
+ beastAnimSetBase(state, "sleep_end", 8);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ }
+ if (prev === "sleep_end") {
+ beastAnimSetBase(state, "idle01", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (prev === "attack02_loop" || prev === "attack02_end") {
+ beastAnimSetBase(state, "idle01", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (prev === "attack01") {
+ beastAnimSetBase(state, "idle01", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (rnd <= 0.75) beastAnimSetBase(state, "idle01", 0);
+ else beastAnimSetBase(state, "idle02", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ case 2012: {
+ const prev = state.base;
+ if (prev === "toAttack03") {
+ beastAnimSetBase(state, "attack03", 6);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (prev === "fromAttack03" || prev === "attack02" || prev === "toAttack01") {
+ beastAnimSetBase(state, "attack01", 3);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (prev === "attack01" || prev === "attack03") {
+ if (rnd <= 0.75) beastAnimSetBase(state, "idle01", 0);
+ else beastAnimSetBase(state, "idle02", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ if (prev === "idle01") {
+ if (rnd <= 0.75) beastAnimSetBase(state, "idle01", 0);
+ else beastAnimSetBase(state, "idle02", 1);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ beastAnimSetBase(state, "idle01", 0);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ }
+ beastAnimSetBase(state, "idle01", 0);
+ beastAnimRandomizeTimer(state);
+}
+
+function beastAnimCommand(state, animIdx) {
+ const base = beastAnimAnimNameForCommand(state.objectId, animIdx);
+ if (!base || !beastAnimFrameExists(state.animName, base)) return false;
+ beastAnimSetBase(state, base, animIdx);
+ beastAnimRandomizeTimer(state);
+ return true;
+}
+
+function beastAnimDefaultBase(state) {
+ const id = state.objectId;
+ const defs = BEAST_ANIM_DEFS[state.animName];
+ const defaultAnim = defs && defs.defaultAnimation;
+ if (defaultAnim && beastAnimSetBase(state, defaultAnim)) {
+ const total = beastAnimFrameCount(state);
+ if (total > 1) state.frameIdx = Math.floor(Math.random() * total);
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ const def = BEAST_ANIM_DEFAULT_ANIM_ID[id];
+ if (def !== undefined) {
+ const base = beastAnimAnimNameForCommand(id, def);
+ if (base && beastAnimSetBase(state, base, def)) {
+ beastAnimRandomizeTimer(state);
+ return;
+ }
+ }
+ beastAnimSetBase(state, "idle01", 0);
+ const defGroup = state.desc.groups[state.animName + "_idle01"];
+ if (defGroup && defGroup.length > 1) {
+ state.frameIdx = Math.floor(Math.random() * defGroup.length);
+ }
+ beastAnimRandomizeTimer(state);
+}
+
+function beastAnimAdvance(state, dt) {
+ if (!state || !state.base) return;
+ if (!Number.isFinite(state.timer)) state.timer = 0;
+ if (!Number.isFinite(state.frameIdx)) state.frameIdx = 0;
+ if (!Number.isFinite(dt) || dt <= 0) return;
+ if (dt > 0.1) dt = 0.1;
+ state.timer += dt;
+ let guard = 0;
+ while (guard++ < 240) {
+ const delay = beastAnimDelay(state);
+ if (state.timer < delay) break;
+ state.timer -= delay;
+ state.frameIdx++;
+ const total = beastAnimFrameCount(state);
+ if (!total) {
+ beastAnimDefaultBase(state);
+ break;
+ }
+ if (state.frameIdx >= total) {
+ if (beastAnimIsLoopingBase(state, state.base)) {
+ state.frameIdx = 0;
+ continue;
+ }
+ beastAnimFinishAction(state);
+ break;
+ }
+ }
+}
+
+window.BeastAnim = {
+ IDS: BEAST_ANIM_OBJECT_IDS,
+ EYES: BEAST_ANIM_EYES,
+ eyeFor: function (objectId) { return BEAST_ANIM_EYES[objectId] || null; },
+ TWEEN_TIME: BEAST_ANIM_TWEEN_TIME,
+ UNIT_SCALE: BEAST_ANIM_UNIT_SCALE,
+ getDesc: beastAnimGetDesc,
+ frameExists: beastAnimFrameExists,
+ isLoopingBase: beastAnimIsLoopingBase,
+ animDef: beastAnimAnimDef,
+ delayFor: beastAnimDelay,
+ frameCount: beastAnimFrameCount,
+ createState: beastAnimCreateState,
+ setBase: beastAnimSetBase,
+ defaultBase: beastAnimDefaultBase,
+ command: beastAnimCommand,
+ advance: beastAnimAdvance,
+ animNameForCommand: beastAnimAnimNameForCommand,
+ resolveBase: beastAnimResolveBase,
+ parsePair: beastAnimParsePair
+};
diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js
index 06a32a59..4de7d249 100644
--- a/assets/scripts/core/game-scene.js
+++ b/assets/scripts/core/game-scene.js
@@ -431,12 +431,14 @@ class GameScene extends Phaser.Scene {
if (this._audio == null) {
this._audio = new AudioManager(this);
}
+ this._loadSettings();
if (window._onlineLevelString && window._onlineLevelId &&
window.currentlevel[2] === window._onlineLevelId) {
try {
this.cache.text.entries.set(window._onlineLevelId, window._onlineLevelString);
} catch(e) {}
}
+ this._syncBeastAnimDescs();
let _0x591888 = this.cache.text.get(window.currentlevel[2]);
if (!_0x591888 && window._onlineLevelString && window.currentlevel[2] === window._onlineLevelId) {
_0x591888 = window._onlineLevelString;
@@ -1133,7 +1135,7 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet"
if (songName && typeof songNameText !== "undefined" && songNameText) {
songNameText.setText(songName);
- this._fitBitmapText(songTitleText, songBoxW - 100);
+ this._fitBitmapText(songNameText, songBoxW - 100);
}
})
.catch(err => {
@@ -3892,7 +3894,6 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet"
this._buildHUD();
this._createStartPosGui();
- this._loadSettings();
document.addEventListener("visibilitychange", () => {
if (document.hidden) {
@@ -3958,6 +3959,7 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet"
const cachedLevelText = this.cache.text.get(window.currentlevel[2]) ||
((window._onlineLevelString && window.currentlevel[2] === window._onlineLevelId) ? window._onlineLevelString : null);
if (cachedLevelText) {
+ this._syncBeastAnimDescs();
this._level.loadLevel(cachedLevelText);
}
}
@@ -4689,7 +4691,7 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet"
fontSize: "28px",
fill: "#ffffff",
fontFamily: "Arial"
- }).setOrigin(1, 0).setScrollFactor(0).setDepth(999).setVisible(false);
+ }).setOrigin(1, 0).setScrollFactor(0).setDepth(999).setVisible(!!window.showFPS);
this._fpsAccum = 0;
this._fpsFrames = 0;
}
@@ -5560,6 +5562,13 @@ _buildSettingsPopup() {
localStorage.setItem("gd_settings", JSON.stringify(settings));
localStorage.setItem("gd_useDirectInternet", String(!!window.useDirectInternet));
}
+ _syncBeastAnimDescs() {
+ for (const beastKey of ["GJBeast01", "GJBeast02", "GJBeast03", "GJBeast04", "GJBeast05"]) {
+ const descKey = beastKey + "_AnimDesc";
+ window[descKey] = this.cache.json.get(descKey) || window[descKey] || null;
+ }
+ }
+
_loadSettings() {
const saved = localStorage.getItem("gd_settings");
const defaults = {
@@ -5597,7 +5606,8 @@ _buildSettingsPopup() {
window.showHitboxes = data.showHitboxes;
window.startPosSwitcher = data.startPosSwitcher;
window.showHitboxTrail = data.hitboxTrail;
- this._fpsText.visible = data.showFPS;
+ if (this._fpsText) this._fpsText.visible = data.showFPS;
+ window.showFPS = !!data.showFPS;
window.solidWave = data.solidWaveTrail;
window.noClipAccuracy = data.noclipAccuracy;
window.hitboxesOnDeath = data.hitboxesOnDeath;
@@ -7124,6 +7134,7 @@ _showwippopup() {
}
this._applyLevelStartOptions();
+ this._level.checkToggleTriggers?.(0);
}
_pushButton(ignoreMacro = false) {
const objectsUnderPointer = this.input.manager.hitTest(
@@ -7449,6 +7460,23 @@ _showwippopup() {
this._level.resetEnterEffectTriggers();
this._level.resetSpawnTriggers();
this._level.resetMoveTriggers();
+ this._level.resetStopTriggers?.();
+ this._level.resetFollowPlayerYTriggers?.();
+ this._level.resetFollowTriggers?.();
+ this._level.resetToggleTriggers?.();
+ this._level.resetAnimationTriggers?.();
+ this._level.resetShakeTriggers?.();
+ this._level.resetOnDeathTriggers?.();
+ this._level.resetTouchTriggers?.();
+ this._level.resetPickupTriggers?.();
+ this._level.resetCountTriggers?.();
+ this._level.resetInstantCountTriggers?.();
+ this._level.checkToggleTriggers?.(0);
+ this._level.checkPickupTriggers?.(0, this._colorManager);
+ this._level.checkCountTriggers?.(0, this._colorManager);
+ this._level.checkInstantCountTriggers?.(0, this._colorManager);
+ this._level.checkOnDeathTriggers?.(0);
+ this._level.checkTouchTriggers?.(0);
this._level.resetVisibility();
if (this._orbGfx) { this._orbGfx.clear(); }
this._colorManager.reset();
@@ -7762,13 +7790,31 @@ _showwippopup() {
this._level.resetEnterEffectTriggers();
this._level.resetSpawnTriggers();
this._level.resetMoveTriggers();
+ this._level.resetStopTriggers?.();
+ this._level.resetFollowPlayerYTriggers?.();
+ this._level.resetFollowTriggers?.();
+ this._level.resetToggleTriggers?.();
+ this._level.resetAnimationTriggers?.();
+ this._level.resetShakeTriggers?.();
+ this._level.resetOnDeathTriggers?.();
+ this._level.resetTouchTriggers?.();
+ this._level.resetPickupTriggers?.();
+ this._level.resetCountTriggers?.();
+ this._level.resetInstantCountTriggers?.();
+ this._level.checkToggleTriggers?.(checkpoint.x);
+ this._level.checkPickupTriggers?.(checkpoint.x, this._colorManager);
+ this._level.checkCountTriggers?.(checkpoint.x, this._colorManager);
+ this._level.checkInstantCountTriggers?.(checkpoint.x, this._colorManager);
+ this._level.checkOnDeathTriggers?.(checkpoint.x);
+ this._level.checkTouchTriggers?.(checkpoint.x);
this._level.resetVisibility();
- this._level.additiveContainer.x = -this._cameraX;
- this._level.additiveContainer.y = this._cameraY;
- this._level.container.x = -this._cameraX;
- this._level.container.y = this._cameraY;
- this._level.topContainer.x = -this._cameraX;
- this._level.topContainer.y = this._cameraY;
+ this._level.applyShakeToOffsets?.(this.time.now);
+ this._level.additiveContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.additiveContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.container.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.container.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.topContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.topContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
this._level.updateVisibility(this._cameraX);
this._level.updateObjectDebugIds();
this._updateBackground();
@@ -7827,12 +7873,13 @@ _showwippopup() {
const _0x56287b = this._cameraX;
this._cameraX = this._playerWorldX - centerX;
this._cameraXRef._v = this._cameraX;
- this._level.additiveContainer.x = -this._cameraX;
- this._level.additiveContainer.y = this._cameraY;
- this._level.container.x = -this._cameraX;
- this._level.container.y = this._cameraY;
- this._level.topContainer.x = -this._cameraX;
- this._level.topContainer.y = this._cameraY;
+ this._level.applyShakeToOffsets?.(this.time.now);
+ this._level.additiveContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.additiveContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.container.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.container.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.topContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.topContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
this._level.shiftGroundTiles(this._cameraX - _0x56287b);
this._level.updateGroundTiles(this._cameraY);
this._level.updateVisibility(this._cameraX);
@@ -7840,6 +7887,9 @@ _showwippopup() {
this._level.applyEnterEffects(this._cameraX);
const _0xde8a1a = this._playerWorldX - this._cameraX;
this._player.syncSprites(this._cameraX, this._cameraY, 0, this._getMirrorXOffset(_0xde8a1a));
+ if (this._level.shakeOffsetX || this._level.shakeOffsetY) {
+ this._player.applyShakeOffset(this._level.shakeOffsetX || 0, this._level.shakeOffsetY || 0);
+ }
this._applyMirrorEffect();
}
}
@@ -8035,7 +8085,7 @@ _showwippopup() {
}
this._cpsIndicator.setPosition(10, 10 + (window.noClip * 20) + (window.noClip && window.noClipAccuracy * 40));
- this._bottedIndicator.setVisible(this._macroBot?.playing);
+ this._bottedIndicator.setVisible(this._macroBot?.playing && !this._menuActive && !this._paused && !this._levelWon);
this._bottedIndicator.setPosition(10, 10 + (window.noClip * 20) + (window.noClip && window.noClipAccuracy * 40) + (window.showCPS * 20));
if (this._macroBtn){
this._macroBtn.setVisible(window.macroBot);
@@ -8139,12 +8189,15 @@ _showwippopup() {
const slidePlayerScreenX = this._playerWorldX - this._cameraX;
this._player.updateGroundRotation(slideDelta * d);
this._player.syncSprites(this._cameraX, this._cameraY, deltaTime / 1000, this._getMirrorXOffset(slidePlayerScreenX));
- this._level.additiveContainer.x = -this._cameraX;
- this._level.additiveContainer.y = this._cameraY;
- this._level.container.x = -this._cameraX;
- this._level.container.y = this._cameraY;
- this._level.topContainer.x = -this._cameraX;
- this._level.topContainer.y = this._cameraY;
+ if (this._level.shakeOffsetX || this._level.shakeOffsetY) {
+ this._player.applyShakeOffset(this._level.shakeOffsetX || 0, this._level.shakeOffsetY || 0);
+ }
+ this._level.additiveContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.additiveContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.container.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.container.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.topContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.topContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
this._level.updateVisibility(this._cameraX);
this._level.updateObjectDebugIds();
this._updateBackground();
@@ -8222,12 +8275,12 @@ _showwippopup() {
this._cameraY = visMaxSection.fromY + (visMaxSection.toY - visMaxSection.fromY) * visMaxSection.p;
}
this._cameraXRef._v = this._cameraX;
- this._level.additiveContainer.x = -this._cameraX;
- this._level.additiveContainer.y = this._cameraY;
- this._level.container.x = -this._cameraX;
- this._level.container.y = this._cameraY;
- this._level.topContainer.x = -this._cameraX;
- this._level.topContainer.y = this._cameraY;
+ this._level.additiveContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.additiveContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.container.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.container.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.topContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.topContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
this._updateBackground();
this._level.stepGroundAnimation(deltaTime / 1000);
this._level.updateGroundTiles(this._cameraY);
@@ -8236,6 +8289,7 @@ _showwippopup() {
}
if (this._state.isDead) {
if (!this._deathSoundPlayed) {
+ this._level.triggerOnDeath?.(this._colorManager);
if (!this._audio._shouldUsePracticeSong()) {
this._audio.stopMusic();
}
@@ -8329,6 +8383,121 @@ _showwippopup() {
_saw.rotation += deltaTime * sawRotationSpeed;
}
}
+ if (this._level && this._level._beastSprites && this._level._beastSprites.length) {
+ const dtSec = Number.isFinite(deltaTime) ? deltaTime / 1000 : 0;
+ for (const beast of this._level._beastSprites) {
+ if (!beast || !beast.state) continue;
+ if (beast.hiddenStatics) {
+ for (const hiddenSpr of beast.hiddenStatics) {
+ if (hiddenSpr.visible) hiddenSpr.setVisible(false);
+ if (hiddenSpr.active) hiddenSpr.active = false;
+ }
+ }
+ if (!beast.state.desc) continue;
+ if (!beast.state.base) window.BeastAnim.defaultBase(beast.state);
+ window.BeastAnim.advance(beast.state, dtSec);
+ const st = beast.state;
+ const group = st.desc.groups[st.animName + "_" + st.base];
+ if (!group || !group.length) continue;
+ const frameKey = group[Math.min(st.frameIdx, group.length - 1)];
+ const frame = st.desc.container[frameKey];
+ if (!frame) continue;
+ const flipSignX = beast.flipX ? -1 : 1;
+ const anchorSpr = beast.anchorSprite && beast.anchorSprite.active ? beast.anchorSprite : null;
+ let rigOffX = 0;
+ let rigOffY = 0;
+ let rigRot = 0;
+ if (anchorSpr && anchorSpr._eeGroups && anchorSpr._eeGroups.length && this._level._getCombinedGroupOffset) {
+ const groupMove = this._level._getCombinedGroupOffset(anchorSpr);
+ rigOffX = Number(groupMove.x) || 0;
+ rigOffY = Number(groupMove.y) || 0;
+ for (const gid of anchorSpr._eeGroups) {
+ const rotData = this._level._groupRotations ? this._level._groupRotations[gid] : null;
+ if (!rotData || !rotData.totalRad) continue;
+ rigRot += rotData.totalRad;
+ if (rotData.centerGroupId > 0 && this._level._getGroupCenter) {
+ const pivot = this._level._getGroupCenter(rotData.centerGroupId);
+ const pivotDX = beast.worldX + rigOffX - pivot.cx;
+ const pivotDY = beast.baseY + rigOffY - pivot.cy;
+ const pivotCos = Math.cos(rotData.totalRad);
+ const pivotSin = Math.sin(rotData.totalRad);
+ rigOffX = pivot.cx + pivotDX * pivotCos - pivotDY * pivotSin - beast.worldX;
+ rigOffY = pivot.cy + pivotDX * pivotSin + pivotDY * pivotCos - beast.baseY;
+ }
+ }
+ }
+ const rigCos = rigRot ? Math.cos(rigRot) : 1;
+ const rigSin = rigRot ? Math.sin(rigRot) : 0;
+ const frameParts = {};
+ for (const partKey of Object.keys(frame)) {
+ if (partKey.startsWith("sprite_")) frameParts[frame[partKey].texture] = true;
+ }
+ for (const tex of Object.keys(beast.partSprites)) {
+ if (frameParts[tex]) continue;
+ const idleSpr = beast.partSprites[tex];
+ idleSpr.scaleX = 0;
+ idleSpr.scaleY = 0;
+ const idleGlow = beast.partGlows ? beast.partGlows[tex] : null;
+ if (idleGlow) {
+ idleGlow.scaleX = 0;
+ idleGlow.scaleY = 0;
+ }
+ }
+ for (const partKey of Object.keys(frame)) {
+ if (!partKey.startsWith("sprite_")) continue;
+ const part = frame[partKey];
+ const spr = beast.partSprites[part.texture];
+ if (!spr) continue;
+ const pos = window.BeastAnim.parsePair(part.position, 0, 0);
+ const sc = window.BeastAnim.parsePair(part.scale, 1, 1);
+ const fl = window.BeastAnim.parsePair(part.flipped, 0, 0);
+ const rotDeg = parseFloat(part.rotation || "0") || 0;
+ const localX = pos.x * window.BeastAnim.UNIT_SCALE * beast.scale * flipSignX;
+ const localY = -pos.y * window.BeastAnim.UNIT_SCALE * beast.scale * (beast.flipY ? -1 : 1);
+ const rigLocalX = localX * rigCos - localY * rigSin;
+ const rigLocalY = localX * rigSin + localY * rigCos;
+ const worldX = beast.worldX + rigOffX + (rigLocalX * beast.rotCos - rigLocalY * beast.rotSin);
+ const worldY = beast.baseY + rigOffY + (rigLocalX * beast.rotSin + rigLocalY * beast.rotCos);
+ const effectDX = spr._eeEffectOffsetX || 0;
+ const effectDY = spr._eeEffectOffsetY || 0;
+ const effectScale = spr._eeEffectScale === undefined ? 1 : spr._eeEffectScale;
+ spr._eeEffectOffsetX = 0;
+ spr._eeEffectOffsetY = 0;
+ spr._eeEffectScale = 1;
+ let angle = rotDeg * Math.PI / 180;
+ if (beast.flipX !== beast.flipY) angle = -angle;
+ angle += Math.atan2(beast.rotSin, beast.rotCos) + rigRot;
+ spr.x = worldX + effectDX;
+ spr.y = worldY + effectDY;
+ spr.rotation = angle;
+ const partScaleX = sc.x * (fl.x ? -1 : 1) * (beast.flipX ? -1 : 1) * beast.scale * effectScale;
+ const partScaleY = sc.y * (fl.y ? -1 : 1) * (beast.flipY ? -1 : 1) * beast.scale * effectScale;
+ spr.scaleX = partScaleX;
+ spr.scaleY = partScaleY;
+ const zValue = parseFloat(part.zValue || "0") || 0;
+ spr._eeZDepthBase = spr._eeZDepthBase ?? spr._eeZDepth;
+ spr._eeZDepth = spr._eeZDepthBase + zValue * 0.001;
+ spr.depth = spr._eeZDepth;
+ const glowSpr = beast.partGlows ? beast.partGlows[part.texture] : null;
+ if (glowSpr) {
+ glowSpr.x = worldX + effectDX;
+ glowSpr.y = worldY + effectDY;
+ glowSpr.rotation = angle;
+ glowSpr.scaleX = partScaleX;
+ glowSpr.scaleY = partScaleY;
+ glowSpr._eeZDepth = spr._eeZDepth - 0.001;
+ glowSpr.depth = glowSpr._eeZDepth;
+ }
+ if (beast.eye && beast.eyeParent === part.texture) {
+ beast.eye.x = worldX + effectDX;
+ beast.eye.y = worldY + effectDY;
+ beast.eye.rotation = angle;
+ beast.eye.scaleX = partScaleX;
+ beast.eye.scaleY = partScaleY;
+ }
+ }
+ }
+ }
if (this._level && this._level._orbSprites) {
const gravityGuideRotation = (this._state?.gravityFlipped ? Math.PI : 0);
for (let _oSpr of this._level._orbSprites) {
@@ -8544,12 +8713,13 @@ _showwippopup() {
if (!this._endCameraOverride) {
this._updateCameraY(quantizedDelta);
}
- this._level.additiveContainer.x = -this._cameraX;
- this._level.additiveContainer.y = this._cameraY;
- this._level.container.x = -this._cameraX;
- this._level.container.y = this._cameraY;
- this._level.topContainer.x = -this._cameraX;
- this._level.topContainer.y = this._cameraY;
+ this._level.applyShakeToOffsets?.(this.time.now);
+ this._level.additiveContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.additiveContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.container.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.container.y = this._cameraY + (this._level.shakeOffsetY || 0);
+ this._level.topContainer.x = -this._cameraX + (this._level.shakeOffsetX || 0);
+ this._level.topContainer.y = this._cameraY + (this._level.shakeOffsetY || 0);
let playerX = this._playerWorldX;
const applyColorTrigger = (colorTrigger) => {
this._colorManager.triggerColor(colorTrigger.index, colorTrigger.color, colorTrigger.duration);
@@ -8587,9 +8757,107 @@ _showwippopup() {
this._level.stepMoveTriggers(deltaTime / 1000);
this._level.stepSpawnTriggers(deltaTime / 1000, this._colorManager);
this._level.checkAlphaTriggers(playerX);
+ if (this._level.checkTouchAlphaTriggers) {
+ this._level.checkTouchAlphaTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchAlphaTriggers(playerX, this._state2.y);
+ }
+ }
this._level.stepAlphaTriggers(deltaTime / 1000);
this._level.checkRotateTriggers(playerX);
this._level.stepRotateTriggers(deltaTime / 1000);
+ this._level.checkStopTriggers?.(playerX);
+ if (this._level.checkTouchStopTriggers) {
+ this._level.checkTouchStopTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchStopTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkFollowPlayerYTriggers?.(playerX);
+ if (this._level.checkTouchFollowPlayerYTriggers) {
+ this._level.checkTouchFollowPlayerYTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchFollowPlayerYTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.stepFollowPlayerYTriggers?.(deltaTime / 1000);
+ this._level.checkFollowTriggers?.(playerX);
+ if (this._level.checkTouchFollowTriggers) {
+ this._level.checkTouchFollowTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchFollowTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.stepFollowTriggers?.(deltaTime / 1000);
+ this._level.checkToggleTriggers?.(playerX);
+ this._level.checkAnimationTriggers?.(playerX);
+ if (this._level.checkTouchAnimationTriggers) {
+ this._level.checkTouchAnimationTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchAnimationTriggers(playerX, this._state2.y);
+ }
+ }
+ if (this._level.checkTouchToggleTriggers) {
+ this._level.checkTouchToggleTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchToggleTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkShakeTriggers?.(playerX);
+ if (this._level.checkTouchShakeTriggers) {
+ this._level.checkTouchShakeTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchShakeTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkOnDeathTriggers?.(playerX);
+ if (this._level.checkTouchOnDeathTriggers) {
+ this._level.checkTouchOnDeathTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchOnDeathTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkTouchTriggers?.(playerX);
+ if (this._level.checkTouchTouchTriggers) {
+ this._level.checkTouchTouchTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchTouchTriggers(playerX, this._state2.y);
+ }
+ }
+ const isHoldingInput = Boolean(this._state?.upKeyDown);
+ const isPressedInput = Boolean(this._state?.upKeyPressed);
+ let p2HoldingInput = false;
+ let p2PressedInput = false;
+ if (this._isDual && !this._state2?.isDead) {
+ p2HoldingInput = Boolean(this._state2?.upKeyDown);
+ p2PressedInput = Boolean(this._state2?.upKeyPressed);
+ }
+ if (!this._level.isTouchTriggerDualMode?.()) {
+ p2HoldingInput = false;
+ p2PressedInput = false;
+ }
+ this._level.stepTouchTriggers?.(isHoldingInput, isPressedInput, p2HoldingInput, p2PressedInput, this._colorManager);
+ this._level.checkPickupTriggers?.(playerX, this._colorManager);
+ if (this._level.checkTouchPickupTriggers) {
+ this._level.checkTouchPickupTriggers(playerX, this._state.y, this._colorManager);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchPickupTriggers(playerX, this._state2.y, this._colorManager);
+ }
+ }
+ this._level.checkCountTriggers?.(playerX, this._colorManager);
+ if (this._level.checkTouchCountTriggers) {
+ this._level.checkTouchCountTriggers(playerX, this._state.y, this._colorManager);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchCountTriggers(playerX, this._state2.y, this._colorManager);
+ }
+ }
+ this._level.checkInstantCountTriggers?.(playerX, this._colorManager);
+ if (this._level.checkTouchInstantCountTriggers) {
+ this._level.checkTouchInstantCountTriggers(playerX, this._state.y, this._colorManager);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchInstantCountTriggers(playerX, this._state2.y, this._colorManager);
+ }
+ }
this._level.checkPulseTriggers(playerX);
this._level.stepPulseTriggers(deltaTime / 1000, this._colorManager);
this._colorManager.step(deltaTime / 1000);
@@ -8617,6 +8885,12 @@ _showwippopup() {
if (this._isDual && !this._state2.isDead) {
this._player2.syncSprites(this._cameraX, this._cameraY, deltaTime / 1000, this._getMirrorXOffset(playerScreenX));
}
+ if (this._level.shakeOffsetX || this._level.shakeOffsetY) {
+ this._player.applyShakeOffset(this._level.shakeOffsetX || 0, this._level.shakeOffsetY || 0);
+ if (this._isDual && !this._state2.isDead) {
+ this._player2.applyShakeOffset(this._level.shakeOffsetX || 0, this._level.shakeOffsetY || 0);
+ }
+ }
this._applyMirrorEffect();
}
diff --git a/assets/scripts/core/level-editor.js b/assets/scripts/core/level-editor.js
index b9fb83fe..03cdaa75 100644
--- a/assets/scripts/core/level-editor.js
+++ b/assets/scripts/core/level-editor.js
@@ -640,6 +640,22 @@ class LevelEditor {
this._level.resetEnterEffectTriggers();
this._level.resetSpawnTriggers();
this._level.resetMoveTriggers();
+ this._level.resetStopTriggers?.();
+ this._level.resetFollowPlayerYTriggers?.();
+ this._level.resetFollowTriggers?.();
+ this._level.resetToggleTriggers?.();
+ this._level.resetShakeTriggers?.();
+ this._level.resetOnDeathTriggers?.();
+ this._level.resetTouchTriggers?.();
+ this._level.resetPickupTriggers?.();
+ this._level.resetCountTriggers?.();
+ this._level.resetInstantCountTriggers?.();
+ this._level.checkToggleTriggers?.(0);
+ this._level.checkPickupTriggers?.(0, this._colorManager);
+ this._level.checkCountTriggers?.(0, this._colorManager);
+ this._level.checkInstantCountTriggers?.(0, this._colorManager);
+ this._level.checkOnDeathTriggers?.(0);
+ this._level.checkTouchTriggers?.(0);
this._level.resetVisibility();
this._colorManager.reset();
@@ -1411,6 +1427,7 @@ class LevelEditor {
}
if (this._state.isDead) {
+ this._level.triggerOnDeath?.(this._colorManager);
this._drawEditorPlaytestTrailPoint();
this._stopEditorPlaytest(true);
return;
@@ -1471,6 +1488,81 @@ class LevelEditor {
this._level.stepAlphaTriggers(deltaTime / 1000);
this._level.checkRotateTriggers(playerX);
this._level.stepRotateTriggers(deltaTime / 1000);
+ this._level.checkStopTriggers?.(playerX);
+ if (this._level.checkTouchStopTriggers) {
+ this._level.checkTouchStopTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchStopTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkFollowPlayerYTriggers?.(playerX);
+ if (this._level.checkTouchFollowPlayerYTriggers) {
+ this._level.checkTouchFollowPlayerYTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchFollowPlayerYTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.stepFollowPlayerYTriggers?.(deltaTime / 1000);
+ this._level.checkFollowTriggers?.(playerX);
+ if (this._level.checkTouchFollowTriggers) {
+ this._level.checkTouchFollowTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchFollowTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.stepFollowTriggers?.(deltaTime / 1000);
+ this._level.checkToggleTriggers?.(playerX);
+ if (this._level.checkTouchToggleTriggers) {
+ this._level.checkTouchToggleTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchToggleTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkShakeTriggers?.(playerX);
+ if (this._level.checkTouchShakeTriggers) {
+ this._level.checkTouchShakeTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchShakeTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkOnDeathTriggers?.(playerX);
+ if (this._level.checkTouchOnDeathTriggers) {
+ this._level.checkTouchOnDeathTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchOnDeathTriggers(playerX, this._state2.y);
+ }
+ }
+ this._level.checkTouchTriggers?.(playerX);
+ if (this._level.checkTouchTouchTriggers) {
+ this._level.checkTouchTouchTriggers(playerX, this._state.y);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchTouchTriggers(playerX, this._state2.y);
+ }
+ }
+ const isHoldingInput = Boolean(this._state?.upKeyDown || (this._isDual && !this._state2?.isDead && this._state2?.upKeyDown));
+ const isPressedInput = Boolean(this._state?.upKeyPressed || (this._isDual && !this._state2?.isDead && this._state2?.upKeyPressed));
+ this._level.stepTouchTriggers?.(isHoldingInput, isPressedInput, this._colorManager);
+ this._level.checkPickupTriggers?.(playerX, this._colorManager);
+ if (this._level.checkTouchPickupTriggers) {
+ this._level.checkTouchPickupTriggers(playerX, this._state.y, this._colorManager);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchPickupTriggers(playerX, this._state2.y, this._colorManager);
+ }
+ }
+ this._level.checkCountTriggers?.(playerX, this._colorManager);
+ if (this._level.checkTouchCountTriggers) {
+ this._level.checkTouchCountTriggers(playerX, this._state.y, this._colorManager);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchCountTriggers(playerX, this._state2.y, this._colorManager);
+ }
+ }
+ this._level.checkInstantCountTriggers?.(playerX, this._colorManager);
+ if (this._level.checkTouchInstantCountTriggers) {
+ this._level.checkTouchInstantCountTriggers(playerX, this._state.y, this._colorManager);
+ if (this._isDual && !this._state2.isDead) {
+ this._level.checkTouchInstantCountTriggers(playerX, this._state2.y, this._colorManager);
+ }
+ }
this._level.checkPulseTriggers(playerX);
this._level.stepPulseTriggers(deltaTime / 1000, this._colorManager);
this._colorManager.step(deltaTime / 1000);
diff --git a/assets/scripts/core/level.js b/assets/scripts/core/level.js
index 087b3249..16abffdb 100644
--- a/assets/scripts/core/level.js
+++ b/assets/scripts/core/level.js
@@ -641,6 +641,7 @@ window.LevelObject = class LevelObject {
this._touchColorTriggerActivated = new Set();
this._touchSpawnTriggerActivated = new Set();
this._touchMoveTriggerActivated = new Set();
+ this._touchAlphaTriggerActivated = new Set();
this._audioScaleSprites = [];
this._editorTriggerVisuals = [];
this._orbSprites = [];
@@ -666,6 +667,50 @@ window.LevelObject = class LevelObject {
this._rotateTriggers = [];
this._rotateTriggerIdx = 0;
this._activeRotateTweens = [];
+ this._stopTriggers = [];
+ this._stopTriggerIdx = 0;
+ this._touchStopTriggerActivated = new Set();
+ this._followPlayerYTriggers = [];
+ this._followPlayerYTriggerIdx = 0;
+ this._activeFollowPlayerYTweens = [];
+ this._touchFollowPlayerYTriggerActivated = new Set();
+ this._followTriggers = [];
+ this._followTriggerIdx = 0;
+ this._activeFollowTweens = [];
+ this._touchFollowTriggerActivated = new Set();
+ this._toggleTriggers = [];
+ this._toggleTriggerIdx = 0;
+ this._touchToggleTriggerActivated = new Set();
+ this._animationTriggers = [];
+ this._animationTriggerIdx = 0;
+ this._touchAnimationTriggerActivated = new Set();
+ this._groupToggledOff = {};
+ this._shakeTriggers = [];
+ this._shakeTriggerIdx = 0;
+ this._touchShakeTriggerActivated = new Set();
+ this._shakeState = null;
+ this.shakeOffsetX = 0;
+ this.shakeOffsetY = 0;
+ this._beastSprites = [];
+ this._onDeathTriggers = [];
+ this._onDeathTriggerIdx = 0;
+ this._armedOnDeathTriggers = [];
+ this._touchOnDeathTriggerActivated = new Set();
+ this._touchTriggers = [];
+ this._touchTriggerIdx = 0;
+ this._activeTouchTriggers = [];
+ this._touchTouchTriggerActivated = new Set();
+ this._pickupTriggers = [];
+ this._pickupTriggerIdx = 0;
+ this._touchPickupTriggerActivated = new Set();
+ this._countTriggers = [];
+ this._countTriggerIdx = 0;
+ this._activeCountTriggers = [];
+ this._touchCountTriggerActivated = new Set();
+ this._instantCountTriggers = [];
+ this._instantCountTriggerIdx = 0;
+ this._touchInstantCountTriggerActivated = new Set();
+ this._itemCounts = {};
this._pulseTriggers = [];
this._pulseTriggerIdx = 0;
this._activePulses = [];
@@ -678,6 +723,7 @@ window.LevelObject = class LevelObject {
this._resetobject = {};
this._resetremovedobject = {};
this._groupOffsets = {};
+ this._groupRotations = {};
this._groupOpacity = {};
this._groupColliders = {};
this._sections = [];
@@ -915,6 +961,35 @@ window.LevelObject = class LevelObject {
break;
}
}
+
+ if (Array.isArray(this._toggleTriggers)) {
+ for (let trigger of this._toggleTriggers) {
+ if (trigger.touchTriggered || trigger.spawnTriggered || !this._isTriggerSaveObjectLive(trigger.uid)) continue;
+ if (trigger.x <= targetX) {
+ this._executeToggleTrigger(trigger);
+ } else {
+ break;
+ }
+ }
+ }
+
+ this.checkAnimationTriggers(targetX);
+
+ if (Array.isArray(this._pickupTriggers)) {
+ this.checkPickupTriggers(targetX, colorManager);
+ }
+ if (Array.isArray(this._countTriggers)) {
+ this.checkCountTriggers(targetX, colorManager);
+ }
+ if (Array.isArray(this._instantCountTriggers)) {
+ this.checkInstantCountTriggers(targetX, colorManager);
+ }
+ if (Array.isArray(this._onDeathTriggers)) {
+ this.checkOnDeathTriggers(targetX);
+ }
+ if (Array.isArray(this._touchTriggers)) {
+ this.checkTouchTriggers(targetX);
+ }
}
loadLevel(levelData) {
let {
@@ -949,6 +1024,12 @@ window.LevelObject = class LevelObject {
this._sourceLevelObjects = levelObjects;
this._spawnLevelObjects(levelObjects);
this._setUpSettings(settingslist);
+ this.checkToggleTriggers?.(0);
+ this.checkPickupTriggers?.(0);
+ this.checkCountTriggers?.(0);
+ this.checkInstantCountTriggers?.(0);
+ this.checkOnDeathTriggers?.(0);
+ this.checkTouchTriggers?.(0);
window.levelObjects = levelObjects;
window.settingslist = settingslist;
}
@@ -1136,6 +1217,7 @@ window.LevelObject = class LevelObject {
}
_setUpSettings(settingsStr) {
this._initialColors = {};
+ this._channelBlending = {};
this._backgroundId = null;
this._groundId = null;
if (!settingsStr) return;
@@ -1163,6 +1245,7 @@ window.LevelObject = class LevelObject {
g: parseInt(colorProps[2] || "255", 10),
b: parseInt(colorProps[3] || "255", 10)
};
+ this._channelBlending[channelId] = colorProps[15] === "1";
}
}
}
@@ -1685,15 +1768,20 @@ window.LevelObject = class LevelObject {
glow.setVisible(glowVisible);
}
};
- _addGlowSprite(scene, x, y, frameName, objectData, worldX, colorData = null, objectDef = null) {
+ _addGlowSprite(scene, x, y, frameName, objectData, worldX, colorData = null, objectDef = null, forceUnique = false) {
let glowFrameName = this._getGlowFrameName(frameName, objectData, objectDef);
if (!glowFrameName || glowFrameName === frameName) {
return;
}
const rotation = Number.isFinite(objectData?.rot) ? Number(objectData.rot) : 0;
- const glowKey = `${worldX ?? x}:${y}:${glowFrameName}:${Number(Math.round(rotation * 1000))}`;
+ let glowKey = `${worldX ?? x}:${y}:${glowFrameName}:${Number(Math.round(rotation * 1000))}`;
if (this._glowSpriteKeys.has(glowKey)) {
- return;
+ if (!forceUnique) {
+ return;
+ }
+ let suffix = 1;
+ while (this._glowSpriteKeys.has(`${glowKey}|${suffix}`)) suffix++;
+ glowKey = `${glowKey}|${suffix}`;
}
let glowSprite = addImageToScene(scene, x, y, glowFrameName);
if (glowSprite) {
@@ -2162,6 +2250,7 @@ window.LevelObject = class LevelObject {
this._alphaTriggers.push({
...triggerBase,
x: levelObj.x * 2,
+ y: levelObj.y * 2,
duration: parseFloat(_raw[10] ?? 0),
targetGroup: parseInt(_raw[51] ?? 0, 10),
targetOpacity: Math.max(0, Math.min(1, parseFloat(_raw[35] ?? 1)))
@@ -2241,6 +2330,155 @@ window.LevelObject = class LevelObject {
});
}
+ if (levelObj.id === 1616) {
+ const _raw = levelObj._raw;
+ this._stopTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10)
+ });
+ }
+
+ if (levelObj.id === 1814) {
+ const _raw = levelObj._raw;
+ this._followPlayerYTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ speed: Math.max(0, parseFloat(_raw[90] ?? 1)),
+ delay: Math.max(0, parseFloat(_raw[92] ?? 0)),
+ offset: parseFloat(_raw[105] ?? 0) * 2,
+ maxSpeed: Math.max(0, parseFloat(_raw[91] ?? 0)) * 2,
+ duration: Math.max(0, parseFloat(_raw[10] ?? 0))
+ });
+ }
+
+ if (levelObj.id === 1347) {
+ const _raw = levelObj._raw;
+ this._followTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ followGroup: parseInt(_raw[71] ?? 0, 10),
+ xMod: parseFloat(_raw[72] ?? 1),
+ yMod: parseFloat(_raw[73] ?? 1),
+ duration: Math.max(0, parseFloat(_raw[10] ?? 0))
+ });
+ }
+
+ if (levelObj.id === 1049) {
+ const _raw = levelObj._raw;
+ this._toggleTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ activate: String(_raw[56] ?? "0") === "1"
+ });
+ }
+
+ if (levelObj.id === 1520) {
+ const _raw = levelObj._raw;
+ this._shakeTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ duration: Math.max(0, parseFloat(_raw[10] ?? 0)),
+ strength: Math.max(0, parseFloat(_raw[75] ?? 1)),
+ interval: Math.max(0, parseFloat(_raw[84] ?? 0))
+ });
+ }
+
+ if (levelObj.id === 1585) {
+ const _raw = levelObj._raw;
+ this._animationTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ animateId: parseInt(_raw[76] ?? 0, 10)
+ });
+ }
+
+ if (levelObj.id === 1812) {
+ const _raw = levelObj._raw;
+ this._onDeathTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ activate: String(_raw[56] ?? "1") === "1"
+ });
+ }
+
+ if (levelObj.id === 1595) {
+ const _raw = levelObj._raw;
+ this._touchTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ toggleType: parseInt(_raw[56] ?? 0, 10),
+ dualTouch: String(_raw[81] ?? "0") === "1",
+ holdMode: String(_raw[82] ?? "0") === "1",
+ dualAction: parseInt(_raw[198] ?? 0, 10),
+ specialMode: parseInt(_raw[89] ?? 0, 10)
+ });
+ }
+
+ if (levelObj.id === 1817 && (levelObj._raw?.[80] !== undefined || levelObj._raw?.["80"] !== undefined)) {
+ const _raw = levelObj._raw;
+ this._pickupTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ itemId: parseInt(_raw[80] ?? 0, 10),
+ count: parseInt(_raw[77] ?? 1, 10)
+ });
+ }
+
+ if (levelObj.id === 1611) {
+ const _raw = levelObj._raw;
+ this._countTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ itemId: parseInt(_raw[80] ?? 0, 10),
+ targetCount: parseInt(_raw[77] ?? 0, 10),
+ activate: String(_raw[56] ?? "1") === "1",
+ multiActivate: String(_raw?.[104] ?? _raw?.["104"] ?? "0") === "1"
+ });
+ }
+
+ if (levelObj.id === 1811) {
+ const _raw = levelObj._raw;
+ this._instantCountTriggers.push({
+ ...triggerBase,
+ x: levelObj.x * 2,
+ y: levelObj.y * 2,
+ touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1",
+ targetGroup: parseInt(_raw[51] ?? 0, 10),
+ itemId: parseInt(_raw[80] ?? 0, 10),
+ targetCount: parseInt(_raw[77] ?? 0, 10),
+ activate: String(_raw[56] ?? "1") === "1",
+ comparison: parseInt(_raw[88] ?? 0, 10)
+ });
+ }
+
if ([31, 34].includes(levelObj.id)) {
this._startPositions.push({
x: 2 * levelObj.x,
@@ -2351,6 +2589,10 @@ window.LevelObject = class LevelObject {
spr._eeColorChannel = ch;
if (!this._colorChannelSprites[ch]) this._colorChannelSprites[ch] = [];
this._colorChannelSprites[ch].push(spr);
+ if (this._channelBlending && this._channelBlending[ch]) {
+ spr.setBlendMode(Phaser.BlendModes.ADD);
+ spr._eeChannelAdditive = true;
+ }
if (forceParentColor && spr._SawColor === undefined) {
spr._SawColor = ch;
}
@@ -2457,7 +2699,8 @@ window.LevelObject = class LevelObject {
}
if (objectDef && objectDef.type === ringType) {
- sprite.setScale(0.75);
+ sprite.setScale(0.75 * (Number(levelObj.scale) || 1));
+ sprite._eeBaseScale = 0.75 * (Number(levelObj.scale) || 1);
sprite._eeAudioScale = true;
sprite._orbId = levelObj.id;
this._orbSprites.push(sprite);
@@ -2468,7 +2711,8 @@ window.LevelObject = class LevelObject {
}
if (orbGlow) {
- orbGlow.setScale(0.75);
+ orbGlow.setScale(0.75 * (Number(levelObj.scale) || 1));
+ orbGlow._eeBaseScale = 0.75 * (Number(levelObj.scale) || 1);
orbGlow._eeAudioScale = true;
orbGlow._orbId = levelObj.id;
this._orbSprites.push(orbGlow);
@@ -2682,8 +2926,6 @@ window.LevelObject = class LevelObject {
this._addToSection(childSprite);
registerToGroups(childSprite, childWorldX, childBaseY);
registerObjectSprite(childSprite);
- registerAnimatedSprite(childSprite, childDef);
-
const childGlowEnabled = this._hasGlow(childDef, childObjectData) || this._hasGlow(objectDef, levelObj);
if (childGlowEnabled) {
const childGlowSprite = this._addGlowSprite(scene, spriteWorldX + childDx, baseY + childDy, childDef.frame, childObjectData, childWorldX, null, childVisualDef);
@@ -2720,7 +2962,8 @@ window.LevelObject = class LevelObject {
}
if (objectDef && objectDef.type === ringType && childDef.orbGuide) {
- childSprite.setScale(0.75);
+ childSprite.setScale(0.75 * (Number(levelObj.scale) || 1));
+ childSprite._eeBaseScale = 0.75 * (Number(levelObj.scale) || 1);
childSprite._orbId = levelObj.id;
childSprite._eeOrbGuide = true;
childSprite._OrbGuideGrav = !!(childDef.frame && /grav(?:ring|JumpRing)/.test(childDef.frame));
@@ -2771,6 +3014,10 @@ window.LevelObject = class LevelObject {
if (parseInt(levelObj.id ?? 0, 10) === 747) {
this._spawnTeleportExitPortalVisual(scene, levelObj, objectDef, linkedObjectId, registerObjectSprite, registerToGroups, registerColor, objZDepth, col1);
}
+
+ if (window.BeastAnim && window.BeastAnim.IDS.includes(parseInt(levelObj.id ?? 0, 10))) {
+ this._spawnBeastAnimation(scene, levelObj, objectDef, worldX, baseY, objZDepth, col1, linkedObjectId, registerObjectSprite, registerToGroups, registerColor);
+ }
}
if (objectDef && objectDef.portalParticle && frameName && !window.enableLDM && !window.isEditor && !scene?._editorPlaytestActive) {
@@ -3127,6 +3374,144 @@ window.LevelObject = class LevelObject {
return objectDef;
}
+ _spawnBeastAnimation(scene, levelObj, objectDef, worldX, baseY, objZDepth, col1, linkedObjectId, registerObjectSprite, registerToGroups, registerColor) {
+ const objectId = parseInt(levelObj.id ?? 0, 10);
+ const state = window.BeastAnim.createState(objectId);
+ if (!state) return;
+ const col2 = levelObj.color2 || (objectDef.default_detail_color_channel !== undefined ? objectDef.default_detail_color_channel : -1);
+ const objScale = Number(levelObj.scale) || 1;
+ const flipX = !!levelObj.flipX;
+ const flipY = !!levelObj.flipY;
+ const objRot = (levelObj.rot || 0) * Math.PI / 180;
+ const rotCos = Math.cos(objRot);
+ const rotSin = Math.sin(objRot);
+ const groupMap = {};
+ for (const frameKey of Object.keys(state.desc.container)) {
+ const frame = state.desc.container[frameKey];
+ for (const partKey of Object.keys(frame)) {
+ if (!partKey.startsWith("sprite_")) continue;
+ const tex = frame[partKey].texture;
+ if (tex && tex.endsWith(".png")) groupMap[tex] = true;
+ }
+ }
+ const eyeDef = window.BeastAnim.eyeFor ? window.BeastAnim.eyeFor(objectId) : null;
+ const childrenByFrame = new Map();
+ for (const childDef of (objectDef.children || [])) {
+ if (childDef && childDef.frame) childrenByFrame.set(childDef.frame, childDef);
+ }
+ const slotTextures = {};
+ const slotChildDef = {};
+ for (const frameKey of Object.keys(state.desc.container)) {
+ const frame = state.desc.container[frameKey];
+ for (const partKey of Object.keys(frame)) {
+ if (!partKey.startsWith("sprite_")) continue;
+ const partTex = frame[partKey].texture;
+ if (!partTex || !partTex.endsWith(".png")) continue;
+ if (!slotTextures[partKey]) slotTextures[partKey] = [];
+ if (!slotTextures[partKey].includes(partTex)) slotTextures[partKey].push(partTex);
+ const slotChild = childrenByFrame.get(partTex);
+ if (slotChild && !slotChildDef[partKey]) slotChildDef[partKey] = slotChild;
+ }
+ }
+ const detailPartDef = {};
+ for (const partKey of Object.keys(slotChildDef)) {
+ for (const partTex of slotTextures[partKey] || []) {
+ if (!detailPartDef[partTex]) detailPartDef[partTex] = slotChildDef[partKey];
+ }
+ }
+ const detailChannel = Number(col2) > 0 ? Number(col2) : 1011;
+ let eyeSprite = null;
+ const hiddenStatics = [];
+ const staticSprites = this.objectSprites[linkedObjectId] || [];
+ for (const staticSpr of staticSprites) {
+ if (!staticSpr || staticSpr._beastPartOf) continue;
+ const staticFrame = staticSpr.frame && staticSpr.frame.name;
+ if (!staticFrame) continue;
+ if (eyeDef && staticFrame === eyeDef.frame) {
+ eyeSprite = staticSpr;
+ staticSpr._beastManaged = true;
+ continue;
+ }
+ const baseFrame = staticFrame.replace("_glow_001.png", "_001.png");
+ if (!groupMap[staticFrame] && !groupMap[baseFrame]) continue;
+ staticSpr.setVisible(false);
+ staticSpr.active = false;
+ staticSpr._beastStaticHidden = true;
+ hiddenStatics.push(staticSpr);
+ }
+ const partSprites = {};
+ const partGlows = {};
+ const beastGlowEnabled = this._hasGlow(objectDef, levelObj);
+ for (const tex of Object.keys(groupMap)) {
+ const spr = addImageToScene(scene, worldX, baseY, tex);
+ if (!spr) continue;
+ spr.setOrigin(0.5, 0.5);
+ spr.x = worldX;
+ spr.y = baseY;
+ spr._eeLayer = 1;
+ spr._eeWorldX = worldX;
+ spr._eeBaseY = baseY;
+ spr._eeZDepth = objZDepth + 0.005;
+ spr._eeOrigAlpha = 1;
+ spr._beastPartOf = objectId;
+ spr._beastManaged = true;
+ const childDef = detailPartDef[tex];
+ const colorDef = childDef
+ ? {
+ ...childDef,
+ can_color: (childDef.black === true || childDef.tint === 0)
+ ? (childDef.can_color ?? objectDef.can_color)
+ : childDef.can_color
+ }
+ : objectDef;
+ if (colorDef.tint !== undefined) spr.setTint(colorDef.tint);
+ const partBlackDefault = colorDef.black === true || colorDef.tint === 0;
+ if (partBlackDefault) {
+ spr.setTint(0);
+ spr._isBlack = true;
+ spr._canColor = colorDef.can_color === true;
+ spr._blackDefault = spr._canColor && !(Number(levelObj.color1) > 0);
+ }
+ const partChannel = childDef && !partBlackDefault ? detailChannel : col1;
+ this._addToSection(spr);
+ registerColor(spr, partChannel);
+ registerToGroups(spr, worldX, baseY);
+ registerObjectSprite(spr);
+ partSprites[tex] = spr;
+ if (beastGlowEnabled) {
+ const glowSpr = this._addGlowSprite(scene, worldX, baseY, tex, { ...levelObj, rot: 0 }, worldX, null, null, true);
+ if (glowSpr) {
+ glowSpr._eeOrigAlpha = glowSpr.alpha;
+ glowSpr._eeZDepth = objZDepth + 0.002;
+ glowSpr._beastPartOf = objectId;
+ glowSpr._beastManaged = true;
+ registerColor(glowSpr, partChannel);
+ registerToGroups(glowSpr, worldX, baseY);
+ partGlows[tex] = glowSpr;
+ }
+ }
+ }
+ if (!Object.keys(partSprites).length) return;
+ this._beastSprites.push({
+ objectId,
+ state,
+ partSprites,
+ anchorSprite: partSprites[Object.keys(partSprites)[0]],
+ partGlows,
+ hiddenStatics,
+ eye: eyeSprite,
+ eyeParent: eyeDef ? eyeDef.parent : null,
+ worldX,
+ baseY,
+ scale: objScale,
+ flipX,
+ flipY,
+ rotCos,
+ rotSin
+ });
+ window.BeastAnim.defaultBase(state);
+ }
+
_spawnLevelObjects(_0x35f1ae) {
const unknownObjectIds = new Set();
this._lastObjectX = 0;
@@ -3153,6 +3538,17 @@ window.LevelObject = class LevelObject {
this._moveTriggers.sort((a, b) => a.x - b.x);
this._alphaTriggers.sort((a, b) => a.x - b.x);
this._rotateTriggers.sort((a, b) => a.x - b.x);
+ this._stopTriggers.sort((a, b) => a.x - b.x);
+ this._followPlayerYTriggers.sort((a, b) => a.x - b.x);
+ this._followTriggers.sort((a, b) => a.x - b.x);
+ this._toggleTriggers.sort((a, b) => a.x - b.x);
+ this._shakeTriggers.sort((a, b) => a.x - b.x);
+ this._onDeathTriggers.sort((a, b) => a.x - b.x);
+ this._touchTriggers.sort((a, b) => a.x - b.x);
+ this._animationTriggers.sort((a, b) => a.x - b.x);
+ this._pickupTriggers.sort((a, b) => a.x - b.x);
+ this._countTriggers.sort((a, b) => a.x - b.x);
+ this._instantCountTriggers.sort((a, b) => a.x - b.x);
this._pulseTriggers.sort((a, b) => a.x - b.x);
for (let si = 0; si < this._sectionContainers.length; si++) {
@@ -3565,7 +3961,10 @@ window.LevelObject = class LevelObject {
const _0x2171db = this._collisionSections[_0xe2cbfa];
if (_0x2171db) {
for (let _0x5cdca9 = 0; _0x5cdca9 < _0x2171db.length; _0x5cdca9++) {
- _0x28a7c0.push(_0x2171db[_0x5cdca9]);
+ const col = _0x2171db[_0x5cdca9];
+ if (col && !col.disabled && col.active !== false) {
+ _0x28a7c0.push(col);
+ }
}
}
}
@@ -3600,6 +3999,12 @@ window.LevelObject = class LevelObject {
return [...new Set(sprites)].filter(spr => spr && spr.active);
}
+ _getAllGroupSprites(groupId) {
+ const sprites = this._groupSprites?.[groupId];
+ if (!sprites || !sprites.length) return [];
+ return [...new Set(sprites)].filter(Boolean);
+ }
+
_getUniqueGroupColliders(groupId) {
const colliders = this._groupColliders?.[groupId];
if (!colliders || !colliders.length) return [];
@@ -3611,6 +4016,7 @@ window.LevelObject = class LevelObject {
return [...new Set(groups.map(gid => parseInt(gid, 10)).filter(gid => Number.isFinite(gid) && gid > 0))];
}
+
_getCombinedGroupOffset(obj) {
const result = { x: 0, y: 0 };
for (const gid of this._getObjectGroupIds(obj)) {
@@ -3622,6 +4028,92 @@ window.LevelObject = class LevelObject {
return result;
}
+ _getGroupCenter(groupId) {
+ const sprites = this._getUniqueGroupSprites(groupId);
+ let cx = 0, cy = 0, n = 0;
+ for (const cs of sprites) {
+ if (!cs || !cs.active) continue;
+ const off = this._getCombinedGroupOffset(cs);
+ cx += (cs._eeInitialWorldX !== undefined ? cs._eeInitialWorldX : (cs._eeWorldX ?? cs.x)) + off.x;
+ cy += (cs._eeInitialBaseY !== undefined ? cs._eeInitialBaseY : (cs._eeBaseY ?? cs.y)) + off.y;
+ n++;
+ }
+ return n > 0 ? { cx: cx / n, cy: cy / n } : { cx: 0, cy: 0 };
+ }
+
+ _applyGroupedSpriteTransform(spr) {
+ if (!spr || !spr.active) return;
+ const initialX = spr._eeInitialWorldX !== undefined ? spr._eeInitialWorldX : (spr._origWorldX ?? spr.x);
+ const initialY = spr._eeInitialBaseY !== undefined ? spr._eeInitialBaseY : (spr._origBaseY ?? spr.y);
+ const moveOff = this._getCombinedGroupOffset(spr);
+ let finalX = initialX + moveOff.x;
+ let finalY = initialY + moveOff.y;
+ let hasRotation = false;
+ let finalRot = spr._eeInitialRotationRad !== undefined ? spr._eeInitialRotationRad : 0;
+ for (const gid of this._getObjectGroupIds(spr)) {
+ const rotData = this._groupRotations?.[gid];
+ if (!rotData || rotData.totalRad === 0) continue;
+ hasRotation = true;
+ if (!rotData.lockRotation) finalRot += rotData.totalRad;
+ if (rotData.centerGroupId > 0) {
+ const { cx, cy } = this._getGroupCenter(rotData.centerGroupId);
+ const dx = finalX - cx;
+ const dy = finalY - cy;
+ const cosR = Math.cos(rotData.totalRad);
+ const sinR = Math.sin(rotData.totalRad);
+ finalX = cx + dx * cosR - dy * sinR;
+ finalY = cy + dx * sinR + dy * cosR;
+ }
+ }
+ spr.x = finalX;
+ spr.y = finalY;
+ if (hasRotation) spr.rotation = finalRot;
+ spr._eeWorldX = finalX;
+ spr._eeBaseY = finalY;
+ this._refreshSpriteSection(spr);
+ if (spr._coinWorldX !== undefined) spr._coinWorldX = spr.x / 2;
+ if (spr._coinWorldY !== undefined) spr._coinWorldY = (460 - spr.y) / 2;
+ }
+
+ _applyGroupedColliderTransform(col) {
+ if (!col) return;
+ const initialX = col._eeInitialBaseX !== undefined ? col._eeInitialBaseX : (col._origBaseX ?? col.x);
+ const initialY = col._eeInitialBaseY !== undefined ? col._eeInitialBaseY : (col._origBaseY ?? col.y);
+ const initialRotDeg = col._eeInitialRotationDegrees !== undefined ? col._eeInitialRotationDegrees : 0;
+ const moveOff = this._getCombinedGroupOffset(col);
+ let finalX = initialX + moveOff.x;
+ let finalY = initialY - moveOff.y;
+ let hasRotation = false;
+ let finalRotDeg = initialRotDeg;
+ for (const gid of this._getObjectGroupIds(col)) {
+ const rotData = this._groupRotations?.[gid];
+ if (!rotData || rotData.totalRad === 0) continue;
+ hasRotation = true;
+ if (!rotData.lockRotation) finalRotDeg += rotData.totalRad * 180 / Math.PI;
+ if (rotData.centerGroupId > 0) {
+ const { cx, cy } = this._getGroupCenter(rotData.centerGroupId);
+ const collisionCy = this._screenYToCollisionY(cy);
+ const dx = finalX - cx;
+ const dy = finalY - collisionCy;
+ const collisionRot = -rotData.totalRad;
+ const cosR = Math.cos(collisionRot);
+ const sinR = Math.sin(collisionRot);
+ finalX = cx + dx * cosR - dy * sinR;
+ finalY = collisionCy + dx * sinR + dy * cosR;
+ }
+ }
+ col.x = finalX;
+ col.y = finalY;
+ col._baseX = finalX;
+ col._baseY = finalY;
+ if (hasRotation) {
+ col.rotationDegrees = finalRotDeg;
+ col._baseRotationDegrees = finalRotDeg;
+ if (col._origRotationDegrees !== undefined) col._origRotationDegrees = finalRotDeg;
+ }
+ this._refreshCollisionSection(col);
+ }
+
_ensureSpriteMoveBase(spr) {
if (!spr) return;
if (spr._eeMoveBaseWorldX === undefined) {
@@ -3635,32 +4127,10 @@ window.LevelObject = class LevelObject {
}
_applyGroupedSpriteMoveOffset(spr) {
- if (!spr || !spr.active) return;
- this._ensureSpriteMoveBase(spr);
- const off = this._getCombinedGroupOffset(spr);
- spr.x = spr._eeMoveBaseWorldX + off.x;
- spr.y = spr._eeMoveBaseBaseY + off.y;
- spr._eeWorldX = spr.x;
- spr._eeBaseY = spr.y;
- this._refreshSpriteSection(spr);
- if (spr._coinWorldX !== undefined) {
- spr._coinWorldX = spr.x / 2;
- }
- if (spr._coinWorldY !== undefined) {
- spr._coinWorldY = (460 - spr.y) / 2;
- }
+ this._applyGroupedSpriteTransform(spr);
}
- _syncSpriteMoveBaseFromCurrent(spr) {
- if (!spr || !spr.active) return;
- const off = this._getCombinedGroupOffset(spr);
- const wx = spr._eeWorldX !== undefined ? spr._eeWorldX : spr.x;
- const wy = spr._eeBaseY !== undefined ? spr._eeBaseY : spr.y;
- spr._eeMoveBaseWorldX = wx - off.x;
- spr._eeMoveBaseBaseY = wy - off.y;
- spr._origWorldX = spr._eeMoveBaseWorldX;
- spr._origBaseY = spr._eeMoveBaseBaseY;
- }
+ _syncSpriteMoveBaseFromCurrent(spr) {}
_ensureColliderMoveBase(col) {
if (!col) return;
@@ -3675,24 +4145,10 @@ window.LevelObject = class LevelObject {
}
_applyGroupedColliderMoveOffset(col) {
- if (!col) return;
- this._ensureColliderMoveBase(col);
- const off = this._getCombinedGroupOffset(col);
- col.x = col._eeMoveBaseX + off.x;
- col.y = col._eeMoveBaseY - off.y;
- col._baseX = col.x;
- col._baseY = col.y;
- this._refreshCollisionSection(col);
+ this._applyGroupedColliderTransform(col);
}
- _syncColliderMoveBaseFromCurrent(col) {
- if (!col) return;
- const off = this._getCombinedGroupOffset(col);
- col._eeMoveBaseX = col.x - off.x;
- col._eeMoveBaseY = col.y + off.y;
- col._origBaseX = col._eeMoveBaseX;
- col._origBaseY = col._eeMoveBaseY;
- }
+ _syncColliderMoveBaseFromCurrent(col) {}
_startMoveTriggerTween(trig) {
if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
@@ -3799,11 +4255,12 @@ window.LevelObject = class LevelObject {
this._activeMoveTweens = [];
this._touchMoveTriggerActivated = new Set();
this._groupOffsets = {};
+ this._groupRotations = {};
const seenSprites = new Set();
for (const gid in this._groupSprites) {
for (const spr of this._groupSprites[gid]) {
- if (!spr || !spr.active || seenSprites.has(spr)) continue;
+ if (!spr || seenSprites.has(spr)) continue;
seenSprites.add(spr);
const baseX = spr._eeInitialWorldX !== undefined ? spr._eeInitialWorldX : (spr._origWorldX ?? spr.x);
const baseY = spr._eeInitialBaseY !== undefined ? spr._eeInitialBaseY : (spr._origBaseY ?? spr.y);
@@ -3943,8 +4400,19 @@ window.LevelObject = class LevelObject {
for (const trig of spawnMatches(this._moveTriggers)) this._startMoveTriggerTween(trig);
for (const trig of spawnMatches(this._alphaTriggers)) this._startAlphaTriggerTween(trig);
for (const trig of spawnMatches(this._rotateTriggers)) this._startRotateTriggerTween(trig);
+ for (const trig of spawnMatches(this._stopTriggers)) this._executeStopTrigger(trig);
+ for (const trig of spawnMatches(this._followPlayerYTriggers)) this._startFollowPlayerYTween(trig);
+ for (const trig of spawnMatches(this._followTriggers)) this._startFollowTriggerTween(trig);
+ for (const trig of spawnMatches(this._toggleTriggers)) this._executeToggleTrigger(trig);
+ for (const trig of spawnMatches(this._animationTriggers)) this._executeAnimationTrigger(trig);
+ for (const trig of spawnMatches(this._shakeTriggers)) this._executeShakeTrigger(trig);
for (const trig of spawnMatches(this._pulseTriggers)) this._startPulseTrigger(trig);
for (const trig of spawnMatches(this._spawnTriggers)) this._queueSpawnTrigger(trig);
+ for (const trig of spawnMatches(this._onDeathTriggers)) this._armOnDeathTrigger(trig);
+ for (const trig of spawnMatches(this._touchTriggers)) this._armTouchTrigger(trig);
+ for (const trig of spawnMatches(this._pickupTriggers)) this._executePickupTrigger(trig, colorManager);
+ for (const trig of spawnMatches(this._countTriggers)) this._armCountTrigger(trig, colorManager);
+ for (const trig of spawnMatches(this._instantCountTriggers)) this._executeInstantCountTrigger(trig, colorManager);
}
checkTouchSpawnTriggers(playerX, playerY) {
@@ -3994,11 +4462,30 @@ window.LevelObject = class LevelObject {
while (this._alphaTriggerIdx < this._alphaTriggers.length) {
const trig = this._alphaTriggers[this._alphaTriggerIdx];
if (trig.x > playerX) break;
- if (!trig.spawnTriggered) this._startAlphaTriggerTween(trig);
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._startAlphaTriggerTween(trig);
this._alphaTriggerIdx++;
}
}
+ checkTouchAlphaTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchAlphaTriggerActivated ||= new Set();
+
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+
+ for (const trig of this._alphaTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchAlphaTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchAlphaTriggerActivated.add(uid);
+ this._startAlphaTriggerTween(trig);
+ }
+ }
+ }
+
stepAlphaTriggers(dt) {
let i = 0;
while (i < this._activeAlphaTweens.length) {
@@ -4040,6 +4527,7 @@ window.LevelObject = class LevelObject {
resetAlphaTriggers() {
this._alphaTriggerIdx = 0;
this._activeAlphaTweens = [];
+ this._touchAlphaTriggerActivated = new Set();
this._groupOpacity = {};
for (const gid in this._groupSprites) {
for (const spr of this._groupSprites[gid]) {
@@ -4077,120 +4565,887 @@ window.LevelObject = class LevelObject {
const prevSample = Easing.sample(trig.easingType, trig.easingRate, anim.prevProgress);
const deltaRot = (curSample - prevSample) * anim.totalRad;
anim.prevProgress = progress;
+
+ if (!this._groupRotations[trig.targetGroup]) {
+ this._groupRotations[trig.targetGroup] = { totalRad: 0, centerGroupId: trig.centerGroup || 0, lockRotation: !!trig.lockRotation };
+ }
+ const rotState = this._groupRotations[trig.targetGroup];
+ rotState.totalRad += deltaRot;
+ rotState.centerGroupId = trig.centerGroup || 0;
+ rotState.lockRotation = !!trig.lockRotation;
+
const sprites = this._getUniqueGroupSprites(trig.targetGroup);
const colliders = this._getUniqueGroupColliders(trig.targetGroup);
- if (trig.centerGroup > 0) {
- const centerSprites = this._getUniqueGroupSprites(trig.centerGroup);
- if (centerSprites && centerSprites.length > 0) {
- let cx = 0, cy = 0, cn = 0;
- for (const cs of centerSprites) {
- if (!cs || !cs.active) continue;
- cx += cs._eeWorldX !== undefined ? cs._eeWorldX : cs.x;
- cy += cs._eeBaseY !== undefined ? cs._eeBaseY : cs.y;
- cn++;
- }
- if (cn > 0) {
- cx /= cn; cy /= cn;
- const cosD = Math.cos(deltaRot), sinD = Math.sin(deltaRot);
- if (sprites) {
- for (const spr of sprites) {
- if (!spr || !spr.active) continue;
- const bx = spr._eeWorldX !== undefined ? spr._eeWorldX : spr.x;
- const by = spr._eeBaseY !== undefined ? spr._eeBaseY : spr.y;
- const dx = bx - cx, dy = by - cy;
- spr._eeWorldX = cx + dx * cosD - dy * sinD;
- spr._eeBaseY = cy + dx * sinD + dy * cosD;
- spr.x = spr._eeWorldX;
- spr.y = spr._eeBaseY;
- this._syncSpriteMoveBaseFromCurrent(spr);
- if (!trig.lockRotation) spr.rotation += deltaRot;
- this._refreshSpriteSection(spr);
- }
- }
- if (colliders) {
- for (const col of colliders) {
- this._applyRotateTriggerColliderDelta(col, deltaRot, cx, cy, !!trig.lockRotation);
- }
- }
- }
- }
- } else {
- if (sprites && !trig.lockRotation) {
- for (const spr of sprites) {
- if (!spr || !spr.active) continue;
- spr.rotation += deltaRot;
- }
- }
- if (colliders) {
- for (const col of colliders) {
- this._applyRotateTriggerColliderDelta(col, deltaRot, null, null, !!trig.lockRotation);
- }
- }
+ for (const spr of sprites) {
+ this._applyGroupedSpriteTransform(spr);
}
- if (progress >= 1) {
- this._activeRotateTweens.splice(i, 1);
- } else {
- i++;
+ for (const col of colliders) {
+ this._applyGroupedColliderTransform(col);
}
- }
- }
- resetRotateTriggers() {
- this._rotateTriggerIdx = 0;
- this._activeRotateTweens = [];
- const seenSprites = new Set();
- for (const gid in this._groupSprites) {
- for (const spr of this._groupSprites[gid]) {
- if (!spr || !spr.active || seenSprites.has(spr)) continue;
- seenSprites.add(spr);
- if (spr._eeInitialWorldX !== undefined) {
- spr.x = spr._eeInitialWorldX;
- spr._eeWorldX = spr._eeInitialWorldX;
- spr._origWorldX = spr._eeInitialWorldX;
- spr._eeMoveBaseWorldX = spr._eeInitialWorldX;
- }
- if (spr._eeInitialBaseY !== undefined) {
- spr.y = spr._eeInitialBaseY;
- spr._eeBaseY = spr._eeInitialBaseY;
- spr._origBaseY = spr._eeInitialBaseY;
- spr._eeMoveBaseBaseY = spr._eeInitialBaseY;
- }
- if (spr._eeInitialRotationRad !== undefined) spr.rotation = spr._eeInitialRotationRad;
- this._refreshSpriteSection(spr);
+ if (progress >= 1) {
+ this._activeRotateTweens.splice(i, 1);
+ } else {
+ i++;
}
}
+ }
- const seenColliders = new Set();
- for (const gid in this._groupColliders) {
- for (const col of this._groupColliders[gid]) {
- if (!col || seenColliders.has(col)) continue;
- seenColliders.add(col);
- if (col._eeInitialBaseX !== undefined) {
- col.x = col._eeInitialBaseX;
- col._baseX = col._eeInitialBaseX;
- col._origBaseX = col._eeInitialBaseX;
- col._eeMoveBaseX = col._eeInitialBaseX;
- }
- if (col._eeInitialBaseY !== undefined) {
- col.y = col._eeInitialBaseY;
- col._baseY = col._eeInitialBaseY;
- col._origBaseY = col._eeInitialBaseY;
- col._eeMoveBaseY = col._eeInitialBaseY;
- }
- if (col._eeInitialRotationDegrees !== undefined) {
- col.rotationDegrees = col._eeInitialRotationDegrees;
- col._baseRotationDegrees = col._eeInitialRotationDegrees;
- col._origRotationDegrees = col._eeInitialRotationDegrees;
- }
- this._refreshCollisionSection(col);
- }
- }
+ _executeStopTrigger(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const targetGroup = parseInt(trig.targetGroup ?? 0, 10);
+ if (!Number.isFinite(targetGroup) || targetGroup <= 0) return;
+
+ this._activeMoveTweens = this._activeMoveTweens.filter(anim => anim?.trig?.targetGroup !== targetGroup);
+ this._activeRotateTweens = this._activeRotateTweens.filter(anim => anim?.trig?.targetGroup !== targetGroup);
+ this._activeFollowPlayerYTweens = this._activeFollowPlayerYTweens.filter(anim => anim?.trig?.targetGroup !== targetGroup);
+ this._activeFollowTweens = this._activeFollowTweens.filter(anim => anim?.trig?.targetGroup !== targetGroup);
}
- checkPulseTriggers(playerX) {
- if (window.enableLDM) return;
- while (this._pulseTriggerIdx < this._pulseTriggers.length) {
- const trig = this._pulseTriggers[this._pulseTriggerIdx];
+ checkStopTriggers(playerX) {
+ while (this._stopTriggerIdx < this._stopTriggers.length) {
+ const trig = this._stopTriggers[this._stopTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._executeStopTrigger(trig);
+ this._stopTriggerIdx++;
+ }
+ }
+
+ checkTouchStopTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchStopTriggerActivated ||= new Set();
+
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+
+ for (const trig of this._stopTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchStopTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchStopTriggerActivated.add(uid);
+ this._executeStopTrigger(trig);
+ }
+ }
+ }
+
+ resetStopTriggers() {
+ this._stopTriggerIdx = 0;
+ this._touchStopTriggerActivated = new Set();
+ }
+
+ _startFollowPlayerYTween(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const targetGroup = parseInt(trig.targetGroup ?? 0, 10);
+ if (!Number.isFinite(targetGroup) || targetGroup <= 0) return;
+ if (!this._groupOffsets[targetGroup]) {
+ this._groupOffsets[targetGroup] = { x: 0, y: 0 };
+ }
+ const sprites = this._getUniqueGroupSprites(targetGroup);
+ let groupInitialGDY = 0, n = 0;
+ for (const spr of sprites) {
+ if (!spr) continue;
+ const initialScreenY = spr._eeInitialBaseY !== undefined ? spr._eeInitialBaseY : (spr._origBaseY ?? spr.y);
+ groupInitialGDY += (typeof b === "function" ? b(initialScreenY) : (460 - initialScreenY));
+ n++;
+ }
+ if (n === 0) {
+ const colliders = this._getUniqueGroupColliders(targetGroup);
+ for (const col of colliders) {
+ if (!col) continue;
+ const initialWorldY = col._eeInitialBaseY !== undefined ? col._eeInitialBaseY : (col._origBaseY ?? col.y);
+ groupInitialGDY += Number(initialWorldY) || 0;
+ n++;
+ }
+ }
+ groupInitialGDY = n > 0 ? groupInitialGDY / n : 0;
+ this._activeFollowPlayerYTweens.push({
+ trig,
+ elapsed: 0,
+ history: [],
+ groupInitialGDY
+ });
+ }
+
+ checkFollowPlayerYTriggers(playerX) {
+ while (this._followPlayerYTriggerIdx < this._followPlayerYTriggers.length) {
+ const trig = this._followPlayerYTriggers[this._followPlayerYTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._startFollowPlayerYTween(trig);
+ this._followPlayerYTriggerIdx++;
+ }
+ }
+
+ checkTouchFollowPlayerYTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchFollowPlayerYTriggerActivated ||= new Set();
+
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+
+ for (const trig of this._followPlayerYTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchFollowPlayerYTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchFollowPlayerYTriggerActivated.add(uid);
+ this._startFollowPlayerYTween(trig);
+ }
+ }
+ }
+
+ stepFollowPlayerYTriggers(dt) {
+ if (!this._activeFollowPlayerYTweens || !this._activeFollowPlayerYTweens.length) return;
+ const pos = this._getMoveTriggerPlayerPosition();
+ const currentPy = pos.playerY;
+
+ let i = 0;
+ while (i < this._activeFollowPlayerYTweens.length) {
+ const anim = this._activeFollowPlayerYTweens[i];
+ const { trig } = anim;
+ anim.elapsed += dt;
+
+ anim.history.push({ time: anim.elapsed, y: currentPy });
+ const targetTime = anim.elapsed - trig.delay;
+ while (anim.history.length > 2 && anim.history[1].time <= targetTime) {
+ anim.history.shift();
+ }
+ let targetPlayerY = anim.history[0]?.y ?? currentPy;
+ if (anim.history.length >= 2 && anim.history[0].time <= targetTime && targetTime <= anim.history[1].time) {
+ const t0 = anim.history[0].time;
+ const t1 = anim.history[1].time;
+ const span = t1 - t0;
+ const alpha = span > 0 ? (targetTime - t0) / span : 0;
+ targetPlayerY = anim.history[0].y + (anim.history[1].y - anim.history[0].y) * alpha;
+ }
+
+ if (!this._groupOffsets[trig.targetGroup]) {
+ this._groupOffsets[trig.targetGroup] = { x: 0, y: 0 };
+ }
+ const off = this._groupOffsets[trig.targetGroup];
+
+ const currentGDY = anim.groupInitialGDY - off.y;
+ const targetGDY = targetPlayerY + trig.offset;
+ const diffGD = targetGDY - currentGDY;
+
+ const rate = Math.min(1.0, Math.max(0.0, dt * 60.0 * trig.speed));
+ let stepGD = diffGD * rate;
+ if (trig.maxSpeed > 0) {
+ const maxStep = trig.maxSpeed * dt * 60.0;
+ if (Math.abs(stepGD) > maxStep) {
+ stepGD = Math.sign(stepGD) * maxStep;
+ }
+ }
+
+ off.y -= stepGD;
+
+ const sprites = this._getUniqueGroupSprites(trig.targetGroup);
+ const colliders = this._getUniqueGroupColliders(trig.targetGroup);
+ for (const spr of sprites) {
+ this._applyGroupedSpriteMoveOffset(spr);
+ }
+ for (const col of colliders) {
+ this._applyGroupedColliderMoveOffset(col);
+ }
+
+ if (trig.duration > 0 && anim.elapsed >= trig.duration) {
+ this._activeFollowPlayerYTweens.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ }
+
+ resetFollowPlayerYTriggers() {
+ this._followPlayerYTriggerIdx = 0;
+ this._activeFollowPlayerYTweens = [];
+ this._touchFollowPlayerYTriggerActivated = new Set();
+ }
+
+ _startFollowTriggerTween(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const targetGroup = parseInt(trig.targetGroup ?? 0, 10);
+ const followGroup = parseInt(trig.followGroup ?? 0, 10);
+ if (!Number.isFinite(targetGroup) || targetGroup <= 0 || !Number.isFinite(followGroup) || followGroup <= 0) return;
+
+ const baseFollowOff = this._groupOffsets[followGroup] ? { ...this._groupOffsets[followGroup] } : { x: 0, y: 0 };
+ this._activeFollowTweens.push({
+ trig,
+ elapsed: 0,
+ lastFollowX: baseFollowOff.x,
+ lastFollowY: baseFollowOff.y
+ });
+ if (!this._groupOffsets[targetGroup]) {
+ this._groupOffsets[targetGroup] = { x: 0, y: 0 };
+ }
+ }
+
+ checkFollowTriggers(playerX) {
+ while (this._followTriggerIdx < this._followTriggers.length) {
+ const trig = this._followTriggers[this._followTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._startFollowTriggerTween(trig);
+ this._followTriggerIdx++;
+ }
+ }
+
+ checkTouchFollowTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchFollowTriggerActivated ||= new Set();
+
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+
+ for (const trig of this._followTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup},${trig.followGroup}`;
+ if (this._touchFollowTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchFollowTriggerActivated.add(uid);
+ this._startFollowTriggerTween(trig);
+ }
+ }
+ }
+
+ stepFollowTriggers(dt) {
+ if (!this._activeFollowTweens || !this._activeFollowTweens.length) return;
+
+ let i = 0;
+ while (i < this._activeFollowTweens.length) {
+ const anim = this._activeFollowTweens[i];
+ const { trig } = anim;
+ anim.elapsed += dt;
+
+ const curFollowOff = this._groupOffsets[trig.followGroup] || { x: 0, y: 0 };
+ const deltaX = (curFollowOff.x - anim.lastFollowX) * trig.xMod;
+ const deltaY = (curFollowOff.y - anim.lastFollowY) * trig.yMod;
+
+ anim.lastFollowX = curFollowOff.x;
+ anim.lastFollowY = curFollowOff.y;
+
+ if (!this._groupOffsets[trig.targetGroup]) {
+ this._groupOffsets[trig.targetGroup] = { x: 0, y: 0 };
+ }
+ const off = this._groupOffsets[trig.targetGroup];
+ off.x += deltaX;
+ off.y += deltaY;
+
+ const sprites = this._getUniqueGroupSprites(trig.targetGroup);
+ const colliders = this._getUniqueGroupColliders(trig.targetGroup);
+ for (const spr of sprites) {
+ this._applyGroupedSpriteMoveOffset(spr);
+ }
+ for (const col of colliders) {
+ this._applyGroupedColliderMoveOffset(col);
+ }
+
+ if (trig.duration > 0 && anim.elapsed >= trig.duration) {
+ this._activeFollowTweens.splice(i, 1);
+ } else {
+ i++;
+ }
+ }
+ }
+
+ resetFollowTriggers() {
+ this._followTriggerIdx = 0;
+ this._activeFollowTweens = [];
+ this._touchFollowTriggerActivated = new Set();
+ }
+
+ _executeToggleTrigger(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const targetGroup = parseInt(trig.targetGroup ?? 0, 10);
+ if (!Number.isFinite(targetGroup) || targetGroup <= 0) return;
+ const activate = !!trig.activate;
+ this._groupToggledOff ||= {};
+ if (activate) {
+ delete this._groupToggledOff[targetGroup];
+ } else {
+ this._groupToggledOff[targetGroup] = true;
+ }
+
+ const sprites = this._getAllGroupSprites(targetGroup);
+ const colliders = this._getUniqueGroupColliders(targetGroup);
+
+ for (const spr of sprites) {
+ if (!spr) continue;
+ spr._eeToggledOffGroups ||= new Set();
+ if (activate) {
+ spr._eeToggledOffGroups.delete(targetGroup);
+ } else {
+ spr._eeToggledOffGroups.add(targetGroup);
+ }
+ const guideHidden = (spr._eePortalGuide && window.enablePortalGuide === false) || (spr._eeOrbGuide && window.enableOrbGuide === false) || spr._beastStaticHidden === true;
+ const isVisible = !guideHidden && spr._eeToggledOffGroups.size === 0;
+ if (typeof spr.setVisible === "function") spr.setVisible(isVisible);
+ spr.active = isVisible;
+ }
+
+ for (const col of colliders) {
+ if (!col) continue;
+ col._eeToggledOffGroups ||= new Set();
+ if (activate) {
+ col._eeToggledOffGroups.delete(targetGroup);
+ } else {
+ col._eeToggledOffGroups.add(targetGroup);
+ }
+ const isEnabled = col._eeToggledOffGroups.size === 0;
+ col.disabled = !isEnabled;
+ col.active = isEnabled;
+ }
+ }
+
+ checkToggleTriggers(playerX) {
+ while (this._toggleTriggerIdx < this._toggleTriggers.length) {
+ const trig = this._toggleTriggers[this._toggleTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._executeToggleTrigger(trig);
+ this._toggleTriggerIdx++;
+ }
+ }
+
+ checkAnimationTriggers(playerX) {
+ while (this._animationTriggerIdx < this._animationTriggers.length) {
+ const trig = this._animationTriggers[this._animationTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._executeAnimationTrigger(trig);
+ this._animationTriggerIdx++;
+ }
+ }
+
+ checkTouchAnimationTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchAnimationTriggerActivated ||= new Set();
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+ for (const trig of this._animationTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.animateId}`;
+ if (this._touchAnimationTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchAnimationTriggerActivated.add(uid);
+ this._executeAnimationTrigger(trig);
+ }
+ }
+ }
+
+ _executeAnimationTrigger(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ if (!Number.isFinite(trig.targetGroup) || trig.targetGroup <= 0) return;
+ const sprites = this._groupSprites[trig.targetGroup];
+ if (!Array.isArray(sprites)) return;
+ for (const spr of sprites) {
+ if (!spr || !spr._beastPartOf) continue;
+ const record = this._beastSprites.find(b => b.objectId === spr._beastPartOf && Object.values(b.partSprites).includes(spr));
+ if (record) window.BeastAnim.command(record.state, trig.animateId);
+ }
+ }
+
+ resetAnimationTriggers() {
+ this._animationTriggerIdx = 0;
+ this._touchAnimationTriggerActivated = new Set();
+ for (const beast of this._beastSprites) {
+ if (beast.state) window.BeastAnim.defaultBase(beast.state);
+ }
+ }
+
+ checkTouchToggleTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchToggleTriggerActivated ||= new Set();
+
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+
+ for (const trig of this._toggleTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchToggleTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchToggleTriggerActivated.add(uid);
+ this._executeToggleTrigger(trig);
+ }
+ }
+ }
+
+ resetToggleTriggers() {
+ this._toggleTriggerIdx = 0;
+ this._touchToggleTriggerActivated = new Set();
+ this._groupToggledOff = {};
+
+ const seenSprites = new Set();
+ for (const gid in this._groupSprites) {
+ for (const spr of this._groupSprites[gid]) {
+ if (!spr || seenSprites.has(spr)) continue;
+ seenSprites.add(spr);
+ if (spr._eeToggledOffGroups) spr._eeToggledOffGroups.clear();
+ const guideHidden = (spr._eePortalGuide && window.enablePortalGuide === false) || (spr._eeOrbGuide && window.enableOrbGuide === false) || spr._beastStaticHidden === true;
+ if (typeof spr.setVisible === "function") spr.setVisible(!guideHidden);
+ spr.active = !guideHidden;
+ }
+ }
+
+ const seenColliders = new Set();
+ for (const gid in this._groupColliders) {
+ for (const col of this._groupColliders[gid]) {
+ if (!col || seenColliders.has(col)) continue;
+ seenColliders.add(col);
+ if (col._eeToggledOffGroups) col._eeToggledOffGroups.clear();
+ col.disabled = false;
+ col.active = true;
+ }
+ }
+ }
+
+ _executeShakeTrigger(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const dur = Math.max(0, Number(trig.duration) || 0);
+ const str = Math.max(0, Number(trig.strength) || 0);
+ if (dur <= 0 || str <= 0) return;
+ const iv = Number(trig.interval) > 0 ? Number(trig.interval) : 1 / 60;
+ this._shakeState = {
+ strength: str,
+ endTime: (this._scene?.time?.now ?? 0) + dur * 1000,
+ interval: iv,
+ lastStepTime: -Infinity
+ };
+ }
+
+ applyShakeToOffsets(nowMs) {
+ const s = this._shakeState;
+ if (!s) return;
+ if (nowMs > s.endTime) {
+ this._shakeState = null;
+ this.shakeOffsetX = 0;
+ this.shakeOffsetY = 0;
+ return;
+ }
+ if (nowMs - s.lastStepTime >= s.interval * 1000) {
+ this.shakeOffsetX = (Math.random() * 2 - 1) * s.strength;
+ this.shakeOffsetY = (Math.random() * 2 - 1) * s.strength;
+ s.lastStepTime = nowMs;
+ }
+ }
+
+ checkShakeTriggers(playerX) {
+ while (this._shakeTriggerIdx < this._shakeTriggers.length) {
+ const trig = this._shakeTriggers[this._shakeTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) this._executeShakeTrigger(trig);
+ this._shakeTriggerIdx++;
+ }
+ }
+
+ checkTouchShakeTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchShakeTriggerActivated ||= new Set();
+
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+
+ for (const trig of this._shakeTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.duration}`;
+ if (this._touchShakeTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchShakeTriggerActivated.add(uid);
+ this._executeShakeTrigger(trig);
+ }
+ }
+ }
+
+ resetShakeTriggers() {
+ this._shakeTriggerIdx = 0;
+ this._touchShakeTriggerActivated = new Set();
+ this._shakeState = null;
+ this.shakeOffsetX = 0;
+ this.shakeOffsetY = 0;
+ }
+
+ isGroupToggledOff(groupId) {
+ const targetGroup = parseInt(groupId ?? 0, 10);
+ return targetGroup > 0 && Boolean(this._groupToggledOff?.[targetGroup]);
+ }
+
+ _armOnDeathTrigger(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ if (!this._armedOnDeathTriggers.includes(trig)) {
+ this._armedOnDeathTriggers.push(trig);
+ }
+ }
+
+ _executeOnDeathTrigger(trig, colorManager) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ if (trig.activate) {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ } else {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ }
+ }
+
+ triggerOnDeath(colorManager) {
+ for (const trig of this._armedOnDeathTriggers) {
+ this._executeOnDeathTrigger(trig, colorManager);
+ }
+ }
+
+ checkOnDeathTriggers(playerX) {
+ while (this._onDeathTriggerIdx < this._onDeathTriggers.length) {
+ const trig = this._onDeathTriggers[this._onDeathTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) {
+ this._armOnDeathTrigger(trig);
+ }
+ this._onDeathTriggerIdx++;
+ }
+ }
+
+ checkTouchOnDeathTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchOnDeathTriggerActivated ||= new Set();
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+ for (const trig of this._onDeathTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchOnDeathTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchOnDeathTriggerActivated.add(uid);
+ this._armOnDeathTrigger(trig);
+ }
+ }
+ }
+
+ resetOnDeathTriggers() {
+ this._onDeathTriggerIdx = 0;
+ this._armedOnDeathTriggers = [];
+ this._touchOnDeathTriggerActivated = new Set();
+ }
+
+ _armTouchTrigger(trig) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ if (!this._activeTouchTriggers.includes(trig)) {
+ this._activeTouchTriggers.push(trig);
+ }
+ }
+
+ checkTouchTriggers(playerX) {
+ while (this._touchTriggerIdx < this._touchTriggers.length) {
+ const trig = this._touchTriggers[this._touchTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) {
+ this._armTouchTrigger(trig);
+ }
+ this._touchTriggerIdx++;
+ }
+ }
+
+ checkTouchTouchTriggers(playerX, playerY) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchTouchTriggerActivated ||= new Set();
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+ for (const trig of this._touchTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchTouchTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchTouchTriggerActivated.add(uid);
+ this._armTouchTrigger(trig);
+ }
+ }
+ }
+
+ stepTouchTriggers(p1Holding, p1Pressed, p2Holding, p2Pressed, colorManager) {
+ for (const trig of this._activeTouchTriggers) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const isHolding = Boolean(p1Holding || p2Holding);
+ const isPressed = Boolean(p1Pressed || p2Pressed);
+ if (trig.holdMode) {
+ if (isHolding && !trig._holding) {
+ trig._holding = true;
+ if (trig.toggleType === 2) {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ } else {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ }
+ } else if (!isHolding && trig._holding) {
+ trig._holding = false;
+ if (trig.toggleType === 2) {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ } else {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ }
+ }
+ } else {
+ if (isPressed) {
+ if (trig.toggleType === 1) {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ } else if (trig.toggleType === 2) {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ } else {
+ const isCurrentlyOff = Boolean(this._groupToggledOff?.[trig.targetGroup]);
+ if (isCurrentlyOff) {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ } else {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ }
+ }
+ }
+ }
+ }
+ }
+
+ isTouchTriggerDualMode() {
+ for (const trig of this._touchTriggers) {
+ if (trig && trig.dualTouch) return true;
+ }
+ return false;
+ }
+
+ resetTouchTriggers() {
+ this._touchTriggerIdx = 0;
+ for (const trig of this._activeTouchTriggers) {
+ if (trig) trig._holding = false;
+ }
+ this._activeTouchTriggers = [];
+ this._touchTouchTriggerActivated = new Set();
+ }
+
+ _executePickupTrigger(trig, colorManager) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const itemId = parseInt(trig.itemId ?? 0, 10);
+ if (!itemId) return;
+ const count = parseInt(trig.count ?? 1, 10);
+ this._itemCounts[itemId] = (this._itemCounts[itemId] || 0) + count;
+ this._checkCountTriggers(itemId, colorManager);
+ }
+
+ checkPickupTriggers(playerX, colorManager) {
+ while (this._pickupTriggerIdx < this._pickupTriggers.length) {
+ const trig = this._pickupTriggers[this._pickupTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) {
+ this._executePickupTrigger(trig, colorManager);
+ }
+ this._pickupTriggerIdx++;
+ }
+ }
+
+ checkTouchPickupTriggers(playerX, playerY, colorManager) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchPickupTriggerActivated ||= new Set();
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+ for (const trig of this._pickupTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.itemId}`;
+ if (this._touchPickupTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchPickupTriggerActivated.add(uid);
+ this._executePickupTrigger(trig, colorManager);
+ }
+ }
+ }
+
+ resetPickupTriggers() {
+ this._pickupTriggerIdx = 0;
+ this._touchPickupTriggerActivated = new Set();
+ this._itemCounts = {};
+ }
+
+ _armCountTrigger(trig, colorManager) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ if (!this._activeCountTriggers.includes(trig)) {
+ this._activeCountTriggers.push(trig);
+ }
+ this._evaluateCountTrigger(trig, colorManager);
+ }
+
+ _evaluateCountTrigger(trig, colorManager) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const current = this._itemCounts[trig.itemId] || 0;
+ if (current >= trig.targetCount) {
+ if (trig.activate) {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ } else {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ }
+ if (!trig.multiActivate) {
+ const idx = this._activeCountTriggers.indexOf(trig);
+ if (idx !== -1) this._activeCountTriggers.splice(idx, 1);
+ }
+ }
+ }
+
+ _checkCountTriggers(itemId, colorManager) {
+ for (let i = this._activeCountTriggers.length - 1; i >= 0; i--) {
+ const trig = this._activeCountTriggers[i];
+ if (!trig || (itemId !== undefined && trig.itemId !== itemId)) continue;
+ this._evaluateCountTrigger(trig, colorManager);
+ }
+ }
+
+ checkCountTriggers(playerX, colorManager) {
+ while (this._countTriggerIdx < this._countTriggers.length) {
+ const trig = this._countTriggers[this._countTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) {
+ this._armCountTrigger(trig, colorManager);
+ }
+ this._countTriggerIdx++;
+ }
+ }
+
+ checkTouchCountTriggers(playerX, playerY, colorManager) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchCountTriggerActivated ||= new Set();
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+ for (const trig of this._countTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchCountTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchCountTriggerActivated.add(uid);
+ this._armCountTrigger(trig, colorManager);
+ }
+ }
+ }
+
+ resetCountTriggers() {
+ this._countTriggerIdx = 0;
+ this._activeCountTriggers = [];
+ this._touchCountTriggerActivated = new Set();
+ }
+
+ _executeInstantCountTrigger(trig, colorManager) {
+ if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return;
+ const current = this._itemCounts[trig.itemId] || 0;
+ let matched = false;
+ if (trig.comparison === 1) {
+ matched = current > trig.targetCount;
+ } else if (trig.comparison === 2) {
+ matched = current < trig.targetCount;
+ } else {
+ matched = current === trig.targetCount;
+ }
+ if (matched) {
+ if (trig.activate) {
+ this._activateSpawnedGroup(trig.targetGroup, colorManager);
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: true });
+ } else {
+ this._executeToggleTrigger({ targetGroup: trig.targetGroup, activate: false });
+ }
+ }
+ }
+
+ checkInstantCountTriggers(playerX, colorManager) {
+ while (this._instantCountTriggerIdx < this._instantCountTriggers.length) {
+ const trig = this._instantCountTriggers[this._instantCountTriggerIdx];
+ if (trig.x > playerX) break;
+ if (!trig.spawnTriggered && !trig.touchTriggered) {
+ this._executeInstantCountTrigger(trig, colorManager);
+ }
+ this._instantCountTriggerIdx++;
+ }
+ }
+
+ checkTouchInstantCountTriggers(playerX, playerY, colorManager) {
+ const px = Number(playerX) || 0;
+ const py = Number(playerY) || 0;
+ this._touchInstantCountTriggerActivated ||= new Set();
+ const playerHalfSize = (typeof playerSize === "number" ? playerSize : 20);
+ const halfHitbox = 30 + playerHalfSize;
+ for (const trig of this._instantCountTriggers) {
+ if (!trig || !trig.touchTriggered || trig.spawnTriggered || !this._isTriggerSaveObjectLive(trig.uid)) continue;
+ const uid = trig.uid ?? `${trig.x},${trig.y},${trig.targetGroup}`;
+ if (this._touchInstantCountTriggerActivated.has(uid)) continue;
+ if (Math.abs(px - trig.x) <= halfHitbox && Math.abs(py - (trig.y ?? 0)) <= halfHitbox) {
+ this._touchInstantCountTriggerActivated.add(uid);
+ this._executeInstantCountTrigger(trig, colorManager);
+ }
+ }
+ }
+
+ resetInstantCountTriggers() {
+ this._instantCountTriggerIdx = 0;
+ this._touchInstantCountTriggerActivated = new Set();
+ }
+
+ resetRotateTriggers() {
+ this._rotateTriggerIdx = 0;
+ this._activeRotateTweens = [];
+ this._groupRotations = {};
+ const seenSprites = new Set();
+ for (const gid in this._groupSprites) {
+ for (const spr of this._groupSprites[gid]) {
+ if (!spr || !spr.active || seenSprites.has(spr)) continue;
+ seenSprites.add(spr);
+ if (spr._eeInitialWorldX !== undefined) {
+ spr.x = spr._eeInitialWorldX;
+ spr._eeWorldX = spr._eeInitialWorldX;
+ spr._origWorldX = spr._eeInitialWorldX;
+ spr._eeMoveBaseWorldX = spr._eeInitialWorldX;
+ }
+ if (spr._eeInitialBaseY !== undefined) {
+ spr.y = spr._eeInitialBaseY;
+ spr._eeBaseY = spr._eeInitialBaseY;
+ spr._origBaseY = spr._eeInitialBaseY;
+ spr._eeMoveBaseBaseY = spr._eeInitialBaseY;
+ }
+ if (spr._eeInitialRotationRad !== undefined) spr.rotation = spr._eeInitialRotationRad;
+ this._refreshSpriteSection(spr);
+ }
+ }
+
+ const seenColliders = new Set();
+ for (const gid in this._groupColliders) {
+ for (const col of this._groupColliders[gid]) {
+ if (!col || seenColliders.has(col)) continue;
+ seenColliders.add(col);
+ if (col._eeInitialBaseX !== undefined) {
+ col.x = col._eeInitialBaseX;
+ col._baseX = col._eeInitialBaseX;
+ col._origBaseX = col._eeInitialBaseX;
+ col._eeMoveBaseX = col._eeInitialBaseX;
+ }
+ if (col._eeInitialBaseY !== undefined) {
+ col.y = col._eeInitialBaseY;
+ col._baseY = col._eeInitialBaseY;
+ col._origBaseY = col._eeInitialBaseY;
+ col._eeMoveBaseY = col._eeInitialBaseY;
+ }
+ if (col._eeInitialRotationDegrees !== undefined) {
+ col.rotationDegrees = col._eeInitialRotationDegrees;
+ col._baseRotationDegrees = col._eeInitialRotationDegrees;
+ col._origRotationDegrees = col._eeInitialRotationDegrees;
+ }
+ this._refreshCollisionSection(col);
+ }
+ }
+ }
+
+ checkPulseTriggers(playerX) {
+ if (window.enableLDM) return;
+ while (this._pulseTriggerIdx < this._pulseTriggers.length) {
+ const trig = this._pulseTriggers[this._pulseTriggerIdx];
if (trig.x > playerX) break;
if (!trig.spawnTriggered) this._startPulseTrigger(trig);
this._pulseTriggerIdx++;
@@ -4260,6 +5515,13 @@ window.LevelObject = class LevelObject {
resetPulseTriggers() {
this._pulseTriggerIdx = 0;
this._activePulses = [];
+ for (const gid in this._groupSprites || {}) {
+ for (const spr of this._groupSprites[gid] || []) {
+ if (!spr || !spr._eePulsed) continue;
+ if (typeof spr.clearTint === "function") spr.clearTint();
+ spr._eePulsed = false;
+ }
+ }
}
applyColorChannels(colorManager) {
@@ -4297,7 +5559,15 @@ window.LevelObject = class LevelObject {
visMinSection._eeActive = false;
const showtheportalthing = !visMinSection._eePortalGuide || (!window.isEditor && window.enablePortalGuide !== false);
const showtheorbthing = !visMinSection._eeOrbGuide || (!window.isEditor && window.enableOrbGuide !== false);
- visMinSection.visible = showtheportalthing && showtheorbthing;
+ const showthebeastthing = visMinSection._beastStaticHidden !== true;
+ visMinSection.visible = showtheportalthing && showtheorbthing && showthebeastthing;
+ if (visMinSection._beastManaged) {
+ visMinSection._eeEffectOffsetX = 0;
+ visMinSection._eeEffectOffsetY = 0;
+ visMinSection._eeEffectScale = 1;
+ visMinSection.setAlpha(this._getGroupOpacityForSprite(visMinSection));
+ continue;
+ }
visMinSection.x = visMinSection._eeWorldX;
visMinSection.y = visMinSection._eeBaseY;
if (!visMinSection._eeAudioScale) {
@@ -4344,10 +5614,16 @@ window.LevelObject = class LevelObject {
if (_0x8f9d56) {
if (effectSprite._eeActive) {
effectSprite._eeActive = false;
- effectSprite.y = effectSprite._eeBaseY;
- effectSprite.x = effectSprite._eeWorldX;
- if (!effectSprite._eeAudioScale) {
- effectSprite.setScale(1);
+ if (effectSprite._beastManaged) {
+ effectSprite._eeEffectOffsetX = 0;
+ effectSprite._eeEffectOffsetY = 0;
+ effectSprite._eeEffectScale = 1;
+ } else {
+ effectSprite.y = effectSprite._eeBaseY;
+ effectSprite.x = effectSprite._eeWorldX;
+ if (!effectSprite._eeAudioScale) {
+ effectSprite.setScale(1);
+ }
}
effectSprite.setAlpha(this._getGroupOpacityForSprite(effectSprite));
}
@@ -4360,10 +5636,16 @@ window.LevelObject = class LevelObject {
if (_0x289aa2 >= 1) {
if (effectSprite._eeActive) {
effectSprite._eeActive = false;
- effectSprite.y = effectSprite._eeBaseY;
- effectSprite.x = effectSprite._eeWorldX;
- if (!effectSprite._eeAudioScale) {
- effectSprite.setScale(1);
+ if (effectSprite._beastManaged) {
+ effectSprite._eeEffectOffsetX = 0;
+ effectSprite._eeEffectOffsetY = 0;
+ effectSprite._eeEffectScale = 1;
+ } else {
+ effectSprite.y = effectSprite._eeBaseY;
+ effectSprite.x = effectSprite._eeWorldX;
+ if (!effectSprite._eeAudioScale) {
+ effectSprite.setScale(1);
+ }
}
effectSprite.setAlpha(this._getGroupOpacityForSprite(effectSprite));
}
@@ -4401,19 +5683,25 @@ window.LevelObject = class LevelObject {
_0x127ace = 1 + _0x20804e * 0.75;
}
}
- if (effectSprite.x !== _0x17437c) {
- effectSprite.x = _0x17437c;
- }
- if (effectSprite.y !== _0x50e6d9) {
- effectSprite.y = _0x50e6d9;
+ if (effectSprite._beastManaged) {
+ effectSprite._eeEffectOffsetX = _0x17437c - effectSprite._eeWorldX;
+ effectSprite._eeEffectOffsetY = _0x50e6d9 - effectSprite._eeBaseY;
+ effectSprite._eeEffectScale = _0x127ace;
+ } else {
+ if (effectSprite.x !== _0x17437c) {
+ effectSprite.x = _0x17437c;
+ }
+ if (effectSprite.y !== _0x50e6d9) {
+ effectSprite.y = _0x50e6d9;
+ }
+ if (!effectSprite._eeAudioScale && effectSprite.scaleX !== _0x127ace) {
+ effectSprite.setScale(_0x127ace);
+ }
}
const _eeFinalAlpha = _0x2128bf * this._getGroupOpacityForSprite(effectSprite);
if (effectSprite.alpha !== _eeFinalAlpha) {
effectSprite.alpha = _eeFinalAlpha;
}
- if (!effectSprite._eeAudioScale && effectSprite.scaleX !== _0x127ace) {
- effectSprite.setScale(_0x127ace);
- }
}
}
}
@@ -4454,11 +5742,13 @@ window.LevelObject = class LevelObject {
const _now = Date.now();
const _clickMult = window.orbClickScale || 2.0;
const _shrinkMs = window.orbClickShrinkTime || 250;
- const _baseScale = Math.min(_maxaudioScale, 0.75 + _meterValue * 0.15);
+ const _pulseMult = Math.min(2.0, 1 + _meterValue * 0.2);
for (let _0xOrbSpr of this._orbSprites) {
if (!_0xOrbSpr || !_0xOrbSpr.active) continue;
const _worldX = _0xOrbSpr._eeWorldX;
if (Number.isFinite(_worldX) && (_worldX < _minVisibleX || _worldX > _maxVisibleX)) continue;
+ const _orbBase = Number(_0xOrbSpr._eeBaseScale) > 0 ? Number(_0xOrbSpr._eeBaseScale) : 0.75;
+ const _baseScale = Math.min(_maxaudioScale, _orbBase * _pulseMult);
let _targetScale = _baseScale;
if (_0xOrbSpr._hitTime) {
const _elapsed = _now - _0xOrbSpr._hitTime;
@@ -4533,6 +5823,11 @@ window.LevelObject = class LevelObject {
}
this._secretCoinRunCollected.clear();
this._userCoinRunCollected.clear();
+ for (const staticSpr of this.objectSprites.flat()) {
+ if (staticSpr && staticSpr._beastStaticHidden) {
+ staticSpr.setVisible(false);
+ }
+ }
for (let _0x5c5d9a of this._audioScaleSprites) {
_0x5c5d9a.setScale(0.1);
}
diff --git a/assets/scripts/core/loading-screen.js b/assets/scripts/core/loading-screen.js
index 293f9a32..24fd9d77 100644
--- a/assets/scripts/core/loading-screen.js
+++ b/assets/scripts/core/loading-screen.js
@@ -207,6 +207,11 @@ class BootScene extends Phaser.Scene {
this.load.text("goldFontFnt", "assets/fonts/goldFont.fnt");
this.load.once("complete", () => {
+ window.GJBeast01_AnimDesc = this.cache.json.get("GJBeast01_AnimDesc") || null;
+ window.GJBeast02_AnimDesc = this.cache.json.get("GJBeast02_AnimDesc") || null;
+ window.GJBeast03_AnimDesc = this.cache.json.get("GJBeast03_AnimDesc") || null;
+ window.GJBeast04_AnimDesc = this.cache.json.get("GJBeast04_AnimDesc") || null;
+ window.GJBeast05_AnimDesc = this.cache.json.get("GJBeast05_AnimDesc") || null;
const tex = this.textures.get("game_bg_01");
const s = Math.max(W / tex.source[0].width, H / tex.source[0].height);
const bg = this.add.image(cx, cy, "game_bg_01").setScale(s).setTint(0x0066ff);
@@ -255,6 +260,11 @@ class BootScene extends Phaser.Scene {
this.load.atlas("Wavesheet", "assets/sheets/Wavesheet.png", "assets/sheets/Wavesheet.json");
this.load.json("Spider_AnimDesc", "assets/sheets/Spider_AnimDesc.json");
this.load.json("Robot_AnimDesc", "assets/sheets/Robot_AnimDesc.json");
+ this.load.json("GJBeast01_AnimDesc", "assets/sheets/GJBeast01_AnimDesc.json");
+ this.load.json("GJBeast02_AnimDesc", "assets/sheets/GJBeast02_AnimDesc.json");
+ this.load.json("GJBeast03_AnimDesc", "assets/sheets/GJBeast03_AnimDesc.json");
+ this.load.json("GJBeast04_AnimDesc", "assets/sheets/GJBeast04_AnimDesc.json");
+ this.load.json("GJBeast05_AnimDesc", "assets/sheets/GJBeast05_AnimDesc.json");
this.load.atlas("GJ_LaunchSheet", "assets/sheets/GJ_LaunchSheet.png", "assets/sheets/GJ_LaunchSheet.json");
this.load.atlas("player_ball_00", "assets/sheets/player_ball_00.png", "assets/sheets/player_ball_00.json");
this.load.atlas("player_dart_00", "assets/sheets/player_dart_00.png", "assets/sheets/player_dart_00.json");
diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js
index 0ee23f03..f9740cb9 100644
--- a/assets/scripts/core/player.js
+++ b/assets/scripts/core/player.js
@@ -2025,6 +2025,16 @@ if (this.p.isFlying || this.p.isUfo) {
}
this._setGamemodeFlyBounds(true, spawnY, f, false);
}
+ applyShakeOffset(ox, oy) {
+ for (const layer of this._allLayers) {
+ if (layer?.sprite) {
+ layer.sprite.x += ox;
+ layer.sprite.y += oy;
+ }
+ }
+ this._aboveContainer.x += ox;
+ this._aboveContainer.y += oy;
+ }
exitShipMode() {
if (this.p.isFlying) {
this.p.isFlying = false;
diff --git a/assets/scripts/game/allObjects.js b/assets/scripts/game/allObjects.js
index 2c038f5f..dd172ee7 100644
--- a/assets/scripts/game/allObjects.js
+++ b/assets/scripts/game/allObjects.js
@@ -15442,20 +15442,20 @@ window.allobjects = function() {
"frame": "GJBeast01_01_001.png",
"localDy": -28,
"tint": 0,
- "z": 1
+ "z": 1,
},
{
"frame": "GJBeast01_02_001.png",
"localDy": 16,
"tint": 0,
- "z": 1
+ "z": 1,
},
{
"frame": "GJBeast01_03_001.png",
"localDy": -19,
"localDx": -4,
"Cant_Color": true,
- "z": 2
+ "z": 2,
}
]
},
@@ -24090,7 +24090,7 @@ window.allobjects = function() {
{
"frame": "GJBeast02_02_001.png",
"localDy": 5,
- "z": 2
+ "z": 2,
}
]
},
@@ -24112,7 +24112,7 @@ window.allobjects = function() {
{
"frame": "GJBeast03_02_001.png",
"localDy": 0,
- "z": 2
+ "z": 2,
}
]
},
@@ -27283,7 +27283,7 @@ window.allobjects = function() {
"frame": "GJBeast04_01_001.png",
"localDy": -10,
"tint": 0,
- "z": 1
+ "z": 1,
},
{
"frame": "GJBeast04_02_001.png",
@@ -34538,12 +34538,12 @@ window.allobjects = function() {
{
"frame": "GJBeast05_04_001.png",
"localDy": -10,
- "z": 2
+ "z": 2,
},
{
"frame": "GJBeast05_05_001.png",
"localDy": 10,
- "z": 2
+ "z": 2,
}
]
},
diff --git a/assets/sheets/GJBeast01_AnimDesc.json b/assets/sheets/GJBeast01_AnimDesc.json
new file mode 100644
index 00000000..1817ec3e
--- /dev/null
+++ b/assets/sheets/GJBeast01_AnimDesc.json
@@ -0,0 +1 @@
+{"usedTextures":{"texture_0":{"texture":"GJBeast01_02_001.png","tag":"0"},"texture_1":{"texture":"GJBeast01_01_001.png","tag":"1"}},"animationContainer":{"GJBeast01_bite_001.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.225, -10.45}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.775, 11.5}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_002.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.7, -11.6}","scale":"{0.99987, 0.99987}","rotation":"-2.253570556640625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{1.025, 12.5}","scale":"{0.99986, 0.99986}","rotation":"2.52935791015625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_003.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{1.2, -12.75}","scale":"{1.00001, 1.00001}","rotation":"-4.531463623046875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{1.275, 13.6}","scale":"{1.00000, 1.00000}","rotation":"5.2310028076171875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_004.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{2.9, -15.225}","scale":"{0.99941, 0.99941}","rotation":"-11.0303955078125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{2.075, 15.775}","scale":"{0.99939, 0.99939}","rotation":"11.02618408203125","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_005.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{4.725, -17.625}","scale":"{1.00003, 1.00003}","rotation":"-17.64984130859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{2.95, 17.875}","scale":"{1.00000, 1.00000}","rotation":"16.926116943359375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_006.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{6.775, -19.8}","scale":"{0.99879, 0.99879}","rotation":"-23.781829833984375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{4.125, 19.75}","scale":"{0.99887, 0.99887}","rotation":"22.066650390625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_007.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{8.875, -21.925}","scale":"{1.00001, 1.00001}","rotation":"-29.851455688476563","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{5.45, 21.725}","scale":"{1.00001, 1.00001}","rotation":"27.39129638671875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_008.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{9.625, -22.375}","scale":"{0.99854, 0.99854}","rotation":"-31.605087280273438","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{6.475, 22.35}","scale":"{0.99853, 0.99853}","rotation":"30.568344116210938","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_009.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{10.4, -22.85}","scale":"{0.99851, 0.99851}","rotation":"-33.57756042480469","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{7.5, 22.95}","scale":"{0.99845, 0.99845}","rotation":"33.81297302246094","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_010.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{11.15, -23.275}","scale":"{0.99844, 0.99844}","rotation":"-35.35871887207031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{8.55, 23.525}","scale":"{0.99839, 0.99839}","rotation":"36.86872863769531","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_011.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{11.9, -23.625}","scale":"{1.00000, 1.00000}","rotation":"-37.289947509765625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{9.625, 24.175}","scale":"{0.99998, 0.99998}","rotation":"40.14720153808594","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_012.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{8.925, -21.55}","scale":"{0.99796, 0.99796}","rotation":"-30.344223022460938","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{6.5, 21.925}","scale":"{0.99795, 0.99795}","rotation":"31.553054809570313","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_013.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{4.75, -18.35}","scale":"{0.99853, 0.99853}","rotation":"-20.5751953125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{2.275, 18.325}","scale":"{0.99862, 0.99862}","rotation":"19.07745361328125","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_014.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{2.65, -15.525}","scale":"{0.99823, 0.99823}","rotation":"-11.56005859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{1.4, 15.55}","scale":"{0.99833, 0.99833}","rotation":"10.812942504882813","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_015.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.9, -12.45}","scale":"{0.99921, 0.99921}","rotation":"-2.8425140380859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.725, 12.75}","scale":"{0.99924, 0.99924}","rotation":"2.866943359375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_bite_016.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{-0.025, -10.725}","scale":"{0.99959, 0.99959}","rotation":"-0.2989959716796875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.125, 11.1}","scale":"{0.99956, 0.99956}","rotation":"-1.009674072265625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_001.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{4.725, -17.625}","scale":"{1.00003, 1.00003}","rotation":"-17.64984130859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{2.95, 17.875}","scale":"{1.00000, 1.00000}","rotation":"16.926116943359375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_002.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{6.775, -19.8}","scale":"{0.99879, 0.99879}","rotation":"-23.781829833984375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{4.125, 19.75}","scale":"{0.99887, 0.99887}","rotation":"22.066650390625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_003.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{8.875, -21.925}","scale":"{1.00001, 1.00001}","rotation":"-29.851455688476563","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{5.45, 21.725}","scale":"{1.00001, 1.00001}","rotation":"27.39129638671875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_001.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{9.625, -22.375}","scale":"{0.99854, 0.99854}","rotation":"-31.605087280273438","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{6.475, 22.35}","scale":"{0.99853, 0.99853}","rotation":"30.568344116210938","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_002.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{11, -23.55}","scale":"{0.99747, 0.99747}","rotation":"-35.33137512207031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{8.35, 23.625}","scale":"{0.99744, 0.99744}","rotation":"36.088165283203125","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_003.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{12.35, -24.675}","scale":"{0.99790, 0.99790}","rotation":"-39.08689880371094","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{10.3, 24.825}","scale":"{0.99786, 0.99786}","rotation":"41.61042785644531","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_004.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{13.825, -25.75}","scale":"{1.00001, 1.00001}","rotation":"-42.76524353027344","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{12.35, 26}","scale":"{0.99999, 0.99999}","rotation":"47.12890625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_005.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{12.5, -24.725}","scale":"{0.99748, 0.99748}","rotation":"-39.33201599121094","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{10.425, 24.925}","scale":"{0.99741, 0.99741}","rotation":"41.88250732421875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_006.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{11.175, -23.7}","scale":"{0.99656, 0.99656}","rotation":"-35.82696533203125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{8.6, 23.825}","scale":"{0.99651, 0.99651}","rotation":"36.82000732421875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_loop_007.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{9.9, -22.575}","scale":"{0.99717, 0.99717}","rotation":"-32.31805419921875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{6.825, 22.6}","scale":"{0.99717, 0.99717}","rotation":"31.57781982421875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_end_001.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{11.9, -23.625}","scale":"{1.00000, 1.00000}","rotation":"-37.289947509765625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{9.625, 24.175}","scale":"{0.99998, 0.99998}","rotation":"40.14720153808594","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_end_002.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{8.925, -21.55}","scale":"{0.99796, 0.99796}","rotation":"-30.344223022460938","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{6.5, 21.925}","scale":"{0.99795, 0.99795}","rotation":"31.553054809570313","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_end_003.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{4.75, -18.35}","scale":"{0.99853, 0.99853}","rotation":"-20.5751953125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{2.275, 18.325}","scale":"{0.99862, 0.99862}","rotation":"19.07745361328125","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_end_004.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{2.65, -15.525}","scale":"{0.99823, 0.99823}","rotation":"-11.56005859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{1.4, 15.55}","scale":"{0.99833, 0.99833}","rotation":"10.812942504882813","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_end_005.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.9, -12.45}","scale":"{0.99921, 0.99921}","rotation":"-2.8425140380859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.725, 12.75}","scale":"{0.99924, 0.99924}","rotation":"2.866943359375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_attack01_end_006.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{-0.025, -10.725}","scale":"{0.99959, 0.99959}","rotation":"-0.2989959716796875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.125, 11.1}","scale":"{0.99956, 0.99956}","rotation":"-1.009674072265625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_001.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.225, -10.45}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.775, 11.5}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_002.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.15, -10.25}","scale":"{0.99998, 0.99998}","rotation":"0.302490234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.7, 11.275}","scale":"{0.99998, 0.99998}","rotation":"-0.300750732421875","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_003.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0, -9.8}","scale":"{0.99992, 0.99992}","rotation":"1.3041839599609375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.575, 10.75}","scale":"{0.99992, 0.99992}","rotation":"-1.2989349365234375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_004.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{-0.15, -9.325}","scale":"{0.99987, 0.99987}","rotation":"2.501434326171875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.425, 10.225}","scale":"{0.99988, 0.99988}","rotation":"-2.305938720703125","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_005.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{-0.225, -9.1}","scale":"{1.00000, 1.00000}","rotation":"2.9864044189453125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.35, 9.975}","scale":"{1.00000, 1.00000}","rotation":"-2.9515228271484375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_006.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{-0.175, -9.25}","scale":"{0.99984, 0.99984}","rotation":"2.5450592041015625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.4, 10.125}","scale":"{0.99984, 0.99984}","rotation":"-2.537200927734375","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_007.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{-0.05, -9.6}","scale":"{0.99987, 0.99987}","rotation":"1.780303955078125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.475, 10.575}","scale":"{0.99987, 0.99987}","rotation":"-1.775054931640625","flipped":"{0, 0}","zValue":"1"}},"GJBeast01_idle01_008.png":{"sprite_0":{"texture":"GJBeast01_02_001.png","tag":"0","usesCustomTag":"0","position":"{0.1, -10.1}","scale":"{0.99995, 0.99995}","rotation":"0.753570556640625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast01_01_001.png","tag":"1","usesCustomTag":"0","position":"{0.65, 11.125}","scale":"{0.99995, 0.99995}","rotation":"-0.750946044921875","flipped":"{0, 0}","zValue":"1"}}}}
\ No newline at end of file
diff --git a/assets/sheets/GJBeast02_AnimDesc.json b/assets/sheets/GJBeast02_AnimDesc.json
new file mode 100644
index 00000000..0035452a
--- /dev/null
+++ b/assets/sheets/GJBeast02_AnimDesc.json
@@ -0,0 +1 @@
+{"usedTextures":{"texture_0":{"texture":"0","tag":"0"},"texture_1":{"texture":"GJBeast02_01_001.png","tag":"1"}},"animationContainer":{"GJBeast02_idle01_001.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -2.5}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_002.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.2}","scale":"{1.00504, 0.98494}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -2.7}","scale":"{1.00000, 0.97395}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_003.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.65}","scale":"{1.01711, 0.94888}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.2}","scale":"{1.00000, 0.91161}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_004.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.075}","scale":"{1.02873, 0.91414}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.675}","scale":"{1.00000, 0.85153}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_005.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.25}","scale":"{1.03333, 0.90041}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.875}","scale":"{1.00000, 0.82779}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_006.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.875}","scale":"{1.02478, 0.92915}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.625}","scale":"{1.00000, 0.91525}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_007.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.525}","scale":"{1.01666, 0.95642}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.225}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_008.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.4}","scale":"{1.01102, 0.96765}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.025}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle01_009.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.125}","scale":"{1.00000, 0.98962}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -2.65}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_001.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -2.5}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_002.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.2}","scale":"{1.00505, 0.98494}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -2.7}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_003.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.65}","scale":"{1.01712, 0.94888}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.2}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_004.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.075}","scale":"{1.02875, 0.91414}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_04_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.675}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_005.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.25}","scale":"{1.03334, 0.90041}","rotation":"0","flipped":"{0, 0}","zValue":"0"}},"GJBeast02_idle02_006.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.875}","scale":"{1.02478, 0.92915}","rotation":"0","flipped":"{0, 0}","zValue":"0"}},"GJBeast02_idle02_007.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.525}","scale":"{1.01666, 0.95642}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_05_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.225}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_008.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.4}","scale":"{1.01102, 0.96765}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_03_001.png","tag":"0","usesCustomTag":"1","position":"{0, -3.025}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast02_idle02_009.png":{"sprite_0":{"texture":"GJBeast02_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.125}","scale":"{1.00000, 0.98962}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast02_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -2.65}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}}}}
\ No newline at end of file
diff --git a/assets/sheets/GJBeast03_AnimDesc.json b/assets/sheets/GJBeast03_AnimDesc.json
new file mode 100644
index 00000000..1e29f00f
--- /dev/null
+++ b/assets/sheets/GJBeast03_AnimDesc.json
@@ -0,0 +1 @@
+{"usedTextures":{"texture_0":{"texture":"0","tag":"0"},"texture_1":{"texture":"GJBeast03_01_001.png","tag":"1"}},"animationContainer":{"GJBeast03_idle01_001.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, 0.5}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_002.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.15}","scale":"{1.00604, 0.99207}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, 0.3}","scale":"{1.00188, 0.98357}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_003.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.525}","scale":"{1.02249, 0.97044}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, -0.225}","scale":"{1.00699, 0.93883}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_004.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.95}","scale":"{1.04126, 0.94577}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -0.85}","scale":"{1.01282, 0.88774}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_005.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.175}","scale":"{1.04967, 0.93472}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -1.125}","scale":"{1.01543, 0.86487}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_006.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.075}","scale":"{1.04579, 0.93983}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -1}","scale":"{1.01407, 0.87674}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_007.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.825}","scale":"{1.03465, 0.95444}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -0.625}","scale":"{1.01019, 0.91078}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_008.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.475}","scale":"{1.01924, 0.97470}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, -0.125}","scale":"{1.00478, 0.95801}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle01_009.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.15}","scale":"{1.00552, 0.99274}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, 0.325}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_001.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, 0.5}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_002.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.15}","scale":"{1.00604, 0.99207}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0.325}","scale":"{1.00241, 0.88286}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_003.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.525}","scale":"{1.02249, 0.97044}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, -0.225}","scale":"{1.00932, 0.54720}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_004.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.95}","scale":"{1.04126, 0.94577}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.075, -0.95}","scale":"{1.01891, 0.08133}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_005.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.175}","scale":"{1.04967, 0.93472}","rotation":"0","flipped":"{0, 0}","zValue":"0"}},"GJBeast03_idle02_006.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -1.075}","scale":"{1.04579, 0.93983}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.075, -0.95}","scale":"{1.01891, 0.21819}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_007.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.825}","scale":"{1.03465, 0.95444}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.05, -0.75}","scale":"{1.01598, 0.33965}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_008.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.475}","scale":"{1.01924, 0.97470}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, -0.225}","scale":"{1.00815, 0.66316}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast03_idle02_009.png":{"sprite_0":{"texture":"GJBeast03_01_001.png","tag":"1","usesCustomTag":"0","position":"{0, -0.15}","scale":"{1.00552, 0.99274}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast03_02_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, 0.325}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"}}}}
\ No newline at end of file
diff --git a/assets/sheets/GJBeast04_AnimDesc.json b/assets/sheets/GJBeast04_AnimDesc.json
new file mode 100644
index 00000000..78041a3e
--- /dev/null
+++ b/assets/sheets/GJBeast04_AnimDesc.json
@@ -0,0 +1 @@
+{"usedTextures":{"texture_0":{"texture":"0","tag":"0"},"texture_1":{"texture":"0","tag":"1"},"texture_2":{"texture":"GJBeast04_02_001.png","tag":"2"},"texture_3":{"texture":"GJBeast04_01_001.png","tag":"3"}},"animationContainer":{"GJBeast04_idle01_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.5, -9.6}","scale":"{0.99992, 0.99992}","rotation":"-33.70783996582031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.475, 2.6}","scale":"{0.99996, 0.99996}","rotation":"-20.432540893554688","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.8, -1}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 18}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.8, -10.775}","scale":"{0.99841, 0.99841}","rotation":"-34.85554504394531","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.4, 1.725}","scale":"{0.99902, 0.99902}","rotation":"-18.788818359375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.675, -1.675}","scale":"{0.99991, 0.99991}","rotation":"1.52960205078125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.675, 20.1}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -11.95}","scale":"{0.99837, 0.99837}","rotation":"-38.3514404296875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5, 1.875}","scale":"{0.99917, 0.99917}","rotation":"-14.267227172851563","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.55, -0.9}","scale":"{0.99962, 0.99962}","rotation":"6.0431365966796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, -0.1}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.275, -10.425}","scale":"{0.99832, 0.99832}","rotation":"-43.35383605957031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.9, 5.625}","scale":"{0.99956, 0.99956}","rotation":"-7.5653228759765625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.625, 3.75}","scale":"{0.99927, 0.99927}","rotation":"12.559173583984375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.1, -9.2}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{1.375, -7.675}","scale":"{0.99828, 0.99828}","rotation":"-48.41352844238281","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.5, 10.625}","scale":"{0.99993, 0.99993}","rotation":"-0.7850341796875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.4, 9.675}","scale":"{0.99895, 0.99895}","rotation":"19.532211303710938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.625, -7.6}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{1.575, -6.3}","scale":"{0.99837, 0.99837}","rotation":"-50.85469055175781","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.125, 12.5}","scale":"{0.99973, 0.99973}","rotation":"4.260284423828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.1, 12.2}","scale":"{0.99877, 0.99877}","rotation":"24.586456298828125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{15.925, -1.5}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{1.45, -6.9}","scale":"{0.99997, 0.99997}","rotation":"-50.60267639160156","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.8, 11.2}","scale":"{0.99997, 0.99997}","rotation":"6.2125396728515625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.975, 11.3}","scale":"{1.00001, 1.00001}","rotation":"26.645431518554688","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{16.925, 5.125}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.8, -7.925}","scale":"{0.99830, 0.99830}","rotation":"-38.87928771972656","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.525, 8.75}","scale":"{0.99966, 0.99966}","rotation":"5.26654052734375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.6, 8.625}","scale":"{0.99871, 0.99871}","rotation":"25.5946044921875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 20.8}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.1, -9.75}","scale":"{0.99813, 0.99813}","rotation":"-32.60188293457031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.675, 5.625}","scale":"{0.99970, 0.99970}","rotation":"2.5424346923828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.725, 5.2}","scale":"{0.99881, 0.99881}","rotation":"23.0478515625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.675, 21.3}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_010.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.575, -10.35}","scale":"{0.99787, 0.99787}","rotation":"-24.97418212890625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4, 3.325}","scale":"{0.99960, 0.99960}","rotation":"-1.2998046875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.9, 2.35}","scale":"{0.99898, 0.99898}","rotation":"18.822494506835938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, -0.325}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_011.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.55, -8.075}","scale":"{0.99785, 0.99785}","rotation":"-24.232681274414063","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.375, 5.2}","scale":"{0.99911, 0.99911}","rotation":"-6.309295654296875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.15, 3.5}","scale":"{0.99922, 0.99922}","rotation":"13.799850463867188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.5, -9.775}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_012.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.475, -5.425}","scale":"{0.99786, 0.99786}","rotation":"-26.47406005859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.775, 7.6}","scale":"{0.99863, 0.99863}","rotation":"-11.5533447265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.4, 5.225}","scale":"{0.99943, 0.99943}","rotation":"8.550094604492188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{17.175, -9.2}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_013.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.325, -4.225}","scale":"{0.99745, 0.99745}","rotation":"-30.073257446289063","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.15, 8.55}","scale":"{0.99821, 0.99821}","rotation":"-16.064483642578125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.575, 5.55}","scale":"{0.99969, 0.99969}","rotation":"4.0350341796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.35, -2.825}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle01_014.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.4, -6.325}","scale":"{0.99719, 0.99719}","rotation":"-31.8385009765625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.425, 6.05}","scale":"{0.99898, 0.99898}","rotation":"-19.2911376953125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.725, 2.6}","scale":"{0.99992, 0.99992}","rotation":"1.026275634765625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{17.25, 3.25}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.725, -9.4}","scale":"{0.99992, 0.99992}","rotation":"-33.70783996582031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.5, 2.825}","scale":"{0.99996, 0.99996}","rotation":"-20.432540893554688","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.8, -0.8}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 18.2}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.925, -10.475}","scale":"{0.99839, 0.99839}","rotation":"-36.560302734375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.4, 1.525}","scale":"{0.99902, 0.99902}","rotation":"-18.788818359375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-12.725, -1.9}","scale":"{0.99991, 0.99991}","rotation":"-8.194107055664063","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.675, 19.925}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.15, -10.825}","scale":"{0.99833, 0.99833}","rotation":"-38.1070556640625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.05, 2}","scale":"{0.99917, 0.99917}","rotation":"-14.267227172851563","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_09_001.png","tag":"0","usesCustomTag":"1","position":"{-12.5, -0.8}","scale":"{0.99966, 0.99966}","rotation":"-3.9097442626953125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.55, -8.525}","scale":"{0.99823, 0.99823}","rotation":"-32.029296875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.475, 5.525}","scale":"{0.99956, 0.99956}","rotation":"-7.5653228759765625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.475, -9.3}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_idle02_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.45, -4.3}","scale":"{0.99832, 0.99832}","rotation":"-21.952438354492188","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4, 10.225}","scale":"{0.99993, 0.99993}","rotation":"-0.7850341796875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_09_001.png","tag":"0","usesCustomTag":"1","position":"{-11.9, 9.225}","scale":"{0.99899, 0.99899}","rotation":"3.5815582275390625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{17.15, -8}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.975, -2.2}","scale":"{0.99836, 0.99836}","rotation":"-18.345733642578125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.575, 12.3}","scale":"{0.99973, 0.99973}","rotation":"4.260284423828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-11.675, 12.025}","scale":"{0.99874, 0.99874}","rotation":"4.1385498046875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.35, -1.7}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.375, -1.7}","scale":"{0.99997, 0.99997}","rotation":"-11.640594482421875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.4, 12.025}","scale":"{0.99997, 0.99997}","rotation":"6.2125396728515625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.575, 12.05}","scale":"{0.99997, 0.99997}","rotation":"5.9480133056640625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{17.25, 5.95}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.575, -3.5}","scale":"{0.99832, 0.99832}","rotation":"-10.200180053710938","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.525, 8.625}","scale":"{0.99966, 0.99966}","rotation":"5.26654052734375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.65, 8.5}","scale":"{0.99871, 0.99871}","rotation":"25.5946044921875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 20.725}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.375, -4.975}","scale":"{0.99814, 0.99814}","rotation":"-17.95574951171875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.7, 6.025}","scale":"{0.99970, 0.99970}","rotation":"2.5424346923828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.725, 5.625}","scale":"{0.99881, 0.99881}","rotation":"23.0478515625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.675, 21.725}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_010.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.875, -6.625}","scale":"{0.99785, 0.99785}","rotation":"-19.428878784179688","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.95, 3.925}","scale":"{0.99960, 0.99960}","rotation":"-1.2998046875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.875, 2.925}","scale":"{0.99898, 0.99898}","rotation":"18.822494506835938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, 0.325}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_011.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.425, -6.3}","scale":"{0.99757, 0.99757}","rotation":"-23.907623291015625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.4, 5.1}","scale":"{0.99911, 0.99911}","rotation":"-6.309295654296875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.15, 3.4}","scale":"{0.99922, 0.99922}","rotation":"13.799850463867188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.475, -9.875}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_012.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2, -4.3}","scale":"{0.99726, 0.99726}","rotation":"-29.154800415039063","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.775, 7.525}","scale":"{0.99863, 0.99863}","rotation":"-11.5533447265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.425, 5.125}","scale":"{0.99943, 0.99943}","rotation":"8.550094604492188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{17.175, -9.325}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_013.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.7, -3.975}","scale":"{0.99637, 0.99637}","rotation":"-31.829666137695313","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.2, 7.95}","scale":"{0.99821, 0.99821}","rotation":"-16.064483642578125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.575, 4.95}","scale":"{0.99969, 0.99969}","rotation":"4.0350341796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.375, -3.425}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle02_014.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.4, -6.025}","scale":"{0.99839, 0.99839}","rotation":"-34.57377624511719","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.425, 5.85}","scale":"{0.99898, 0.99898}","rotation":"-19.2911376953125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.725, 2.425}","scale":"{0.99992, 0.99992}","rotation":"1.026275634765625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{17.3, 3.05}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.725, -9.4}","scale":"{0.99992, 0.99992}","rotation":"-33.70783996582031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.5, 2.825}","scale":"{0.99996, 0.99996}","rotation":"-20.432540893554688","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.8, -0.8}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 18.2}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.1, -11.775}","scale":"{0.99991, 0.99991}","rotation":"-56.35694885253906","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.2, 8.575}","scale":"{0.99996, 0.99996}","rotation":"21.794326782226563","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-13.05, 10.775}","scale":"{1.00000, 1.00000}","rotation":"42.22764587402344","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{21.5, 14.7}","scale":"{0.89471, 1.08645}","rotation":"34.441986083984375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.6, -11.525}","scale":"{0.99991, 0.99991}","rotation":"-62.09967041015625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.875, 10.55}","scale":"{0.99995, 0.99995}","rotation":"32.538543701171875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-13.15, 14.175}","scale":"{1.00000, 1.00000}","rotation":"52.972137451171875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{10.425, 1.7}","scale":"{1.16080, 1.13105}","rotation":"18.064865112304688","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.1, -11.9}","scale":"{0.99991, 0.99991}","rotation":"-65.26911926269531","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.225, 11.3}","scale":"{0.99995, 0.99995}","rotation":"39.49794006347656","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12, 15.8}","scale":"{0.99999, 0.99999}","rotation":"59.931976318359375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{8.8, -10.925}","scale":"{0.93690, 1.13105}","rotation":"-1.215911865234375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.6, -11.65}","scale":"{0.99991, 0.99991}","rotation":"-62.064178466796875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.775, 11.25}","scale":"{0.99994, 0.99994}","rotation":"37.49302673339844","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.7, 15.5}","scale":"{0.99998, 0.99998}","rotation":"57.92799377441406","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{8.95, -11.175}","scale":"{0.86845, 1.21125}","rotation":"3.78094482421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.475, -9.775}","scale":"{0.99990, 0.99990}","rotation":"-54.28352355957031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.325, 11.5}","scale":"{0.99994, 0.99994}","rotation":"26.271255493164063","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.925, 14.325}","scale":"{0.99997, 0.99997}","rotation":"46.706329345703125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{12.2, -1.925}","scale":"{0.77104, 1.62439}","rotation":"3.78094482421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.4, -8.775}","scale":"{0.99991, 0.99991}","rotation":"-50.99009704589844","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.75, 9.875}","scale":"{0.99992, 0.99992}","rotation":"15.816329956054688","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.75, 11.25}","scale":"{0.99996, 0.99996}","rotation":"36.251678466796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{13.825, 2.45}","scale":"{0.85385, 1.27044}","rotation":"3.78094482421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.825, -8.525}","scale":"{0.99848, 0.99848}","rotation":"-43.03643798828125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.85, 8}","scale":"{0.99978, 0.99978}","rotation":"3.690399169921875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.625, 7.7}","scale":"{0.99900, 0.99900}","rotation":"24.005462646484375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{14.775, 4.425}","scale":"{0.92683, 1.61407}","rotation":"1.7855377197265625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack01_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.175, -9.075}","scale":"{0.99759, 0.99759}","rotation":"-38.35304260253906","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.65, 5.3}","scale":"{0.99939, 0.99939}","rotation":"-8.282302856445313","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.2, 3.325}","scale":"{0.99883, 0.99883}","rotation":"12.008270263671875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{16.05, 15.65}","scale":"{0.96336, 0.83686}","rotation":"0.785919189453125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.725, -10.525}","scale":"{0.99993, 0.99993}","rotation":"-42.19647216796875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.725, 6.5}","scale":"{0.99995, 0.99995}","rotation":"0.0594482421875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.85, 5.65}","scale":"{1.00000, 1.00000}","rotation":"20.491622924804688","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{19.25, 18.95}","scale":"{1.00000, 1.00000}","rotation":"9.49493408203125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.1, -11.775}","scale":"{0.99991, 0.99991}","rotation":"-56.35694885253906","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.2, 8.575}","scale":"{0.99996, 0.99996}","rotation":"21.794326782226563","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-13.05, 10.775}","scale":"{1.00000, 1.00000}","rotation":"42.22764587402344","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{21.5, 14.7}","scale":"{0.89471, 1.08645}","rotation":"34.441986083984375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.6, -11.525}","scale":"{0.99991, 0.99991}","rotation":"-62.09967041015625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.875, 10.55}","scale":"{0.99995, 0.99995}","rotation":"32.538543701171875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-13.15, 14.175}","scale":"{1.00000, 1.00000}","rotation":"52.972137451171875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{10.425, 1.7}","scale":"{1.16080, 1.13105}","rotation":"18.064865112304688","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_loop_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.9, -11.85}","scale":"{0.99873, 0.99873}","rotation":"-66.70462036132813","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.35, 11.525}","scale":"{0.99831, 0.99831}","rotation":"44.35301208496094","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-10.675, 16.475}","scale":"{0.99868, 0.99868}","rotation":"64.71124267578125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{8.8, -11.55}","scale":"{0.93690, 1.13105}","rotation":"-1.215911865234375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_loop_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.525, -11.65}","scale":"{0.99989, 0.99989}","rotation":"-75.37940979003906","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-2.05, 11.825}","scale":"{0.99991, 0.99991}","rotation":"58.18611145019531","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-7.025, 18.275}","scale":"{0.99996, 0.99996}","rotation":"78.61964416503906","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{8.325, -13.5}","scale":"{0.85216, 1.21149}","rotation":"0.5909881591796875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_loop_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.275, -11.825}","scale":"{0.99867, 0.99867}","rotation":"-72.13844299316406","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.325, 11.975}","scale":"{0.99828, 0.99828}","rotation":"51.119659423828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-8.675, 17.45}","scale":"{0.99868, 0.99868}","rotation":"71.66529846191406","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{8.825, -4.8}","scale":"{0.77104, 1.62439}","rotation":"3.78094482421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_loop_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.975, -11.775}","scale":"{0.99991, 0.99991}","rotation":"-60.81120300292969","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.225, 11.425}","scale":"{0.99994, 0.99994}","rotation":"37.693359375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.15, 15.7}","scale":"{1.00000, 1.00000}","rotation":"58.12617492675781","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{15.25, 18.2}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_loop_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.275, -11.85}","scale":"{0.99855, 0.99855}","rotation":"-53.579833984375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-6.2, 10.225}","scale":"{0.99853, 0.99853}","rotation":"30.045745849609375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-13.5, 13.475}","scale":"{0.99836, 0.99836}","rotation":"50.59483337402344","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, 20.85}","scale":"{0.89473, 1.13888}","rotation":"4.0185089111328125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_loop_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.6, -11.775}","scale":"{0.99992, 0.99992}","rotation":"-58.31443786621094","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.875, 10.55}","scale":"{0.99995, 0.99995}","rotation":"32.538543701171875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-13.15, 14.175}","scale":"{1.00000, 1.00000}","rotation":"52.972137451171875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{10.425, 1.7}","scale":"{1.16080, 1.13105}","rotation":"18.064865112304688","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.5, -9.6}","scale":"{0.99992, 0.99992}","rotation":"-33.70783996582031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.475, 2.6}","scale":"{0.99996, 0.99996}","rotation":"-20.432540893554688","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.8, -1}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 18}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.8, -10.775}","scale":"{0.99841, 0.99841}","rotation":"-34.85554504394531","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.4, 1.725}","scale":"{0.99902, 0.99902}","rotation":"-18.788818359375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.675, -1.675}","scale":"{0.99991, 0.99991}","rotation":"1.52960205078125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.675, 20.1}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.85, -10.2}","scale":"{0.99839, 0.99839}","rotation":"-37.27665710449219","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5, 1.875}","scale":"{0.99917, 0.99917}","rotation":"-14.267227172851563","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.55, -0.9}","scale":"{0.99962, 0.99962}","rotation":"6.0431365966796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, -0.1}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.975, -6.3}","scale":"{0.99831, 0.99831}","rotation":"-26.179794311523438","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.9, 5.625}","scale":"{0.99956, 0.99956}","rotation":"-7.5653228759765625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.625, 3.75}","scale":"{0.77270, 1.40416}","rotation":"177.8433380126953","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.1, -9.2}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.5, 0.075}","scale":"{0.99827, 0.99827}","rotation":"-18.71826171875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.5, 10.625}","scale":"{0.99993, 0.99993}","rotation":"-0.7850341796875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-12.4, 9.675}","scale":"{0.99894, 0.99894}","rotation":"-22.90185546875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.625, -7.6}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.425, 3.45}","scale":"{0.99837, 0.99837}","rotation":"-9.906051635742188","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.125, 12.5}","scale":"{0.99973, 0.99973}","rotation":"4.260284423828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-12.1, 12.2}","scale":"{0.99876, 0.99876}","rotation":"-31.073837280273438","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{15.925, -1.5}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.425, 3.875}","scale":"{0.99995, 0.99995}","rotation":"-13.148345947265625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.8, 11.2}","scale":"{0.99997, 0.99997}","rotation":"6.2125396728515625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-11.975, 11.425}","scale":"{1.00001, 1.00001}","rotation":"-27.76495361328125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{16.925, 5.125}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.55, 0.05}","scale":"{0.99830, 0.99830}","rotation":"-4.9378204345703125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.525, 8.75}","scale":"{0.99966, 0.99966}","rotation":"5.26654052734375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-11.6, 8.625}","scale":"{0.99871, 0.99871}","rotation":"-14.333724975585938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 20.8}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.475, -3}","scale":"{0.99813, 0.99813}","rotation":"-12.914337158203125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.675, 5.625}","scale":"{0.99970, 0.99970}","rotation":"2.5424346923828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-11.725, 5.2}","scale":"{0.99880, 0.99880}","rotation":"-12.87445068359375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{17.675, 21.3}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_010.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-3.075, -6.475}","scale":"{0.99786, 0.99786}","rotation":"-12.01580810546875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4, 3.325}","scale":"{0.99960, 0.99960}","rotation":"-1.2998046875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-11.9, 2.35}","scale":"{0.97578, 0.99429}","rotation":"-14.376388549804688","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{15.5, -0.325}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_011.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.55, -5.95}","scale":"{0.99784, 0.99784}","rotation":"-25.715362548828125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.375, 5.2}","scale":"{0.99911, 0.99911}","rotation":"-6.309295654296875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-12.15, 3.5}","scale":"{0.99922, 0.99922}","rotation":"-20.62652587890625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.5, -9.775}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_012.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.725, -4.175}","scale":"{0.99786, 0.99786}","rotation":"-30.661590576171875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.775, 7.6}","scale":"{0.99863, 0.99863}","rotation":"-11.5533447265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-12.4, 4.975}","scale":"{0.99942, 0.99942}","rotation":"-23.14697265625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{17.175, -9.2}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_013.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.7, -3.6}","scale":"{0.99745, 0.99745}","rotation":"-35.54899597167969","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.15, 8.55}","scale":"{0.99821, 0.99821}","rotation":"-16.064483642578125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-12.325, 5.3}","scale":"{0.99968, 0.99968}","rotation":"-25.875534057617188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.35, -2.825}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_idle03_014.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.4, -6.325}","scale":"{0.99719, 0.99719}","rotation":"-31.8385009765625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.425, 6.05}","scale":"{0.99898, 0.99898}","rotation":"-19.2911376953125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.725, 2.6}","scale":"{0.99990, 0.99990}","rotation":"-29.643203735351563","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{17.25, 3.25}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_end_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-2.025, -11.225}","scale":"{0.99855, 0.99855}","rotation":"-53.579833984375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.95, 10.85}","scale":"{0.99853, 0.99853}","rotation":"30.045745849609375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.25, 14.1}","scale":"{0.99836, 0.99836}","rotation":"50.59483337402344","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{8.025, -9.95}","scale":"{0.81819, 0.95852}","rotation":"0.5909881591796875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_end_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.475, -9.775}","scale":"{0.99990, 0.99990}","rotation":"-54.28352355957031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.325, 11.5}","scale":"{0.99994, 0.99994}","rotation":"26.271255493164063","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.925, 14.325}","scale":"{0.99997, 0.99997}","rotation":"46.706329345703125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{12.2, -1.925}","scale":"{0.77104, 1.62439}","rotation":"3.78094482421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_end_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.4, -8.775}","scale":"{0.99991, 0.99991}","rotation":"-50.99009704589844","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.75, 9.875}","scale":"{0.99992, 0.99992}","rotation":"15.816329956054688","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.75, 11.25}","scale":"{0.99996, 0.99996}","rotation":"36.251678466796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{13.825, 2.45}","scale":"{0.85385, 1.27044}","rotation":"3.78094482421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_end_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.825, -8.525}","scale":"{0.99848, 0.99848}","rotation":"-43.03643798828125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.85, 8}","scale":"{0.99978, 0.99978}","rotation":"3.690399169921875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.625, 7.7}","scale":"{0.99900, 0.99900}","rotation":"24.005462646484375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{14.775, 4.425}","scale":"{0.92683, 1.61407}","rotation":"1.7855377197265625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_attack02_end_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.175, -9.075}","scale":"{0.99759, 0.99759}","rotation":"-38.35304260253906","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.65, 5.3}","scale":"{0.99939, 0.99939}","rotation":"-8.282302856445313","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.2, 3.325}","scale":"{0.99883, 0.99883}","rotation":"12.008270263671875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{16.05, 15.65}","scale":"{0.96336, 0.83686}","rotation":"0.785919189453125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{1.575, -6.3}","scale":"{0.99837, 0.99837}","rotation":"-50.85469055175781","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.125, 12.5}","scale":"{0.99973, 0.99973}","rotation":"4.260284423828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.1, 12.2}","scale":"{0.99877, 0.99877}","rotation":"24.586456298828125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{15.925, -1.5}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.6, -6.975}","scale":"{0.99997, 0.99997}","rotation":"-35.617218017578125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.55, 11.45}","scale":"{0.99996, 0.99996}","rotation":"4.9490966796875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.725, 11.35}","scale":"{1.00002, 1.00002}","rotation":"25.381607055664063","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{17.55, 5.125}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.125, -6.6}","scale":"{0.99829, 0.99829}","rotation":"-27.883941650390625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.525, 9.875}","scale":"{0.99966, 0.99966}","rotation":"-0.4397430419921875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.525, 8.95}","scale":"{0.99872, 0.99872}","rotation":"19.8870849609375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{18.625, 20.8}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.725, -6.125}","scale":"{0.99813, 0.99813}","rotation":"-21.661529541015625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-2.925, 8.025}","scale":"{0.99969, 0.99969}","rotation":"-3.4064788818359375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-10.875, 6.75}","scale":"{0.99882, 0.99882}","rotation":"17.099594116210938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{19.925, 21.3}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.95, -4.975}","scale":"{0.99786, 0.99786}","rotation":"-15.22625732421875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-2.875, 6.95}","scale":"{0.99960, 0.99960}","rotation":"-5.775848388671875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-10.675, 5.35}","scale":"{0.99899, 0.99899}","rotation":"14.346038818359375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{18, -0.325}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.175, -4.45}","scale":"{0.99784, 0.99784}","rotation":"-11.25006103515625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-2.375, 6.55}","scale":"{0.99911, 0.99911}","rotation":"-3.319366455078125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-10.25, 5.275}","scale":"{0.99924, 0.99924}","rotation":"-0.95111083984375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{18.875, -9.775}","scale":"{0.99994, 0.99994}","rotation":"-12.679885864257813","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.475, -4.8}","scale":"{0.99786, 0.99786}","rotation":"-6.98724365234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-2.3, 5.7}","scale":"{0.99863, 0.99863}","rotation":"-0.851470947265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_08_001.png","tag":"0","usesCustomTag":"1","position":"{-10.175, 4.525}","scale":"{0.99943, 0.89882}","rotation":"-2.96722412109375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.8, -9.85}","scale":"{0.91072, 1.03063}","rotation":"-21.1766357421875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-1.1, -5.05}","scale":"{0.99786, 0.99786}","rotation":"-6.98724365234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.925, 5.7}","scale":"{0.99863, 0.99863}","rotation":"-0.851470947265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_09_001.png","tag":"0","usesCustomTag":"1","position":"{-9.825, 4.775}","scale":"{0.99943, 0.99943}","rotation":"-3.4761810302734375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.825, -8.775}","scale":"{1.00822, 0.88737}","rotation":"-22.7763671875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.05}","scale":"{0.99786, 0.99786}","rotation":"-6.98724365234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.175, 5.45}","scale":"{0.99863, 0.99863}","rotation":"-0.851470947265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.325, -7.4}","scale":"{1.06565, 0.81159}","rotation":"-26.215682983398438","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.05}","scale":"{0.99786, 0.99786}","rotation":"-6.98724365234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.175, 5.45}","scale":"{0.99863, 0.99863}","rotation":"-0.851470947265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.325, -7.4}","scale":"{1.06565, 0.81159}","rotation":"-26.215682983398438","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.025}","scale":"{1.00014, 0.99895}","rotation":"-6.8097381591796875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.175, 5.475}","scale":"{1.00124, 1.00002}","rotation":"-1.019287109375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.375, -7.4}","scale":"{1.06689, 0.80859}","rotation":"-26.05291748046875","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.325, -5.05}","scale":"{1.00686, 1.00273}","rotation":"-6.8062896728515625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.2, 5.475}","scale":"{1.00800, 1.00375}","rotation":"-1.5330963134765625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.45, -7.425}","scale":"{1.07353, 0.80361}","rotation":"-25.583221435546875","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.05}","scale":"{1.01576, 1.00769}","rotation":"-6.799407958984375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.175, 5.55}","scale":"{1.01690, 1.00863}","rotation":"-2.2788848876953125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.575, -7.425}","scale":"{1.08223, 0.79707}","rotation":"-25.085433959960938","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.05}","scale":"{1.02486, 1.01280}","rotation":"-6.7907867431640625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.2, 5.575}","scale":"{1.02603, 1.01364}","rotation":"-3.0308685302734375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.725, -7.425}","scale":"{1.09116, 0.79036}","rotation":"-24.58428955078125","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.375, -5.075}","scale":"{1.03229, 1.01696}","rotation":"-6.786468505859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.25, 5.65}","scale":"{1.03347, 1.01773}","rotation":"-3.5571746826171875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.825, -7.425}","scale":"{1.09843, 0.78492}","rotation":"-24.2958984375","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.4, -5.05}","scale":"{1.03642, 1.01948}","rotation":"-6.8692169189453125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.25, 5.675}","scale":"{1.03747, 1.02002}","rotation":"-4.0350341796875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.85, -7.45}","scale":"{1.10350, 0.78310}","rotation":"-24.098785400390625","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.4, -5.05}","scale":"{1.03338, 1.01756}","rotation":"-6.7847442626953125","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.275, 5.675}","scale":"{1.03460, 1.01832}","rotation":"-3.7670135498046875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.825, -7.45}","scale":"{1.09957, 0.78408}","rotation":"-24.09222412109375","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.4, -5.05}","scale":"{1.02653, 1.01374}","rotation":"-6.7907867431640625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.25, 5.65}","scale":"{1.02770, 1.01458}","rotation":"-3.250518798828125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.75, -7.45}","scale":"{1.09284, 0.78915}","rotation":"-24.562606811523438","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_010.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.375, -5.05}","scale":"{1.01750, 1.00868}","rotation":"-6.79681396484375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.225, 5.575}","scale":"{1.01866, 1.00962}","rotation":"-2.5023040771484375","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.625, -7.475}","scale":"{1.08399, 0.79577}","rotation":"-25.063201904296875","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_011.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.4, -5.05}","scale":"{1.00843, 1.00358}","rotation":"-6.8045654296875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.225, 5.525}","scale":"{1.00958, 1.00461}","rotation":"-1.7541046142578125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.475, -7.475}","scale":"{1.07505, 0.80245}","rotation":"-25.562591552734375","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_012.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.025}","scale":"{1.00125, 0.99960}","rotation":"-6.81146240234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.2, 5.5}","scale":"{1.00239, 1.00067}","rotation":"-1.0420074462890625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.375, -7.45}","scale":"{1.06801, 0.80775}","rotation":"-26.0380859375","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_loop_013.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.05}","scale":"{0.99786, 0.99786}","rotation":"-6.98724365234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.175, 5.45}","scale":"{0.99863, 0.99863}","rotation":"-0.851470947265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.325, -7.4}","scale":"{1.06565, 0.81159}","rotation":"-26.215682983398438","flipped":"{0, 0}","zValue":"2"}},"GJBeast04_sleep_end_001.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -5.05}","scale":"{0.99786, 0.99786}","rotation":"-6.98724365234375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.175, 5.45}","scale":"{0.99863, 0.99863}","rotation":"-0.851470947265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_09_001.png","tag":"0","usesCustomTag":"1","position":"{-10.075, 3.15}","scale":"{0.99943, 0.38688}","rotation":"-3.4761810302734375","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{14.325, -7.4}","scale":"{1.06565, 0.81159}","rotation":"-26.215682983398438","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_002.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.35, -4.45}","scale":"{0.92530, 1.02381}","rotation":"-7.7447967529296875","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.125, 6.35}","scale":"{0.92444, 1.02600}","rotation":"-0.946746826171875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-8.85, 3.775}","scale":"{1.27264, 0.72824}","rotation":"-3.8557891845703125","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{13.225, -6.85}","scale":"{1.00853, 0.81840}","rotation":"-28.656997680664063","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_003.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{2.175, -5.025}","scale":"{0.99836, 0.99836}","rotation":"-45.407958984375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.725, 14.225}","scale":"{0.99973, 0.99973}","rotation":"9.707412719726563","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-9.675, 14.7}","scale":"{0.99878, 1.39113}","rotation":"-3.9280242919921875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{19.625, 18.6}","scale":"{0.95608, 0.82501}","rotation":"2.7012176513671875","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_004.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{1.275, -3.25}","scale":"{0.99813, 0.99813}","rotation":"-32.60188293457031","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-1.8, 12.825}","scale":"{0.99970, 0.99970}","rotation":"7.7439422607421875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-9.85, 13.175}","scale":"{0.99880, 0.99880}","rotation":"28.249496459960938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_04_001.png","tag":"1","usesCustomTag":"1","position":"{19.05, 27.8}","scale":"{0.92128, 1.17271}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_005.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{0.3, -4.725}","scale":"{0.99787, 0.99787}","rotation":"-24.97418212890625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-3.125, 8.95}","scale":"{0.99960, 0.99960}","rotation":"-1.2998046875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-11.025, 7.975}","scale":"{0.99898, 0.99898}","rotation":"18.822494506835938","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_05_001.png","tag":"1","usesCustomTag":"1","position":"{16.375, 5.3}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_006.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.425, -6.325}","scale":"{0.99785, 0.99785}","rotation":"-24.232681274414063","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.25, 6.95}","scale":"{0.99911, 0.99911}","rotation":"-6.309295654296875","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.025, 5.25}","scale":"{0.99922, 0.99922}","rotation":"13.799850463867188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.625, -8.025}","scale":"{0.99995, 0.99995}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_007.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.475, -5.425}","scale":"{0.99786, 0.99786}","rotation":"-26.47406005859375","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-4.775, 7.6}","scale":"{0.99863, 0.99863}","rotation":"-11.5533447265625","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.4, 5.225}","scale":"{0.99943, 0.99943}","rotation":"8.550094604492188","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{17.175, -9.2}","scale":"{0.91072, 1.16307}","rotation":"-7.7250518798828125","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_008.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.325, -4.225}","scale":"{0.99745, 0.99745}","rotation":"-30.073257446289063","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.15, 8.55}","scale":"{0.99821, 0.99821}","rotation":"-16.064483642578125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.575, 5.55}","scale":"{0.99969, 0.99969}","rotation":"4.0350341796875","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_06_001.png","tag":"1","usesCustomTag":"1","position":"{16.35, -2.825}","scale":"{0.95608, 0.82501}","rotation":"-2.7457122802734375","flipped":"{0, 0}","zValue":"3"}},"GJBeast04_sleep_end_009.png":{"sprite_0":{"texture":"GJBeast04_02_001.png","tag":"2","usesCustomTag":"0","position":"{-0.15, -5.325}","scale":"{0.99719, 0.99719}","rotation":"-31.8385009765625","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast04_01_001.png","tag":"3","usesCustomTag":"0","position":"{-5.175, 7.05}","scale":"{0.99898, 0.99898}","rotation":"-19.2911376953125","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast04_03_001.png","tag":"0","usesCustomTag":"1","position":"{-12.475, 3.6}","scale":"{0.99992, 0.99992}","rotation":"1.026275634765625","flipped":"{0, 0}","zValue":"2"},"sprite_3":{"texture":"GJBeast04_07_001.png","tag":"1","usesCustomTag":"1","position":"{17.5, 4.25}","scale":"{0.96206, 0.85711}","rotation":"1.752349853515625","flipped":"{0, 0}","zValue":"3"}}}}
\ No newline at end of file
diff --git a/assets/sheets/GJBeast05_AnimDesc.json b/assets/sheets/GJBeast05_AnimDesc.json
new file mode 100644
index 00000000..31c3a6b1
--- /dev/null
+++ b/assets/sheets/GJBeast05_AnimDesc.json
@@ -0,0 +1 @@
+{"usedTextures":{"texture_0":{"texture":"0","tag":"0"},"texture_1":{"texture":"0","tag":"1"},"texture_2":{"texture":"0","tag":"2"}},"animationContainer":{"GJBeast05_idle01_001.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_002.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99353, 0.99353}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{0.99818, 0.98137}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.075}","scale":"{0.99431, 0.99431}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_003.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.98036, 0.98036}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.175}","scale":"{0.99316, 0.92967}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.95}","scale":"{0.98143, 0.98143}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_004.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.95946, 0.95946}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.225}","scale":"{0.98497, 0.84535}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.75}","scale":"{0.96265, 0.96265}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_005.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.93944, 0.93944}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.275}","scale":"{0.97656, 0.75879}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.55}","scale":"{0.94223, 0.94223}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_006.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.92738, 0.92738}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.3}","scale":"{0.97116, 0.70322}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.4}","scale":"{0.92513, 0.92513}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_007.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.92159, 0.92159}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.3}","scale":"{0.96906, 0.68155}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.275}","scale":"{0.91376, 0.91376}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_008.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.92790, 0.92790}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.325}","scale":"{0.97054, 0.69757}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.225}","scale":"{0.90817, 0.90817}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_009.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.94078, 0.94078}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.275}","scale":"{0.97473, 0.74207}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.325}","scale":"{0.91814, 0.91814}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_010.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.96126, 0.96126}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.25}","scale":"{0.98155, 0.81465}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.525}","scale":"{0.94145, 0.94145}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_011.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.98087, 0.98087}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.2}","scale":"{0.98857, 0.88916}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.775}","scale":"{0.96973, 0.96973}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_012.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99266, 0.99266}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.175}","scale":"{0.99306, 0.93698}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.975}","scale":"{0.99057, 0.99057}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle01_013.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99835, 0.99835}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.175}","scale":"{0.99484, 0.95566}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.05}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_001.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_002.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99353, 0.99353}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.125}","scale":"{0.99818, 0.97482}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.95}","scale":"{0.98326, 0.86502}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_003.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.98036, 0.98036}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.075}","scale":"{0.99316, 0.90492}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.6}","scale":"{0.94566, 0.56187}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_004.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.95946, 0.95946}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4}","scale":"{0.98497, 0.79095}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.25}","scale":"{0.91083, 0.28102}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_005.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.93944, 0.93944}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.925}","scale":"{0.97656, 0.67393}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.1}","scale":"{0.89540, 0.15660}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_006.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.92738, 0.92738}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.875}","scale":"{0.97116, 0.59883}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast05_idle02_007.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.92159, 0.92159}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.85}","scale":"{0.96906, 0.56953}","rotation":"0","flipped":"{0, 0}","zValue":"1"}},"GJBeast05_idle02_008.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.92984, 0.92984}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -3.875}","scale":"{0.97113, 0.60114}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.1}","scale":"{0.89540, 0.15660}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_009.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.94827, 0.94827}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -3.975}","scale":"{0.97720, 0.69208}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.225}","scale":"{0.91211, 0.27805}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_010.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.97386, 0.97386}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.075}","scale":"{0.98596, 0.82309}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.525}","scale":"{0.94972, 0.55081}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_011.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99088, 0.99088}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.15}","scale":"{0.99242, 0.91945}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 4.8}","scale":"{0.98454, 0.80353}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle02_012.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99835, 0.99835}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.175}","scale":"{0.99484, 0.95566}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.925}","scale":"{1.00000, 0.91550}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_001.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_002.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, -0.025}","scale":"{0.92587, 0.92587}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.825}","scale":"{0.91162, 0.83623}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.65}","scale":"{0.91162, 0.81227}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_003.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, -0.05}","scale":"{0.77133, 0.77133}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.125, -3.3}","scale":"{0.76563, 0.56567}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0, 3.85}","scale":"{0.76563, 0.50217}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_004.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, -0.05}","scale":"{0.70395, 0.70395}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.125, -3.15}","scale":"{0.72273, 0.48621}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0, 3.625}","scale":"{0.72273, 0.41107}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_005.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0.025, -0.05}","scale":"{1.45740, 1.45740}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{0, -6.8}","scale":"{1.61816, 2.42987}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0, 10.35}","scale":"{1.61816, 1.61816}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_006.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, -0.025}","scale":"{1.25885, 1.25885}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.025, -6.275}","scale":"{1.50981, 2.12668}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 8.925}","scale":"{1.46747, 1.46747}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_007.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.10809, 1.10809}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.075, -5.275}","scale":"{1.30627, 1.55730}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 7.75}","scale":"{1.34320, 1.34320}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack01_008.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.04515, 1.04515}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.1, -4.875}","scale":"{1.22319, 1.32480}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 6.8}","scale":"{1.24365, 1.24365}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_001.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.625}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 6.1}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_002.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.98848, 0.98848}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.575}","scale":"{1.15952, 1.14468}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 6}","scale":"{1.15956, 1.15956}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_003.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.96603, 0.96603}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.5}","scale":"{1.13971, 1.08372}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.775}","scale":"{1.14319, 1.14319}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_004.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.93303, 0.93303}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.425}","scale":"{1.10744, 0.98436}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0, 5.4}","scale":"{1.12065, 1.12065}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_005.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.90314, 0.90314}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.3}","scale":"{1.07431, 0.88234}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0, 5.075}","scale":"{1.09940, 1.09940}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_006.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.88492, 0.88492}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.25}","scale":"{1.05305, 0.81685}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0, 4.85}","scale":"{1.08490, 1.08490}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_007.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0.05}","scale":"{0.87589, 0.87589}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.225}","scale":"{1.04477, 0.79132}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.75}","scale":"{1.07813, 1.07813}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_008.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.075}","scale":"{0.88661, 0.88661}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.25}","scale":"{1.05127, 0.81194}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.875}","scale":"{1.08417, 1.08417}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_009.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.90753, 0.90753}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.3}","scale":"{1.06938, 0.86920}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.075}","scale":"{1.09818, 1.09818}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_010.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.93831, 0.93831}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.425}","scale":"{1.09892, 0.96259}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.375}","scale":"{1.11745, 1.11745}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_011.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.96620, 0.96620}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.525}","scale":"{1.12923, 1.05846}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.675}","scale":"{1.13562, 1.13562}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_012.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.98317, 0.98317}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.6}","scale":"{1.14870, 1.12000}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.85}","scale":"{1.14801, 1.14801}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack01_013.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99162, 0.99162}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.625}","scale":"{1.15631, 1.14401}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.95}","scale":"{1.15384, 1.15384}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_001.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.625}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 6.1}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_002.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99550, 0.98848}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.55}","scale":"{1.15952, 1.11092}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.825}","scale":"{1.15956, 1.10231}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_003.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.98672, 0.96603}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.35}","scale":"{1.13971, 0.95619}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.2}","scale":"{1.14319, 0.95348}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_004.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.97382, 0.93303}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.1}","scale":"{1.10744, 0.70389}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.35}","scale":"{1.12065, 0.74875}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_005.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.96213, 0.90314}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.2, -3.8}","scale":"{1.07431, 0.44490}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 3.55}","scale":"{1.09940, 0.55563}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_006.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.95500, 0.88492}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.2, -3.6}","scale":"{1.05305, 0.27866}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 3}","scale":"{1.08490, 0.42403}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_007.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0.05}","scale":"{0.95148, 0.87589}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.4}","scale":"{1.04477, 0.21382}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 2.75}","scale":"{1.07813, 0.36223}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_008.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.13698}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -6.3}","scale":"{1.16666, 1.85388}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 6.85}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_009.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.18591}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -6.3}","scale":"{1.16666, 2.19952}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 8.1}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_010.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99585, 1.06537}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -5.525}","scale":"{1.16193, 1.53180}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 6.425}","scale":"{1.16052, 1.16052}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_011.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99362, 1.02675}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.125, -4.975}","scale":"{1.15894, 1.32681}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0, 6.2}","scale":"{1.15717, 1.15717}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_012.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99226, 1.00323}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.125, -4.65}","scale":"{1.15703, 1.19528}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0, 6}","scale":"{1.15488, 1.15488}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack02_013.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99162, 0.99162}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.625}","scale":"{1.15631, 1.14401}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.95}","scale":"{1.15384, 1.15384}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_001.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_002.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.05, 0.35}","scale":"{0.95256, 1.07899}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{0.94879, 0.58807}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{0.84642, 1.08662}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_003.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.05, 0.425}","scale":"{0.94405, 1.09315}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{0.93962, 0.51424}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{0.81889, 1.10214}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_004.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.05, 0.425}","scale":"{0.94101, 1.09822}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{0.93633, 0.48778}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{0.80902, 1.10771}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_005.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.425}","scale":"{0.93915, 1.10132}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.15}","scale":"{0.93433, 0.47165}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.125}","scale":"{0.80301, 1.11110}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_006.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.05, 0.35}","scale":"{0.94821, 1.08549}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.15}","scale":"{0.94189, 0.53226}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.1}","scale":"{0.83452, 1.09331}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_007.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.225}","scale":"{0.96974, 1.04805}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.15}","scale":"{0.96368, 0.70670}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.075}","scale":"{0.90532, 1.05338}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_008.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.99014, 1.01259}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.175}","scale":"{0.98631, 0.88751}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.025}","scale":"{0.97092, 1.01637}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_idle03_009.png":{"sprite_0":{"texture":"GJBeast05_02_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99835, 0.99835}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.175}","scale":"{0.99484, 0.95566}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_04_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.05}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_001.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.00000}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.625}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 6.1}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_002.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99550, 0.98848}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.55}","scale":"{1.15952, 1.11008}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.825}","scale":"{1.15956, 1.10231}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_003.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.98672, 0.96603}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.375}","scale":"{1.13971, 0.95305}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.2}","scale":"{1.14319, 0.95348}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_004.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.97382, 0.93303}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.05}","scale":"{1.10744, 0.69696}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.35}","scale":"{1.12065, 0.74875}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_005.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.96213, 0.90314}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.2, -3.7}","scale":"{1.07431, 0.43407}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 3.55}","scale":"{1.09940, 0.55563}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_006.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.95500, 0.88492}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.2, -3.525}","scale":"{1.05305, 0.26534}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 3}","scale":"{1.08490, 0.42403}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_007.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0.05}","scale":"{0.95148, 0.87589}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.325}","scale":"{1.04477, 0.19954}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 2.75}","scale":"{1.07813, 0.36223}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_toAttack03_008.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.13696}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -6.3}","scale":"{1.16666, 1.85388}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 6.85}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack03_001.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.18591}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -6.3}","scale":"{1.16666, 2.19952}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 8.1}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack03_002.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.05, 0}","scale":"{0.99736, 1.10909}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -5.875}","scale":"{1.16377, 1.79459}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 7.05}","scale":"{1.16286, 1.16286}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack03_003.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99585, 1.06537}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -5.525}","scale":"{1.16193, 1.53180}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 6.425}","scale":"{1.16052, 1.16052}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_attack03_004.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99876, 1.15056}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -6}","scale":"{1.16533, 2.01672}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 7.575}","scale":"{1.16476, 1.16476}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_001.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{1.00000, 1.18591}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -6.3}","scale":"{1.16666, 2.19952}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 8.1}","scale":"{1.16666, 1.16666}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_002.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0}","scale":"{0.99403, 1.14781}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -5.9}","scale":"{1.15166, 1.94327}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 7.45}","scale":"{1.15576, 1.06781}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_003.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.97552, 1.02953}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -4.65}","scale":"{1.10516, 1.14748}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.4}","scale":"{1.12198, 0.76089}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_004.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.95728, 0.91290}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.175, -3.4}","scale":"{1.05931, 0.36293}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 3.4}","scale":"{1.08868, 0.45828}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_005.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0.05}","scale":"{0.95148, 0.87589}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -2.975}","scale":"{1.04477, 0.11389}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 2.75}","scale":"{1.07813, 0.36223}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_006.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.075}","scale":"{0.95642, 0.89015}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.125}","scale":"{1.05850, 0.24103}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 3.15}","scale":"{1.08745, 0.45992}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_007.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.05}","scale":"{0.97057, 0.93094}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -3.525}","scale":"{1.09784, 0.60417}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 4.275}","scale":"{1.11415, 0.73898}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_008.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{-0.025, 0.025}","scale":"{0.98578, 0.97479}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.125, -3.95}","scale":"{1.14008, 0.99435}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.025, 5.475}","scale":"{1.14282, 1.03883}","rotation":"0","flipped":"{0, 0}","zValue":"2"}},"GJBeast05_fromAttack03_009.png":{"sprite_0":{"texture":"GJBeast05_01_001.png","tag":"0","usesCustomTag":"1","position":"{0, 0}","scale":"{0.99162, 0.99162}","rotation":"0","flipped":"{0, 0}","zValue":"0"},"sprite_1":{"texture":"GJBeast05_05_001.png","tag":"1","usesCustomTag":"1","position":"{-0.15, -4.625}","scale":"{1.15631, 1.14401}","rotation":"0","flipped":"{0, 0}","zValue":"1"},"sprite_2":{"texture":"GJBeast05_06_001.png","tag":"2","usesCustomTag":"1","position":"{0.05, 5.95}","scale":"{1.15384, 1.15384}","rotation":"0","flipped":"{0, 0}","zValue":"2"}}}}
\ No newline at end of file
diff --git a/index.html b/index.html
index bd04cb8b..3a46fbc2 100644
--- a/index.html
+++ b/index.html
@@ -39,9 +39,9 @@
(function () {
var GD_PROXY_HOSTS = [
"https://gd-proxy.webdashers.workers.dev",
- "https://webdashers.webdashersdevelopement.workers.dev/",
- "fallbackgdproxy.webdashers.workers.dev",
- "fallback2.webdashers.workers.dev"
+ "https://webdashers.webdashersdevelopement.workers.dev",
+ "https://fallbackgdproxy.webdashers.workers.dev",
+ "https://fallback2.webdashers.workers.dev"
];
window._gdProxyUrl = GD_PROXY_HOSTS[0];
window._gdProxyHosts = GD_PROXY_HOSTS;
@@ -49,12 +49,17 @@
var nativeFetch = window.fetch.bind(window);
function matchingHost(url) {
for (var i = 0; i < GD_PROXY_HOSTS.length; i++) {
- if (url.indexOf(GD_PROXY_HOSTS[i]) === 0) return GD_PROXY_HOSTS[i];
+ var h = GD_PROXY_HOSTS[i].replace(/\/$/, "");
+ if (url.indexOf(h) === 0) return GD_PROXY_HOSTS[i];
}
return null;
}
function withHost(url, oldHost, newHost) {
- return newHost + url.slice(oldHost.length);
+ var cleanOld = oldHost.replace(/\/$/, "");
+ var cleanNew = newHost.replace(/\/$/, "");
+ var path = url.slice(cleanOld.length);
+ if (path.indexOf('/') !== 0) path = '/' + path;
+ return cleanNew + path;
}
window.fetch = function (input, init) {
var isRequestObj = (typeof Request !== "undefined") && (input instanceof Request);
@@ -97,6 +102,7 @@
})();
+