From d486d0f46fc7116fa59c853dd92562015345e98a Mon Sep 17 00:00:00 2001 From: Lasokar Date: Sat, 11 Jul 2026 20:33:25 -0700 Subject: [PATCH] Fix Ball Dual --- assets/scripts/core/game-scene.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 5b6f49bf..7fdad02d 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -2986,7 +2986,7 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" }); this._saveCheckpointKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.Z); this._saveCheckpointKey.on("down", () => { - if (!this._menuActive && !this._slideIn && this._practicedMode.practiceMode && !this._state.isDead) { + if (!this._menuActive && !this._slideIn && this._practicedMode.practiceMode) { const saved = this._practicedMode.saveCheckpoint(this._state, this._playerWorldX, this._cameraX, this); if (saved) { } @@ -3692,7 +3692,7 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" .setInteractive() .setScale(0.8); this._makeBouncyButton(this._checkpointBtn, 0.8, () => { - if (this._practicedMode.practiceMode && !this._state.isDead && !this._menuActive && !this._slideIn) { + if (this._practicedMode.practiceMode && !this._menuActive && !this._slideIn) { this._practicedMode.saveCheckpoint(this._state, this._playerWorldX, this._cameraX, this); } }); @@ -3702,7 +3702,7 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" .setInteractive() .setScale(0.8); this._makeBouncyButton(this._clearCheckpointBtn, 0.8, () => { - if (this._practicedMode.practiceMode && !this._state.isDead && !this._menuActive && !this._slideIn) { + if (this._practicedMode.practiceMode && !this._menuActive && !this._slideIn) { this._practicedMode.deleteLastCheckpoint(); } }); @@ -7504,6 +7504,12 @@ _applyMirrorEffect() { _resolveDualBallOverlap() { if (!this._areDualBallsOverlapping()) { this._dualBallOverlapResolved = false; + this._dualBallSpawnGravityLock = false; + return false; + } + if (this._dualBallSpawnGravityLock) { + this._state2.gravityFlipped = !this._state.gravityFlipped; + this._dualBallOverlapResolved = true; return false; } if (this._dualBallOverlapResolved) return false; @@ -7593,6 +7599,7 @@ _applyMirrorEffect() { if (this._isDual) return; this._isDual = true; this._dualBallOverlapResolved = false; + this._dualBallSpawnGravityLock = false; this._state2.reset(); this._state2.isDead = false; this._state2.yVelocity = this._state.yVelocity; @@ -7612,6 +7619,11 @@ _applyMirrorEffect() { this._copyInitialDualModeFlags(this._state, this._state2); const initialPortalMode = this._getInitialDualPortalMode(); if (initialPortalMode) this._setPlayerGamemode(this._player2, this._state2, initialPortalMode, true); + if (this._state.isBall && this._state2.isBall) { + this._state2.gravityFlipped = !this._state.gravityFlipped; + this._dualBallOverlapResolved = true; + this._dualBallSpawnGravityLock = true; + } this._ensureDualFlyBounds(this._state.y); if (this._player2 && this._player2._hitboxTrail) this._player2._hitboxTrail = []; if (this._player2?._hitboxGraphics) this._player2._hitboxGraphics.clear(); @@ -7620,6 +7632,7 @@ _applyMirrorEffect() { if (!this._isDual) return; this._isDual = false; this._dualBallOverlapResolved = false; + this._dualBallSpawnGravityLock = false; this._state2.isDead = true; this._state2.upKeyDown = false; this._state2.upKeyPressed = false;