From a888aaff9288af507f4f1d96e4b34f04f61add7b Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Mon, 7 Sep 2026 22:07:25 -0500 Subject: [PATCH 1/8] added a ton of triggers --- assets/scripts/core/game-scene.js | 171 +++- assets/scripts/core/level-editor.js | 92 +++ assets/scripts/core/level.js | 1166 +++++++++++++++++++++++++-- index.html | 15 +- 4 files changed, 1321 insertions(+), 123 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 06a32a59..d03aaab6 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -1133,7 +1133,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 => { @@ -7124,6 +7124,7 @@ _showwippopup() { } this._applyLevelStartOptions(); + this._level.checkToggleTriggers?.(0); } _pushButton(ignoreMacro = false) { const objectsUnderPointer = this.input.manager.hitTest( @@ -7449,6 +7450,22 @@ _showwippopup() { 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(); if (this._orbGfx) { this._orbGfx.clear(); } this._colorManager.reset(); @@ -7762,13 +7779,29 @@ _showwippopup() { 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?.(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.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 +7860,12 @@ _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.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); @@ -8139,12 +8172,12 @@ _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; + 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 +8255,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 +8269,7 @@ _showwippopup() { } if (this._state.isDead) { if (!this._deathSoundPlayed) { + this._level.triggerOnDeath?.(this._colorManager); if (!this._audio._shouldUsePracticeSong()) { this._audio.stopMusic(); } @@ -8544,12 +8578,12 @@ _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.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); @@ -8590,6 +8624,81 @@ _showwippopup() { 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-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..23e4ea0d 100644 --- a/assets/scripts/core/level.js +++ b/assets/scripts/core/level.js @@ -666,6 +666,45 @@ 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._groupToggledOff = {}; + this._shakeTriggers = []; + this._shakeTriggerIdx = 0; + this._touchShakeTriggerActivated = new Set(); + this.shakeOffsetX = 0; + this.shakeOffsetY = 0; + 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 +717,7 @@ window.LevelObject = class LevelObject { this._resetobject = {}; this._resetremovedobject = {}; this._groupOffsets = {}; + this._groupRotations = {}; this._groupOpacity = {}; this._groupColliders = {}; this._sections = []; @@ -915,6 +955,33 @@ 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; + } + } + } + + 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 +1016,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; } @@ -2241,6 +2314,141 @@ 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[72] ?? 1)), + delay: Math.max(0, parseFloat(_raw[73] ?? 0)), + offset: parseFloat(_raw[74] ?? 0) * 2, + maxSpeed: Math.max(0, parseFloat(_raw[75] ?? 0)) * 2, + duration: Math.max(0, parseFloat(_raw[10] ?? 0)) + }); + } + + if (levelObj.id === 1347 || levelObj.id === 1817) { + 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] ?? _raw[84] ?? 1)), + interval: Math.max(0, parseFloat(_raw[84] ?? _raw[85] ?? 0)) + }); + } + + 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" + }); + } + + 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, @@ -3153,6 +3361,16 @@ 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._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 +3783,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 +3821,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 +3838,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 +3850,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 +3949,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 +3967,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 +4077,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 +4222,18 @@ 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._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) { @@ -4077,67 +4366,770 @@ 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); - } - } - } + for (const spr of sprites) { + this._applyGroupedSpriteTransform(spr); + } + for (const col of colliders) { + this._applyGroupedColliderTransform(col); + } + + if (progress >= 1) { + this._activeRotateTweens.splice(i, 1); + } else { + i++; + } + } + } + + _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); + } + + 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 initialScreenY = col._eeInitialBaseY !== undefined ? col._eeInitialBaseY : (col._origBaseY ?? col.y); + groupInitialGDY += (typeof b === "function" ? b(initialScreenY) : (460 - initialScreenY)); + 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 { - if (sprites && !trig.lockRotation) { - for (const spr of sprites) { - if (!spr || !spr.active) continue; - spr.rotation += deltaRot; + 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 isVisible = 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++; + } + } + + 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(); + if (typeof spr.setVisible === "function") spr.setVisible(true); + spr.active = true; + } + } + + 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.05, Number(trig.duration) || 0.2); + const str = Math.max(0.1, Number(trig.strength) || 1); + const durationMs = Math.round(dur * 1000); + const amplitude = Math.max(1, Math.min(40, str * 4)); + const scene = this._scene; + if (!scene?.time) return; + const steps = Math.max(4, Math.round(dur * 30)); + const stepMs = Math.round(durationMs / steps); + let remaining = steps; + const self = this; + const doStep = () => { + if (remaining <= 0) { self.shakeOffsetX = 0; self.shakeOffsetY = 0; return; } + const t = remaining / steps; + const mag = amplitude * t; + self.shakeOffsetX = (Math.random() * 2 - 1) * mag; + self.shakeOffsetY = (Math.random() * 2 - 1) * mag; + remaining--; + scene.time.delayedCall(stepMs, doStep); + }; + doStep(); + } + + 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.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(isHolding, isPressed, colorManager) { + for (const trig of this._activeTouchTriggers) { + if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) continue; + 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 }); } } - if (colliders) { - for (const col of colliders) { - this._applyRotateTriggerColliderDelta(col, deltaRot, null, null, !!trig.lockRotation); + } 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 }); + } } } } - if (progress >= 1) { - this._activeRotateTweens.splice(i, 1); - } else { - i++; + } + } + + 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]) { diff --git a/index.html b/index.html index bd04cb8b..a8bd4706 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); From 70ecbdd56a20b1efcbf70d24e0aa1441bf416db1 Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Mon, 14 Sep 2026 22:01:51 -0500 Subject: [PATCH 2/8] trigger engine fixes --- .gitignore | 3 +- assets/scripts/core/game-scene.js | 6 ++++ assets/scripts/core/level.js | 48 ++++++++++++++++++++++++++----- assets/scripts/core/player.js | 19 +++++++----- 4 files changed, 61 insertions(+), 15 deletions(-) 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/game-scene.js b/assets/scripts/core/game-scene.js index d03aaab6..0e3c814e 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -8621,6 +8621,12 @@ _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); diff --git a/assets/scripts/core/level.js b/assets/scripts/core/level.js index 23e4ea0d..9a1795fe 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 = []; @@ -2235,6 +2236,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))) @@ -2665,7 +2667,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); @@ -2676,7 +2679,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); @@ -2928,7 +2932,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)); @@ -4283,11 +4288,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) { @@ -4329,6 +4353,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]) { @@ -4455,8 +4480,8 @@ window.LevelObject = class LevelObject { const colliders = this._getUniqueGroupColliders(targetGroup); for (const col of colliders) { if (!col) continue; - const initialScreenY = col._eeInitialBaseY !== undefined ? col._eeInitialBaseY : (col._origBaseY ?? col.y); - groupInitialGDY += (typeof b === "function" ? b(initialScreenY) : (460 - initialScreenY)); + const initialWorldY = col._eeInitialBaseY !== undefined ? col._eeInitialBaseY : (col._origBaseY ?? col.y); + groupInitialGDY += Number(initialWorldY) || 0; n++; } } @@ -5252,6 +5277,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) { @@ -5446,11 +5478,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; diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index 0ee23f03..f1ba6e1d 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -4174,6 +4174,7 @@ if (this.p.isFlying || this.p.isUfo) { checkCollisions(_0x2f5078) { this.noclipStats.totalFrames++; + this._touchEdgeStep = (this._touchEdgeStep || 0) + 1; this.p.diedThisFrame = false; if (this.p._spiderTeleportNoclipDeathPending) { this.p.diedThisFrame = true; @@ -4465,19 +4466,23 @@ if (this.p.isFlying || this.p.isUfo) { if (makeportalguide) { this._makeportalguide(gameObj); } else if (_colType === jumpPadType) { - if (!this._isObjectActivated(gameObj)) { - this._setObjectActivated(gameObj, true); + // Pads fire on every distinct touch (GD bumpPlayer has no used + // flag). Touch-edge per player so resting on a pad does not spam. + if (!gameObj._padTouchStepByPlayer) gameObj._padTouchStepByPlayer = {}; + const _padKey = this._getActivationKey(); + const _lastPadTouch = gameObj._padTouchStepByPlayer[_padKey]; + gameObj._padTouchStepByPlayer[_padKey] = this._touchEdgeStep; + if (_lastPadTouch === undefined || _lastPadTouch < this._touchEdgeStep - 1) { this._orbpadHitEffect(gameObj); const _padId = gameObj.padId; if (_padId === 67) { const now = Date.now(); - if (!window.lastbluepad) { - window.lastbluepad = 0; - } - if (now - window.lastbluepad < 20) { + const _bluePadKey = this._getActivationKey(); + this._lastBluePadHit ||= {}; + if (this._lastBluePadHit[_bluePadKey] && now - this._lastBluePadHit[_bluePadKey] < 20) { continue; } - window.lastbluepad = now; + this._lastBluePadHit[_bluePadKey] = now; } const _grav = 2; const _fm = this.flipMod(); From 826c8ee1c4eb7ee9d0ec1d8b0ac773961f3dfdd4 Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Wed, 16 Sep 2026 17:31:59 -0500 Subject: [PATCH 3/8] revert orbs and pads(mb guys) --- assets/scripts/core/player.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/assets/scripts/core/player.js b/assets/scripts/core/player.js index f1ba6e1d..0ee23f03 100644 --- a/assets/scripts/core/player.js +++ b/assets/scripts/core/player.js @@ -4174,7 +4174,6 @@ if (this.p.isFlying || this.p.isUfo) { checkCollisions(_0x2f5078) { this.noclipStats.totalFrames++; - this._touchEdgeStep = (this._touchEdgeStep || 0) + 1; this.p.diedThisFrame = false; if (this.p._spiderTeleportNoclipDeathPending) { this.p.diedThisFrame = true; @@ -4466,23 +4465,19 @@ if (this.p.isFlying || this.p.isUfo) { if (makeportalguide) { this._makeportalguide(gameObj); } else if (_colType === jumpPadType) { - // Pads fire on every distinct touch (GD bumpPlayer has no used - // flag). Touch-edge per player so resting on a pad does not spam. - if (!gameObj._padTouchStepByPlayer) gameObj._padTouchStepByPlayer = {}; - const _padKey = this._getActivationKey(); - const _lastPadTouch = gameObj._padTouchStepByPlayer[_padKey]; - gameObj._padTouchStepByPlayer[_padKey] = this._touchEdgeStep; - if (_lastPadTouch === undefined || _lastPadTouch < this._touchEdgeStep - 1) { + if (!this._isObjectActivated(gameObj)) { + this._setObjectActivated(gameObj, true); this._orbpadHitEffect(gameObj); const _padId = gameObj.padId; if (_padId === 67) { const now = Date.now(); - const _bluePadKey = this._getActivationKey(); - this._lastBluePadHit ||= {}; - if (this._lastBluePadHit[_bluePadKey] && now - this._lastBluePadHit[_bluePadKey] < 20) { + if (!window.lastbluepad) { + window.lastbluepad = 0; + } + if (now - window.lastbluepad < 20) { continue; } - this._lastBluePadHit[_bluePadKey] = now; + window.lastbluepad = now; } const _grav = 2; const _fm = this.flipMod(); From be20ffa320e2a41cede66e72bc157ab4b3223e09 Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Wed, 16 Sep 2026 18:06:29 -0500 Subject: [PATCH 4/8] additive blending per color channel --- assets/scripts/core/level.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/scripts/core/level.js b/assets/scripts/core/level.js index 9a1795fe..60ec3831 100644 --- a/assets/scripts/core/level.js +++ b/assets/scripts/core/level.js @@ -1210,6 +1210,7 @@ window.LevelObject = class LevelObject { } _setUpSettings(settingsStr) { this._initialColors = {}; + this._channelBlending = {}; this._backgroundId = null; this._groundId = null; if (!settingsStr) return; @@ -1237,6 +1238,7 @@ window.LevelObject = class LevelObject { g: parseInt(colorProps[2] || "255", 10), b: parseInt(colorProps[3] || "255", 10) }; + this._channelBlending[channelId] = colorProps[15] === "1"; } } } @@ -2561,6 +2563,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; } From aa24103f8298f53fd70078bed2315427a18d7771 Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Sun, 20 Sep 2026 15:42:25 -0500 Subject: [PATCH 5/8] shake trigger improvements and animated beasts! --- assets/scripts/core/beast-anim.js | 431 ++++++++++++++++++++++++++ assets/scripts/core/game-scene.js | 171 +++++++++- assets/scripts/core/level.js | 369 ++++++++++++++++++---- assets/scripts/core/loading-screen.js | 10 + assets/scripts/core/player.js | 10 + assets/scripts/core/triggers.js | 3 + assets/scripts/game/allObjects.js | 20 +- assets/sheets/GJBeast01_AnimDesc.json | 1 + assets/sheets/GJBeast02_AnimDesc.json | 1 + assets/sheets/GJBeast03_AnimDesc.json | 1 + assets/sheets/GJBeast04_AnimDesc.json | 1 + assets/sheets/GJBeast05_AnimDesc.json | 1 + index.html | 1 + 13 files changed, 951 insertions(+), 69 deletions(-) create mode 100644 assets/scripts/core/beast-anim.js create mode 100644 assets/sheets/GJBeast01_AnimDesc.json create mode 100644 assets/sheets/GJBeast02_AnimDesc.json create mode 100644 assets/sheets/GJBeast03_AnimDesc.json create mode 100644 assets/sheets/GJBeast04_AnimDesc.json create mode 100644 assets/sheets/GJBeast05_AnimDesc.json diff --git a/assets/scripts/core/beast-anim.js b/assets/scripts/core/beast-anim.js new file mode 100644 index 00000000..c4e55a64 --- /dev/null +++ b/assets/scripts/core/beast-anim.js @@ -0,0 +1,431 @@ +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_ID_FOR_NAME = { + GJBeast01: "918", + GJBeast02: "1327", + GJBeast03: "1328", + GJBeast04: "1584", + GJBeast05: "2012" +}; + +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"], + 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.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) { + 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; + return { + objectId, + animName, + desc, + animId: 0, + base: null, + frameIdx: 0, + timer: 0, + rng: Math.random(), + pendingAnim: null, + tweenTimer: 0 + }; +} + +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") { + if (beastAnimFrameExists(state.animName, "attack01_loop")) { + beastAnimSetBase(state, "attack01_loop", 1); + beastAnimRandomizeTimer(state); + } + 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") { + if (beastAnimFrameExists(state.animName, "attack02_end")) { + beastAnimSetBase(state, "attack02_end", 5); + 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 === "attack02" || prev === "attack03") { + if (prev === "attack01") { + 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; + } + } + if (id === 1327 || id === 1328) { + beastAnimSetBase(state, "idle01", 0); + 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; + 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 0e3c814e..9b9f62cb 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; @@ -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; @@ -7454,6 +7464,7 @@ _showwippopup() { this._level.resetFollowPlayerYTriggers?.(); this._level.resetFollowTriggers?.(); this._level.resetToggleTriggers?.(); + this._level.resetAnimationTriggers?.(); this._level.resetShakeTriggers?.(); this._level.resetOnDeathTriggers?.(); this._level.resetTouchTriggers?.(); @@ -7783,6 +7794,7 @@ _showwippopup() { this._level.resetFollowPlayerYTriggers?.(); this._level.resetFollowTriggers?.(); this._level.resetToggleTriggers?.(); + this._level.resetAnimationTriggers?.(); this._level.resetShakeTriggers?.(); this._level.resetOnDeathTriggers?.(); this._level.resetTouchTriggers?.(); @@ -7796,6 +7808,7 @@ _showwippopup() { this._level.checkOnDeathTriggers?.(checkpoint.x); this._level.checkTouchTriggers?.(checkpoint.x); this._level.resetVisibility(); + 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); @@ -7860,6 +7873,7 @@ _showwippopup() { const _0x56287b = this._cameraX; this._cameraX = this._playerWorldX - centerX; this._cameraXRef._v = this._cameraX; + 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); @@ -7873,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(); } } @@ -8172,6 +8189,9 @@ _showwippopup() { const slidePlayerScreenX = this._playerWorldX - this._cameraX; this._player.updateGroundRotation(slideDelta * d); this._player.syncSprites(this._cameraX, this._cameraY, deltaTime / 1000, this._getMirrorXOffset(slidePlayerScreenX)); + 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); @@ -8363,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) { @@ -8578,6 +8713,7 @@ _showwippopup() { if (!this._endCameraOverride) { this._updateCameraY(quantizedDelta); } + 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); @@ -8654,6 +8790,13 @@ _showwippopup() { } 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) { @@ -8681,9 +8824,19 @@ _showwippopup() { 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); + 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); @@ -8732,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.js b/assets/scripts/core/level.js index 60ec3831..16abffdb 100644 --- a/assets/scripts/core/level.js +++ b/assets/scripts/core/level.js @@ -681,12 +681,17 @@ window.LevelObject = class LevelObject { 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 = []; @@ -968,6 +973,8 @@ window.LevelObject = class LevelObject { } } + this.checkAnimationTriggers(targetX); + if (Array.isArray(this._pickupTriggers)) { this.checkPickupTriggers(targetX, colorManager); } @@ -1761,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) { @@ -2337,15 +2349,15 @@ window.LevelObject = class LevelObject { y: levelObj.y * 2, touchTriggered: String(_raw?.[11] ?? _raw?.["11"] ?? "0") === "1", targetGroup: parseInt(_raw[51] ?? 0, 10), - speed: Math.max(0, parseFloat(_raw[72] ?? 1)), - delay: Math.max(0, parseFloat(_raw[73] ?? 0)), - offset: parseFloat(_raw[74] ?? 0) * 2, - maxSpeed: Math.max(0, parseFloat(_raw[75] ?? 0)) * 2, + 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 || levelObj.id === 1817) { + if (levelObj.id === 1347) { const _raw = levelObj._raw; this._followTriggers.push({ ...triggerBase, @@ -2380,8 +2392,20 @@ window.LevelObject = class LevelObject { 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] ?? _raw[84] ?? 1)), - interval: Math.max(0, parseFloat(_raw[84] ?? _raw[85] ?? 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) }); } @@ -2407,7 +2431,9 @@ window.LevelObject = class LevelObject { targetGroup: parseInt(_raw[51] ?? 0, 10), toggleType: parseInt(_raw[56] ?? 0, 10), dualTouch: String(_raw[81] ?? "0") === "1", - holdMode: String(_raw[82] ?? "0") === "1" + holdMode: String(_raw[82] ?? "0") === "1", + dualAction: parseInt(_raw[198] ?? 0, 10), + specialMode: parseInt(_raw[89] ?? 0, 10) }); } @@ -2900,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); @@ -2990,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) { @@ -3346,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; @@ -3379,6 +3545,7 @@ window.LevelObject = class LevelObject { 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); @@ -4237,6 +4404,7 @@ window.LevelObject = class LevelObject { 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); @@ -4711,7 +4879,8 @@ window.LevelObject = class LevelObject { } else { spr._eeToggledOffGroups.add(targetGroup); } - const isVisible = spr._eeToggledOffGroups.size === 0; + 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; } @@ -4739,6 +4908,52 @@ window.LevelObject = class LevelObject { } } + 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; @@ -4769,8 +4984,9 @@ window.LevelObject = class LevelObject { if (!spr || seenSprites.has(spr)) continue; seenSprites.add(spr); if (spr._eeToggledOffGroups) spr._eeToggledOffGroups.clear(); - if (typeof spr.setVisible === "function") spr.setVisible(true); - spr.active = true; + 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; } } @@ -4788,26 +5004,32 @@ window.LevelObject = class LevelObject { _executeShakeTrigger(trig) { if (!trig || !this._isTriggerSaveObjectLive(trig.uid)) return; - const dur = Math.max(0.05, Number(trig.duration) || 0.2); - const str = Math.max(0.1, Number(trig.strength) || 1); - const durationMs = Math.round(dur * 1000); - const amplitude = Math.max(1, Math.min(40, str * 4)); - const scene = this._scene; - if (!scene?.time) return; - const steps = Math.max(4, Math.round(dur * 30)); - const stepMs = Math.round(durationMs / steps); - let remaining = steps; - const self = this; - const doStep = () => { - if (remaining <= 0) { self.shakeOffsetX = 0; self.shakeOffsetY = 0; return; } - const t = remaining / steps; - const mag = amplitude * t; - self.shakeOffsetX = (Math.random() * 2 - 1) * mag; - self.shakeOffsetY = (Math.random() * 2 - 1) * mag; - remaining--; - scene.time.delayedCall(stepMs, doStep); + 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 }; - doStep(); + } + + 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) { @@ -4841,6 +5063,7 @@ window.LevelObject = class LevelObject { resetShakeTriggers() { this._shakeTriggerIdx = 0; this._touchShakeTriggerActivated = new Set(); + this._shakeState = null; this.shakeOffsetX = 0; this.shakeOffsetY = 0; } @@ -4942,9 +5165,11 @@ window.LevelObject = class LevelObject { } } - stepTouchTriggers(isHolding, isPressed, colorManager) { + 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; @@ -4984,6 +5209,13 @@ window.LevelObject = class LevelObject { } } + 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) { @@ -5327,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) { @@ -5374,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)); } @@ -5390,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)); } @@ -5431,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); - } } } } @@ -5565,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/core/triggers.js b/assets/scripts/core/triggers.js index 7b028754..a81459d7 100644 --- a/assets/scripts/core/triggers.js +++ b/assets/scripts/core/triggers.js @@ -162,6 +162,9 @@ class ColorManager { } } getColor(index) { + const ch = parseInt(index, 10); + if (ch === 1005) return this._colors[1005] || { r: (window.mainColor >> 16) & 0xff, g: (window.mainColor >> 8) & 0xff, b: window.mainColor & 0xff }; + if (ch === 1006) return this._colors[1006] || { r: (window.secondaryColor >> 16) & 0xff, g: (window.secondaryColor >> 8) & 0xff, b: window.secondaryColor & 0xff }; return this._colors[index] || { r: 255, g: 255, diff --git a/assets/scripts/game/allObjects.js b/assets/scripts/game/allObjects.js index 2c038f5f..d4b2acb9 100644 --- a/assets/scripts/game/allObjects.js +++ b/assets/scripts/game/allObjects.js @@ -3448,7 +3448,7 @@ window.allobjects = function() { "rot": 270 } ], - "default_base_color_channel": 1005, + "default_base_color_channel": 1006, "frame": "d_roundCloud_01_001.png", "glow_frame": "d_roundCloud_01_glow_001.png", "gridH": 1.5833333730697632, @@ -3462,7 +3462,7 @@ window.allobjects = function() { }, "223": { "can_color": true, - "default_base_color_channel": 1005, + "default_base_color_channel": 1006, "frame": "d_roundCloud_02_001.png", "glow_frame": "d_roundCloud_02_glow_001.png", "gridH": 2.116666555404663, @@ -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 a8bd4706..3a46fbc2 100644 --- a/index.html +++ b/index.html @@ -102,6 +102,7 @@ })(); + From 73d311215de28c7e4912fb4e2f781940b1c687f0 Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Sun, 20 Sep 2026 16:52:47 -0500 Subject: [PATCH 6/8] hide web bot --- .freebuff/project-id | 1 + assets/scripts/core/game-scene.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .freebuff/project-id 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/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 9b9f62cb..4de7d249 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -8085,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); From 0402db8f26ae3c332a2a6eb33862833bdf701398 Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Mon, 21 Sep 2026 11:43:49 -0500 Subject: [PATCH 7/8] revert color channels --- assets/scripts/core/triggers.js | 3 --- assets/scripts/game/allObjects.js | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/assets/scripts/core/triggers.js b/assets/scripts/core/triggers.js index a81459d7..7b028754 100644 --- a/assets/scripts/core/triggers.js +++ b/assets/scripts/core/triggers.js @@ -162,9 +162,6 @@ class ColorManager { } } getColor(index) { - const ch = parseInt(index, 10); - if (ch === 1005) return this._colors[1005] || { r: (window.mainColor >> 16) & 0xff, g: (window.mainColor >> 8) & 0xff, b: window.mainColor & 0xff }; - if (ch === 1006) return this._colors[1006] || { r: (window.secondaryColor >> 16) & 0xff, g: (window.secondaryColor >> 8) & 0xff, b: window.secondaryColor & 0xff }; return this._colors[index] || { r: 255, g: 255, diff --git a/assets/scripts/game/allObjects.js b/assets/scripts/game/allObjects.js index d4b2acb9..dd172ee7 100644 --- a/assets/scripts/game/allObjects.js +++ b/assets/scripts/game/allObjects.js @@ -3448,7 +3448,7 @@ window.allobjects = function() { "rot": 270 } ], - "default_base_color_channel": 1006, + "default_base_color_channel": 1005, "frame": "d_roundCloud_01_001.png", "glow_frame": "d_roundCloud_01_glow_001.png", "gridH": 1.5833333730697632, @@ -3462,7 +3462,7 @@ window.allobjects = function() { }, "223": { "can_color": true, - "default_base_color_channel": 1006, + "default_base_color_channel": 1005, "frame": "d_roundCloud_02_001.png", "glow_frame": "d_roundCloud_02_glow_001.png", "gridH": 2.116666555404663, From 66cbd9fd3c0fb0497592e08fe43f77e50ea2941d Mon Sep 17 00:00:00 2001 From: Ishanarunarjpriya Date: Mon, 21 Sep 2026 11:52:17 -0500 Subject: [PATCH 8/8] fix beast anim bugs: auto-init state, fresh rng, clean dead code, dt clamp --- assets/scripts/core/beast-anim.js | 46 +++++++++---------------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/assets/scripts/core/beast-anim.js b/assets/scripts/core/beast-anim.js index c4e55a64..b3f1cd57 100644 --- a/assets/scripts/core/beast-anim.js +++ b/assets/scripts/core/beast-anim.js @@ -8,14 +8,6 @@ const BEAST_ANIM_NAME_BY_ID = { 2012: "GJBeast05" }; -const BEAST_ANIM_ID_FOR_NAME = { - GJBeast01: "918", - GJBeast02: "1327", - GJBeast03: "1328", - GJBeast04: "1584", - GJBeast05: "2012" -}; - const BEAST_ANIM_DEFAULT_ANIM_ID = { 918: 0, 1327: 0, 1328: 0, 1584: 0, 2012: 0 }; const BEAST_ANIM_DEFS = { @@ -75,7 +67,7 @@ const BEAST_ANIM_DEFS = { }; const BEAST_ANIM_NAMES_BY_ID = { - 918: ["bite", "attack01", "attack01_end", "idle01"], + 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"] }; @@ -116,6 +108,7 @@ function beastAnimIsLoopingBase(state, base) { function beastAnimRandomizeTimer(state) { if (!state) return; + state.rng = Math.random(); state.timer = state.rng * beastAnimDelay(state); } @@ -150,6 +143,7 @@ function beastAnimGetDesc(animName) { } catch (err) { data = null; } if (!data && typeof BEAST_DESC_FALLBACK !== "undefined") data = null; if (!data || !data.animationContainer) { + beastAnimCache[key] = null; return null; } const groups = {}; @@ -198,7 +192,7 @@ function beastAnimCreateState(objectId) { if (!animName) return null; const desc = beastAnimGetDesc(animName); if (!desc) return null; - return { + const state = { objectId, animName, desc, @@ -206,10 +200,10 @@ function beastAnimCreateState(objectId) { base: null, frameIdx: 0, timer: 0, - rng: Math.random(), - pendingAnim: null, - tweenTimer: 0 + rng: Math.random() }; + beastAnimDefaultBase(state); + return state; } function beastAnimSetBase(state, base, animId) { @@ -238,13 +232,7 @@ function beastAnimFinishAction(state) { beastAnimRandomizeTimer(state); return; } - if (prev === "bite") { - if (beastAnimFrameExists(state.animName, "attack01_loop")) { - beastAnimSetBase(state, "attack01_loop", 1); - beastAnimRandomizeTimer(state); - } - return; - } + if (prev === "bite") return; beastAnimSetBase(state, "idle01", 3); beastAnimRandomizeTimer(state); return; @@ -295,11 +283,9 @@ function beastAnimFinishAction(state) { return; } if (prev === "attack01") { - if (beastAnimFrameExists(state.animName, "attack02_end")) { - beastAnimSetBase(state, "attack02_end", 5); - beastAnimRandomizeTimer(state); - return; - } + beastAnimSetBase(state, "idle01", 0); + beastAnimRandomizeTimer(state); + return; } if (rnd <= 0.75) beastAnimSetBase(state, "idle01", 0); else beastAnimSetBase(state, "idle02", 0); @@ -318,14 +304,12 @@ function beastAnimFinishAction(state) { beastAnimRandomizeTimer(state); return; } - if (prev === "attack01" || prev === "attack02" || prev === "attack03") { - if (prev === "attack01") { + 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); @@ -367,11 +351,6 @@ function beastAnimDefaultBase(state) { return; } } - if (id === 1327 || id === 1328) { - beastAnimSetBase(state, "idle01", 0); - beastAnimRandomizeTimer(state); - return; - } beastAnimSetBase(state, "idle01", 0); const defGroup = state.desc.groups[state.animName + "_idle01"]; if (defGroup && defGroup.length > 1) { @@ -385,6 +364,7 @@ function beastAnimAdvance(state, dt) { 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) {