From 3b309b6bef60472694e35c6d7f8501de3510d7f6 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:30:21 +0500 Subject: [PATCH 01/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 37 +++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 76a56fd1..d1074ae6 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -3608,7 +3608,8 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" if (!this._menuActive && !this._slideIn) { const isPracticeMode = this._practicedMode.togglePracticeMode(); if (this._checkpointBtnContainer) { - this._checkpointBtnContainer.setVisible(isPracticeMode); + this._checkpointBtnContainer.setVisible(isPracticeMode); + this._checkpointBtnContainer.setAlpha(window.hidePracticeUI ? 0 : 1); } if (this._practiceModeBarContainer) { this._practiceModeBarContainer.setVisible(isPracticeMode); @@ -4486,10 +4487,12 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" this._player?.setDeathAnimationPaused?.(false); this._player2?.setDeathAnimationPaused?.(false); this._paused = false; - this._pauseBtn.setVisible(true).setAlpha(75 / 255); + this._pauseBtn.setVisible(true).setAlpha(window.hidePauseBtn ? 0 : 75 / 255); if (!this._state.isDead || this._practicedMode?.practiceMode) { this._audio.resumeMusic(); this._audio._ensureCorrectMusicMode(); + if (this._checkpointBtnContainer) { + this._checkpointBtnContainer.setAlpha(window.hidePracticeUI ? 0 : 1); } if (this._pauseContainer) { this._pauseContainer.destroy(); @@ -4802,6 +4805,8 @@ _buildSettingsPopup() { "Show Percentage": "Shows the percentage you are at in a level.", "Percentage Decimals": "Shows decimals in level progress.", "Hitboxes on Death": "Shows hitboxes upon death in both normal and practice mode.", + "Hide Pause Button": "Hides the pause button during gameplay.", + "Hide Practice UI": "Hides the checkpoint buttons in practice mode.", }; const createInfoButton = (container, x, y, infoTextOrKey, scale) => { @@ -5090,6 +5095,28 @@ _buildSettingsPopup() { true, "Enable Orb Guide" ); + // Чекбокс для скрытия кнопки паузы с мгновенным обновлением на экране + createToggle(container, column2X, startY + (spacingY * 5), "Hide Pause Button", + () => window.hidePauseBtn, + (v) => { + window.hidePauseBtn = v; + if (this._pauseBtn) { + this._pauseBtn.setAlpha(v ? 0 : 0.75); + } + }, + null, 25, true, "Hide Pause Button" + ); + + // Чекбокс для скрытия кнопок практики с мгновенным обновлением на экране + createToggle(container, column2X, startY + (spacingY * 6), "Hide Practice UI", + () => window.hidePracticeUI, + (v) => { + window.hidePracticeUI = v; + if (this._practiceBtn) this._practiceBtn.setAlpha(v ? 0 : 0.75); + if (this._removeBtn) this._removeBtn.setAlpha(v ? 0 : 0.75); + }, + null, 25, true, "Hide Practice UI" + ); }; const buildAdvancedPage = (container) => { @@ -5139,6 +5166,8 @@ _buildSettingsPopup() { startPosSwitcher: window.startPosSwitcher, hitboxTrail: window.showHitboxTrail, showFPS: this._fpsText.visible, + hidePauseBtn: window.hidePauseBtn, + hidePracticeUI: window.hidePracticeUI, solidWaveTrail: window.solidWave, noclipAccuracy: window.noClipAccuracy, hitboxesOnDeath: window.hitboxesOnDeath, @@ -5168,6 +5197,8 @@ _buildSettingsPopup() { startPosSwitcher: false, hitboxTrail: false, showFPS: false, + hidePauseBtn: false, + hidePracticeUI: false, solidWaveTrail: false, noclipAccuracy: false, hitboxesOnDeath: false, @@ -5193,6 +5224,8 @@ _buildSettingsPopup() { window.startPosSwitcher = data.startPosSwitcher; window.showHitboxTrail = data.hitboxTrail; this._fpsText.visible = data.showFPS; + window.hidePauseBtn = data.hidePauseBtn; + window.hidePracticeUI = data.hidePracticeUI; window.solidWave = data.solidWaveTrail; window.noClipAccuracy = data.noclipAccuracy; window.hitboxesOnDeath = data.hitboxesOnDeath; From b8d31beaf7c1d92c24809411875c1214e79f557f Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:44:17 +0500 Subject: [PATCH 02/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index d1074ae6..afdf246b 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4488,18 +4488,21 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" this._player2?.setDeathAnimationPaused?.(false); this._paused = false; this._pauseBtn.setVisible(true).setAlpha(window.hidePauseBtn ? 0 : 75 / 255); + if (!this._state.isDead || this._practicedMode?.practiceMode) { this._audio.resumeMusic(); this._audio._ensureCorrectMusicMode(); - if (this._checkpointBtnContainer) { - this._checkpointBtnContainer.setAlpha(window.hidePracticeUI ? 0 : 1); - } + if (this._checkpointBtnContainer) { + this._checkpointBtnContainer.setAlpha(window.hidePracticeUI ? 0 : 1); + } + } // <- ЗАКРЫВАЕТ блок if (!this._state.isDead...) + if (this._pauseContainer) { this._pauseContainer.destroy(); this._pauseContainer = null; } - } - } + } // <- ЗАКРЫВАЕТ блок if (this._paused) + } // <- ЗАКРЫВАЕТ сам метод _resumeGame() _queueGameplayLevelViewReturn() { const currentLevelId = window.currentlevel?.[2] ?? window._onlineLevelId ?? null; const pendingCreatedReturn = window._createdLevelReturnToView || null; From e11b8811b1f8473e212785ddc46f31f9e6ffdf62 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:48:27 +0500 Subject: [PATCH 03/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index afdf246b..b20080df 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4495,14 +4495,15 @@ this._menuUpdateLogBtn = this.add.image(screenWidth - 30 - 50, 33, "GJ_WebSheet" if (this._checkpointBtnContainer) { this._checkpointBtnContainer.setAlpha(window.hidePracticeUI ? 0 : 1); } - } // <- ЗАКРЫВАЕТ блок if (!this._state.isDead...) + } if (this._pauseContainer) { this._pauseContainer.destroy(); this._pauseContainer = null; } - } // <- ЗАКРЫВАЕТ блок if (this._paused) - } // <- ЗАКРЫВАЕТ сам метод _resumeGame() + } + } + _queueGameplayLevelViewReturn() { const currentLevelId = window.currentlevel?.[2] ?? window._onlineLevelId ?? null; const pendingCreatedReturn = window._createdLevelReturnToView || null; From 5b930fd4addcd70d6da087ef14e19328ee5e91cd Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 14:12:57 +0500 Subject: [PATCH 04/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index b20080df..3d3de6c4 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7306,6 +7306,13 @@ _buildSettingsPopup() { return _0xd8019e * 60; } update(_0x54fa47, deltaTime) { + if (this._pauseBtn) { + this._pauseBtn.setAlpha(window.hidePauseBtn ? 0 : (this._paused ? 75 / 255 : 0.75)); + if (window.hidePauseBtn && this._pauseBtn.input && this._pauseBtn.input.enabled) { + this._pauseBtn.disableInteractive(); + } + } + if (window.isEditor) { if (this._editorPlaytestActive && !this._editorPlaytestPaused) { this._levelEditor._updateEditorPlaytest(deltaTime); From d3c3d538004b1ba3414d347d166bb3f2552075c4 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 14:54:40 +0500 Subject: [PATCH 05/31] Update game-scene.js (8 -> 6) --- assets/scripts/core/game-scene.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 3d3de6c4..6d91cc1f 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4773,7 +4773,7 @@ _buildSettingsPopup() { var isOn = getVal(); var checkTexture = isOn ? "GJ_checkOn_001.png" : "GJ_checkOff_001.png"; - var check = this.add.image(x + checkOffset, y, "GJ_GameSheet03", checkTexture).setScale(0.8).setInteractive(); + var check = this.add.image(x + checkOffset, y, "GJ_GameSheet03", checkTexture).setScale(0.6).setInteractive(); var txt = this.add.bitmapText(x + textOffset, y, "bigFont", label, fontSize).setOrigin(0, 0.5); container.add([check, txt]); From a77c793b0947493b117e293c21a6b930be45c002 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:02:16 +0500 Subject: [PATCH 06/31] Update game-scene.js steps --- assets/scripts/core/game-scene.js | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 6d91cc1f..37c0fe14 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -5024,6 +5024,7 @@ _buildSettingsPopup() { }; const buildVisualPage = (container) => { + const spacingY = 54; // Уменьшаем вертикальный шаг для всей вкладки createToggle(container, column1X, startY, "Show Hitboxes", () => window.showHitboxes, (v) => window.showHitboxes = v, From fab41a02c3c464262a7601a4548342016d2f35ce Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:14:49 +0500 Subject: [PATCH 07/31] Update game-scene.js (InfoBtnScale) --- assets/scripts/core/game-scene.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 37c0fe14..add2684b 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4761,7 +4761,7 @@ _buildSettingsPopup() { const column2X = 200; const checkOffset = -120; const textOffset = -70; - const spacingY = 70; + const spacingY = 54; const startY = -150; let pageContainer = this.add.container(0, 0); innerContainer.add(pageContainer); @@ -4779,7 +4779,7 @@ _buildSettingsPopup() { if (hasInfoBox) { if (infoText) { - createInfoButton(container, x + checkOffset - 34, y - 30, infoText, 0.45); + createInfoButton(container, x + checkOffset - 34, y - 30, infoText, 0.3); } } From 354d787f6304112492df33d641a488cdc44d6c39 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:26:44 +0500 Subject: [PATCH 08/31] Update game-scene.js const textOffset = -90 --- assets/scripts/core/game-scene.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index add2684b..33c9817a 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4760,7 +4760,7 @@ _buildSettingsPopup() { const column1X = -200; const column2X = 200; const checkOffset = -120; - const textOffset = -70; + const textOffset = -90; const spacingY = 54; const startY = -150; let pageContainer = this.add.container(0, 0); From 71ebec2c0d9a4866a20f37fae16aa8b56178b66e Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:40:18 +0500 Subject: [PATCH 09/31] Update game-scene.js MusicSpeed --- assets/scripts/core/game-scene.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 33c9817a..f1eeb5b0 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7313,6 +7313,20 @@ _buildSettingsPopup() { this._pauseBtn.disableInteractive(); } } + // СИНХРОНИЗАЦИЯ СКОРОСТИ МУЗЫКИ СО СПИДХАКОМ + const currentSpeed = window.speedHack || 1; + if (this._audio) { + // Проверяем стандартный объект музыки Phaser, если он спрятан внутри + if (this._audio._music && typeof this._audio._music.setRate === 'function') { + this._audio._music.setRate(currentSpeed); + } else if (this._audio._music && this._audio._music.rate !== undefined) { + this._audio._music.rate = currentSpeed; + } + // Проверяем глобальный контекст звука Phaser + if (this.sound && this.sound.rate !== undefined) { + this.sound.setRate(currentSpeed); + } + } if (window.isEditor) { if (this._editorPlaytestActive && !this._editorPlaytestPaused) { From 3e2a5abeb63946f68cc1e7e48724427e5621ab44 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 15:49:58 +0500 Subject: [PATCH 10/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index f1eeb5b0..a463a466 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7314,7 +7314,8 @@ _buildSettingsPopup() { } } // СИНХРОНИЗАЦИЯ СКОРОСТИ МУЗЫКИ СО СПИДХАКОМ - const currentSpeed = window.speedHack || 1; + // Компенсируем двойное ускорение аудио + const currentSpeed = window.speedHack ? Math.sqrt(window.speedHack) : 1; if (this._audio) { // Проверяем стандартный объект музыки Phaser, если он спрятан внутри if (this._audio._music && typeof this._audio._music.setRate === 'function') { From 391b3a6e74947957ca8dbdec4a9bae57985fe2b1 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 17:15:16 +0500 Subject: [PATCH 11/31] Update game-scene.js MoveTriggers --- assets/scripts/core/game-scene.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index a463a466..3469046d 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -6873,6 +6873,10 @@ _buildSettingsPopup() { this._enableDualMode(); } this._level.fastForwardTriggers(pos.x, this._colorManager); + if (typeof this._level.updateMoveTriggers === 'function') { + const speed = window.speedHack || 1; + this._level.updateMoveTriggers(0, speed); + } if (this._player) { this._player._lastCollisionWorldX = Number.isFinite(Number(this._playerWorldX)) ? Number(this._playerWorldX) : null; this._player._lastCollisionWorldY = startPosY; @@ -6887,7 +6891,7 @@ _buildSettingsPopup() { this._pauseContainer.destroy(); this._pauseContainer = null; } - this._pauseBtn.setVisible(true).setAlpha(75 / 255); + this._pauseBtn.setVisible(true).setAlpha(window.hidePauseBtn ? 0 : 75 / 255); if (this._practiceModeBarContainer) { this._practiceModeBarContainer.setVisible(this._practicedMode && this._practicedMode.practiceMode); } From 73acbe54119ca9304d46f333e4b7d61655a87e15 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 17:27:16 +0500 Subject: [PATCH 12/31] Update game-scene.js Init? --- assets/scripts/core/game-scene.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 3469046d..ca150667 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7311,28 +7311,30 @@ _buildSettingsPopup() { return _0xd8019e * 60; } update(_0x54fa47, deltaTime) { + // НАЧАЛО БЛОКА: Безопасный контроль кнопки паузы if (this._pauseBtn) { this._pauseBtn.setAlpha(window.hidePauseBtn ? 0 : (this._paused ? 75 / 255 : 0.75)); if (window.hidePauseBtn && this._pauseBtn.input && this._pauseBtn.input.enabled) { this._pauseBtn.disableInteractive(); } } - // СИНХРОНИЗАЦИЯ СКОРОСТИ МУЗЫКИ СО СПИДХАКОМ - // Компенсируем двойное ускорение аудио + + // ИСПРАВЛЕННЫЙ БЛОК: Безопасная синхронизация музыки без вылетов const currentSpeed = window.speedHack ? Math.sqrt(window.speedHack) : 1; if (this._audio) { - // Проверяем стандартный объект музыки Phaser, если он спрятан внутри if (this._audio._music && typeof this._audio._music.setRate === 'function') { this._audio._music.setRate(currentSpeed); } else if (this._audio._music && this._audio._music.rate !== undefined) { this._audio._music.rate = currentSpeed; } - // Проверяем глобальный контекст звука Phaser - if (this.sound && this.sound.rate !== undefined) { - this.sound.setRate(currentSpeed); + // Защита от ошибки Cannot set properties of null + if (this.sound && this.sound !== null && this.sound.rate !== undefined) { + this.sound.rate = currentSpeed; } } + // ДАЛЬШЕ ИДЕТ СТАРЫЙ КОД ИГРЫ (if (window.isEditor) и т.д.) + if (window.isEditor) { if (this._editorPlaytestActive && !this._editorPlaytestPaused) { this._levelEditor._updateEditorPlaytest(deltaTime); From 0ea76ab82bc504e6a0bf903b24da11e51fbcd4bd Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 21:41:11 +0500 Subject: [PATCH 13/31] Update game-scene.js DeathTimer --- assets/scripts/core/game-scene.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index ca150667..f5181e59 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -5129,6 +5129,11 @@ _buildSettingsPopup() { () => !window.useDirectInternet, (v) => { window.useDirectInternet = !v; }, null, 22 + ); + // НАШЕ ПОЛЕ ВВОДА: ставим его справа (column2X) в верхний ряд (startY) + createNumberInput(container, column2X, startY, "Respawn Delay (s)", + () => window.respawnDelay, + (v) => { window.respawnDelay = v; } ); }; @@ -5180,6 +5185,7 @@ _buildSettingsPopup() { showObjectIds: window.showObjectIds, showCPS: window.showCPS, speedHack: window.speedHack, + respawnDelay: window.respawnDelay, macroBot: window.macroBot, practiceMusicBypass: window.practiceMusicBypass, showGlow: window.showGlow, @@ -5211,6 +5217,7 @@ _buildSettingsPopup() { showObjectIds: false, showCPS: false, speedHack: 1.0, + respawnDelay: 1.0, macroBot: false, practiceMusicBypass: false, showGlow: true, @@ -5236,6 +5243,7 @@ _buildSettingsPopup() { window.hitboxesOnDeath = data.hitboxesOnDeath; window.showCPS = data.showCPS; window.speedHack = data.speedHack; + window.respawnDelay = data.respawnDelay; window.macroBot = data.macroBot; window.practiceMusicBypass = !!data.practiceMusicBypass; window.showGlow = data.showGlow; @@ -7670,7 +7678,7 @@ _buildSettingsPopup() { } } this._deathTimer += deltaTime; - let _0x237728 = this._hadNewBest ? 1400 : 1000; + let _0x237728 = (this._hadNewBest ? 1400 : 1000) * (window.respawnDelay !== undefined ? window.respawnDelay : 1.0); if (this._deathTimer > _0x237728) { if (this._practicedMode.practiceMode) { this._respawnFromCheckpoint(); From 671ba4a1513944ea314439d0eacfe70e82e4f33c Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 22:54:54 +0500 Subject: [PATCH 14/31] MobileKB RespawnDelay --- assets/scripts/core/game-scene.js | 62 +++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index f5181e59..1e0a379d 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4887,19 +4887,48 @@ _buildSettingsPopup() { if (this._saveSettings) this._saveSettings(); }; - hitArea.on('pointerdown', (pointer, localX, localY, event) => { - if (event) event.stopPropagation(); - - if (window._activeCustomInput && window._activeCustomInput !== commitValue) { - window._activeCustomInput(); - } + hitArea.on('pointerdown', (pointer, localX, localY, event) => { + if (event) event.stopPropagation(); - isFocused = true; - window._activeCustomInput = commitValue; - - internalString = ""; + if (window._activeCustomInput && window._activeCustomInput !== commitValue) { + window._activeCustomInput(); + } + + isFocused = true; + window._activeCustomInput = commitValue; + + internalString = ""; + updateDisplay(); + + // НАШ ФИКС ДЛЯ МОБИЛЬНЫХ СМАРТФОНОВ + let mobileInput = document.getElementById('phaser-mobile-input'); + if (!mobileInput) { + mobileInput = document.createElement('input'); + mobileInput.id = 'phaser-mobile-input'; + mobileInput.type = 'number'; + mobileInput.step = '0.1'; + mobileInput.style.position = 'absolute'; + mobileInput.style.opacity = '0'; + mobileInput.style.left = '0px'; + mobileInput.style.top = '0px'; + mobileInput.style.width = '1px'; + mobileInput.style.height = '1px'; + document.body.appendChild(mobileInput); + } + + mobileInput.value = ""; + mobileInput.focus(); // Вызываем клавиатуру телефона + + mobileInput.oninput = () => { + internalString = mobileInput.value; updateDisplay(); - }); + }; + + mobileInput.onblur = () => { + commitValue(); + if (mobileInput.parentNode) mobileInput.parentNode.removeChild(mobileInput); + }; + }); const outsideClickListener = () => { if (isFocused) commitValue(); @@ -5007,6 +5036,12 @@ _buildSettingsPopup() { (v) => window.speedHack = v ); + // Переносим под спидхак (правая колонка column2X, смещение на 2 шага вниз) + createNumberInput(container, column2X, startY + (spacingY * 2), "Respawn Delay (s)", + () => window.respawnDelay, + (v) => { window.respawnDelay = v; } + ); + createToggle(container, column2X, startY + spacingY, "Practice Music Bypass", () => window.practiceMusicBypass, (v) => { @@ -5129,11 +5164,6 @@ _buildSettingsPopup() { () => !window.useDirectInternet, (v) => { window.useDirectInternet = !v; }, null, 22 - ); - // НАШЕ ПОЛЕ ВВОДА: ставим его справа (column2X) в верхний ряд (startY) - createNumberInput(container, column2X, startY, "Respawn Delay (s)", - () => window.respawnDelay, - (v) => { window.respawnDelay = v; } ); }; From 588c518ea20ed2f9cbf9efcc18b21bd68cb400e0 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 23:12:14 +0500 Subject: [PATCH 15/31] MobileOninput --- assets/scripts/core/game-scene.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 1e0a379d..9c970a4b 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4924,11 +4924,27 @@ _buildSettingsPopup() { updateDisplay(); }; + // Если пользователь нажал кнопку "Готово/Enter" на телефоне + mobileInput.onkeydown = (e) => { + if (e.key === 'Enter') { + mobileInput.blur(); // Принудительно закрываем клавиатуру + } + }; + mobileInput.onblur = () => { commitValue(); - if (mobileInput.parentNode) mobileInput.parentNode.removeChild(mobileInput); + isFocused = false; // Сбрасываем флаг фокуса игры + if (mobileInput.parentNode) { + mobileInput.parentNode.removeChild(mobileInput); + } }; - }); + + // Защита: клик по фону игры принудительно закрывает мобильный инпут + dim.once('pointerdown', () => { + if (document.activeElement === mobileInput) { + mobileInput.blur(); + } + }); const outsideClickListener = () => { if (isFocused) commitValue(); @@ -5037,12 +5053,12 @@ _buildSettingsPopup() { ); // Переносим под спидхак (правая колонка column2X, смещение на 2 шага вниз) - createNumberInput(container, column2X, startY + (spacingY * 2), "Respawn Delay (s)", + createNumberInput(container, column2X, startY + (spacingY * 1), "Respawn Delay (s)", () => window.respawnDelay, (v) => { window.respawnDelay = v; } ); - createToggle(container, column2X, startY + spacingY, "Practice Music Bypass", + createToggle(container, column2X, startY + (spacingY * 2), "Practice Music Bypass", () => window.practiceMusicBypass, (v) => { const changed = !!window.practiceMusicBypass !== !!v; From 38df4dfb31e3ad6c786747ff09168530cdad5646 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 23:25:49 +0500 Subject: [PATCH 16/31] Fix MobileInput --- assets/scripts/core/game-scene.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 9c970a4b..6eab0f2e 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4809,7 +4809,7 @@ _buildSettingsPopup() { "Show Percentage": "Shows the percentage you are at in a level.", "Percentage Decimals": "Shows decimals in level progress.", "Hitboxes on Death": "Shows hitboxes upon death in both normal and practice mode.", - "Hide Pause Button": "Hides the pause button during gameplay.", + "Hide Pause Button": "Hides the pause button during gameplay. Prevents accidental clicks.", "Hide Practice UI": "Hides the checkpoint buttons in practice mode.", }; @@ -4939,11 +4939,12 @@ _buildSettingsPopup() { } }; - // Защита: клик по фону игры принудительно закрывает мобильный инпут - dim.once('pointerdown', () => { + // Безопасная защита: клик в любом месте экрана мимо инпута закроет его + window.addEventListener('pointerdown', function removeMobileFocus(e) { if (document.activeElement === mobileInput) { mobileInput.blur(); } + window.removeEventListener('pointerdown', removeMobileFocus); }); const outsideClickListener = () => { From 592c68064375740c3554bae43fd85f41eb50663c Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Fri, 24 Jul 2026 23:48:10 +0500 Subject: [PATCH 17/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 6eab0f2e..728f21cc 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4900,7 +4900,6 @@ _buildSettingsPopup() { internalString = ""; updateDisplay(); - // НАШ ФИКС ДЛЯ МОБИЛЬНЫХ СМАРТФОНОВ let mobileInput = document.getElementById('phaser-mobile-input'); if (!mobileInput) { mobileInput = document.createElement('input'); @@ -4917,35 +4916,36 @@ _buildSettingsPopup() { } mobileInput.value = ""; - mobileInput.focus(); // Вызываем клавиатуру телефона + mobileInput.focus(); mobileInput.oninput = () => { internalString = mobileInput.value; updateDisplay(); }; - // Если пользователь нажал кнопку "Готово/Enter" на телефоне mobileInput.onkeydown = (e) => { if (e.key === 'Enter') { - mobileInput.blur(); // Принудительно закрываем клавиатуру + mobileInput.blur(); } }; mobileInput.onblur = () => { commitValue(); - isFocused = false; // Сбрасываем флаг фокуса игры + isFocused = false; if (mobileInput.parentNode) { mobileInput.parentNode.removeChild(mobileInput); } }; - // Безопасная защита: клик в любом месте экрана мимо инпута закроет его - window.addEventListener('pointerdown', function removeMobileFocus(e) { + // Чистый и безопасный способ убрать фокус при клике по экрану + const removeMobileFocus = () => { if (document.activeElement === mobileInput) { mobileInput.blur(); } window.removeEventListener('pointerdown', removeMobileFocus); - }); + }; + window.addEventListener('pointerdown', removeMobileFocus); + }); const outsideClickListener = () => { if (isFocused) commitValue(); From 3d075f131530b2991dcf7746ecbbc7706b42a15c Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 13:57:09 +0500 Subject: [PATCH 18/31] Culling Render --- assets/scripts/core/game-scene.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 728f21cc..a09f266b 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4811,6 +4811,7 @@ _buildSettingsPopup() { "Hitboxes on Death": "Shows hitboxes upon death in both normal and practice mode.", "Hide Pause Button": "Hides the pause button during gameplay. Prevents accidental clicks.", "Hide Practice UI": "Hides the checkpoint buttons in practice mode.", + "Render Only Visible": "Optimizes performance by rendering only objects within the camera boundaries.", }; const createInfoButton = (container, x, y, infoTextOrKey, scale) => { @@ -5181,6 +5182,18 @@ _buildSettingsPopup() { () => !window.useDirectInternet, (v) => { window.useDirectInternet = !v; }, null, 22 + ); + // Наш тумблер 2D-куллинга с защитой от выключения + createToggle(container, column1X, startY + spacingY, "Render Only Visible", + () => window.culling, + (v) => { + window.culling = v; + if (!v && this._level && typeof this._level.updateVisibility === 'function') { + this._level._visMinSec = -1; + this._level.updateVisibility(-999999); + } + }, + null, 22, true, "Render Only Visible" ); }; @@ -5238,6 +5251,7 @@ _buildSettingsPopup() { showGlow: window.showGlow, showEditorGlow: window.showEditorGlow, useDirectInternet: !!window.useDirectInternet, + culling: window.culling, enablePortalGuide: window.enablePortalGuide, enableOrbGuide: window.enableOrbGuide, settingInfoText: window.settingInfoText || {} @@ -5270,6 +5284,7 @@ _buildSettingsPopup() { showGlow: true, showEditorGlow: false, useDirectInternet: true, + culling: false, enablePortalGuide: true, enableOrbGuide: false }; @@ -5301,6 +5316,7 @@ _buildSettingsPopup() { window.enableOrbGuide = data.enableOrbGuide; window.settingInfoText = data.settingInfoText || {}; window.useDirectInternet = !!data.useDirectInternet; + window.culling = data.culling; localStorage.setItem("gd_useDirectInternet", String(!!window.useDirectInternet)); } _buildMacroPopup() { @@ -7387,6 +7403,15 @@ _buildSettingsPopup() { this.sound.rate = currentSpeed; } } + // ОПТИМИЗАЦИЯ: Culling с пропуском кадров (Throttling) + this._cullingTimer = (this._cullingTimer || 0) + 1; + if (this._cullingTimer >= 6) { + this._cullingTimer = 0; + + if (window.culling && this._level && typeof this._level.updateVisibility === 'function') { + this._level.updateVisibility(this._cameraX); + } + } // ДАЛЬШЕ ИДЕТ СТАРЫЙ КОД ИГРЫ (if (window.isEditor) и т.д.) From 48ce943054edc00ee51e8f864f61ce750e655f8c Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 14:54:19 +0500 Subject: [PATCH 19/31] Culling (active) --- assets/scripts/core/game-scene.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index a09f266b..4df20e1b 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -5191,11 +5191,12 @@ _buildSettingsPopup() { if (!v && this._level && typeof this._level.updateVisibility === 'function') { this._level._visMinSec = -1; this._level.updateVisibility(-999999); + // Пробуждаем абсолютно все секции обратно + if (this._level._sectionContainers) { + this._level._sectionContainers.forEach(c => { if(c) c.setActive(true); }); + } } }, - null, 22, true, "Render Only Visible" - ); - }; const buildPage = (idx) => { pageContainer.destroy(); @@ -7403,13 +7404,27 @@ _buildSettingsPopup() { this.sound.rate = currentSpeed; } } - // ОПТИМИЗАЦИЯ: Culling с пропуском кадров (Throttling) + // ГЛУБОКАЯ ОПТИМИЗАЦИЯ: Отключение логики невидимых секций уровня this._cullingTimer = (this._cullingTimer || 0) + 1; if (this._cullingTimer >= 6) { this._cullingTimer = 0; if (window.culling && this._level && typeof this._level.updateVisibility === 'function') { this._level.updateVisibility(this._cameraX); + + // Пробегаемся по всем секциям уровня и усыпляем невидимые + if (this._level._sectionContainers) { + const minSec = this._level._visMinSec; + const maxSec = this._level._visMaxSec; + + this._level._sectionContainers.forEach((container, index) => { + if (container) { + const isVisible = index >= minSec && index <= maxSec; + // Выключаем активность (CPU) и видимость (GPU) для далеких секций + container.setActive(isVisible); + } + }); + } } } From 35dba479833a3ed3a7f0b80d22554a6f4ed73f0c Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 15:38:39 +0500 Subject: [PATCH 20/31] Update game-scene.js (no const err) --- assets/scripts/core/game-scene.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 4df20e1b..a088a71d 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7404,7 +7404,7 @@ _buildSettingsPopup() { this.sound.rate = currentSpeed; } } - // ГЛУБОКАЯ ОПТИМИЗАЦИЯ: Отключение логики невидимых секций уровня + // ГЛУБОКАЯ ОПТИМИЗАЦИЯ: Безопасное отключение логики далеких секций this._cullingTimer = (this._cullingTimer || 0) + 1; if (this._cullingTimer >= 6) { this._cullingTimer = 0; @@ -7412,16 +7412,12 @@ _buildSettingsPopup() { if (window.culling && this._level && typeof this._level.updateVisibility === 'function') { this._level.updateVisibility(this._cameraX); - // Пробегаемся по всем секциям уровня и усыпляем невидимые if (this._level._sectionContainers) { - const minSec = this._level._visMinSec; - const maxSec = this._level._visMaxSec; - + // Избавляемся от const: берем значения напрямую из объекта уровня this._level._sectionContainers.forEach((container, index) => { if (container) { - const isVisible = index >= minSec && index <= maxSec; - // Выключаем активность (CPU) и видимость (GPU) для далеких секций - container.setActive(isVisible); + // Прямая проверка без объявления промежуточных констант + container.setActive(index >= this._level._visMinSec && index <= this._level._visMaxSec); } }); } From be9b6449c38641da9f8b21fe33d73bc372cb1b26 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 15:53:20 +0500 Subject: [PATCH 21/31] Update game-scene.js (the same) --- assets/scripts/core/game-scene.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index a088a71d..0b1ab45a 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7404,7 +7404,7 @@ _buildSettingsPopup() { this.sound.rate = currentSpeed; } } - // ГЛУБОКАЯ ОПТИМИЗАЦИЯ: Безопасное отключение логики далеких секций + // ОПТИМИЗАЦИЯ: Полностью очищенный от констант блок this._cullingTimer = (this._cullingTimer || 0) + 1; if (this._cullingTimer >= 6) { this._cullingTimer = 0; @@ -7413,10 +7413,8 @@ _buildSettingsPopup() { this._level.updateVisibility(this._cameraX); if (this._level._sectionContainers) { - // Избавляемся от const: берем значения напрямую из объекта уровня this._level._sectionContainers.forEach((container, index) => { if (container) { - // Прямая проверка без объявления промежуточных констант container.setActive(index >= this._level._visMinSec && index <= this._level._visMaxSec); } }); From 3ee62bebbe7bb55b777dd72b0d3a4a3a3c44b6c2 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 16:04:30 +0500 Subject: [PATCH 22/31] Update game-scene.js (bracket!) --- assets/scripts/core/game-scene.js | 34 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 0b1ab45a..212f09fc 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -5185,24 +5185,26 @@ _buildSettingsPopup() { ); // Наш тумблер 2D-куллинга с защитой от выключения createToggle(container, column1X, startY + spacingY, "Render Only Visible", - () => window.culling, - (v) => { - window.culling = v; - if (!v && this._level && typeof this._level.updateVisibility === 'function') { - this._level._visMinSec = -1; - this._level.updateVisibility(-999999); - // Пробуждаем абсолютно все секции обратно - if (this._level._sectionContainers) { - this._level._sectionContainers.forEach(c => { if(c) c.setActive(true); }); - } + () => window.culling, + (v) => { + window.culling = v; + if (!v && this._level && typeof this._level.updateVisibility === 'function') { + this._level._visMinSec = -1; + this._level.updateVisibility(-999999); + // Пробуждаем абсолютно все секции обратно + if (this._level._sectionContainers) { + this._level._sectionContainers.forEach(c => { if (c) c.setActive(true); }); } - }, + } + } + ); +}; // <--- Эта скобка должна закрывать функцию buildAdvancedPage! - const buildPage = (idx) => { - pageContainer.destroy(); - pageContainer = this.add.container(0, 0); - innerContainer.add(pageContainer); - pageTitle.setText(pages[idx]); +const buildPage = (idx) => { + pageContainer.destroy(); + pageContainer = this.add.container(0, 0); + innerContainer.add(pageContainer); + pageTitle.setText(pages[idx]); if (idx === 0) buildGameplayPage(pageContainer); else if (idx === 1) buildVisualPage(pageContainer); From d119a0288f16effeb39245137ba4970d4d6dccb5 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 17:01:32 +0500 Subject: [PATCH 23/31] reverting the latest commits --- assets/scripts/core/game-scene.js | 48 ++++--------------------------- 1 file changed, 6 insertions(+), 42 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 212f09fc..728f21cc 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4811,7 +4811,6 @@ _buildSettingsPopup() { "Hitboxes on Death": "Shows hitboxes upon death in both normal and practice mode.", "Hide Pause Button": "Hides the pause button during gameplay. Prevents accidental clicks.", "Hide Practice UI": "Hides the checkpoint buttons in practice mode.", - "Render Only Visible": "Optimizes performance by rendering only objects within the camera boundaries.", }; const createInfoButton = (container, x, y, infoTextOrKey, scale) => { @@ -5183,28 +5182,13 @@ _buildSettingsPopup() { (v) => { window.useDirectInternet = !v; }, null, 22 ); - // Наш тумблер 2D-куллинга с защитой от выключения - createToggle(container, column1X, startY + spacingY, "Render Only Visible", - () => window.culling, - (v) => { - window.culling = v; - if (!v && this._level && typeof this._level.updateVisibility === 'function') { - this._level._visMinSec = -1; - this._level.updateVisibility(-999999); - // Пробуждаем абсолютно все секции обратно - if (this._level._sectionContainers) { - this._level._sectionContainers.forEach(c => { if (c) c.setActive(true); }); - } - } - } - ); -}; // <--- Эта скобка должна закрывать функцию buildAdvancedPage! + }; -const buildPage = (idx) => { - pageContainer.destroy(); - pageContainer = this.add.container(0, 0); - innerContainer.add(pageContainer); - pageTitle.setText(pages[idx]); + const buildPage = (idx) => { + pageContainer.destroy(); + pageContainer = this.add.container(0, 0); + innerContainer.add(pageContainer); + pageTitle.setText(pages[idx]); if (idx === 0) buildGameplayPage(pageContainer); else if (idx === 1) buildVisualPage(pageContainer); @@ -5254,7 +5238,6 @@ const buildPage = (idx) => { showGlow: window.showGlow, showEditorGlow: window.showEditorGlow, useDirectInternet: !!window.useDirectInternet, - culling: window.culling, enablePortalGuide: window.enablePortalGuide, enableOrbGuide: window.enableOrbGuide, settingInfoText: window.settingInfoText || {} @@ -5287,7 +5270,6 @@ const buildPage = (idx) => { showGlow: true, showEditorGlow: false, useDirectInternet: true, - culling: false, enablePortalGuide: true, enableOrbGuide: false }; @@ -5319,7 +5301,6 @@ const buildPage = (idx) => { window.enableOrbGuide = data.enableOrbGuide; window.settingInfoText = data.settingInfoText || {}; window.useDirectInternet = !!data.useDirectInternet; - window.culling = data.culling; localStorage.setItem("gd_useDirectInternet", String(!!window.useDirectInternet)); } _buildMacroPopup() { @@ -7406,23 +7387,6 @@ const buildPage = (idx) => { this.sound.rate = currentSpeed; } } - // ОПТИМИЗАЦИЯ: Полностью очищенный от констант блок - this._cullingTimer = (this._cullingTimer || 0) + 1; - if (this._cullingTimer >= 6) { - this._cullingTimer = 0; - - if (window.culling && this._level && typeof this._level.updateVisibility === 'function') { - this._level.updateVisibility(this._cameraX); - - if (this._level._sectionContainers) { - this._level._sectionContainers.forEach((container, index) => { - if (container) { - container.setActive(index >= this._level._visMinSec && index <= this._level._visMaxSec); - } - }); - } - } - } // ДАЛЬШЕ ИДЕТ СТАРЫЙ КОД ИГРЫ (if (window.isEditor) и т.д.) From b15616138e2854f0ebe8f3bc11f6f884d15c873a Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 18:17:31 +0500 Subject: [PATCH 24/31] Music (noWarnSpam) --- assets/scripts/core/game-scene.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 728f21cc..c999fcb4 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -7374,15 +7374,15 @@ _buildSettingsPopup() { } } - // ИСПРАВЛЕННЫЙ БЛОК: Безопасная синхронизация музыки без вылетов - const currentSpeed = window.speedHack ? Math.sqrt(window.speedHack) : 1; - if (this._audio) { + if (this._level && !window.isEditor && this._audio) { + const currentSpeed = window.speedHack ? Math.sqrt(window.speedHack) : 1; + if (this._audio._music && typeof this._audio._music.setRate === 'function') { this._audio._music.setRate(currentSpeed); } else if (this._audio._music && this._audio._music.rate !== undefined) { this._audio._music.rate = currentSpeed; } - // Защита от ошибки Cannot set properties of null + if (this.sound && this.sound !== null && this.sound.rate !== undefined) { this.sound.rate = currentSpeed; } From 9aa1c1eeaa4b84cd2195cc15138c04d66eb54d5a Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 18:36:37 +0500 Subject: [PATCH 25/31] GeometFree Dash! --- assets/scripts/core/loading-screen.js | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/scripts/core/loading-screen.js b/assets/scripts/core/loading-screen.js index 8a7fedc5..5db69b03 100644 --- a/assets/scripts/core/loading-screen.js +++ b/assets/scripts/core/loading-screen.js @@ -188,6 +188,7 @@ class BootScene extends Phaser.Scene { "Unlock new icons and colors by completing achievements", "y=mx+b", "Nicest game ever!" + "GeometFree Dash!" ]; const sliderOriginX = cx - 105; const sliderOriginY = cy + 110; From f268a3a082707969cfe3a4b4a8aa804aedde79b9 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 18:54:16 +0500 Subject: [PATCH 26/31] Update game-scene.js --- assets/scripts/core/game-scene.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index c999fcb4..76f2c6c9 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4937,7 +4937,6 @@ _buildSettingsPopup() { } }; - // Чистый и безопасный способ убрать фокус при клике по экрану const removeMobileFocus = () => { if (document.activeElement === mobileInput) { mobileInput.blur(); @@ -5053,7 +5052,6 @@ _buildSettingsPopup() { (v) => window.speedHack = v ); - // Переносим под спидхак (правая колонка column2X, смещение на 2 шага вниз) createNumberInput(container, column2X, startY + (spacingY * 1), "Respawn Delay (s)", () => window.respawnDelay, (v) => { window.respawnDelay = v; } @@ -5076,7 +5074,7 @@ _buildSettingsPopup() { }; const buildVisualPage = (container) => { - const spacingY = 54; // Уменьшаем вертикальный шаг для всей вкладки + const spacingY = 54; createToggle(container, column1X, startY, "Show Hitboxes", () => window.showHitboxes, (v) => window.showHitboxes = v, @@ -5152,7 +5150,6 @@ _buildSettingsPopup() { true, "Enable Orb Guide" ); - // Чекбокс для скрытия кнопки паузы с мгновенным обновлением на экране createToggle(container, column2X, startY + (spacingY * 5), "Hide Pause Button", () => window.hidePauseBtn, (v) => { @@ -5163,8 +5160,6 @@ _buildSettingsPopup() { }, null, 25, true, "Hide Pause Button" ); - - // Чекбокс для скрытия кнопок практики с мгновенным обновлением на экране createToggle(container, column2X, startY + (spacingY * 6), "Hide Practice UI", () => window.hidePracticeUI, (v) => { @@ -6014,6 +6009,9 @@ _buildSettingsPopup() { this._updateLogPopup.destroy(); this._updateLogPopup = null; } + if (this.sound && this.sound.context && this.sound.context.state === 'suspended') { + this.sound.context.resume().catch(err => console.warn(err)); + } } _buildNewgroundsPopup() { if (this._newgroundsPopup || window.levelID) return; @@ -7366,7 +7364,6 @@ _buildSettingsPopup() { return _0xd8019e * 60; } update(_0x54fa47, deltaTime) { - // НАЧАЛО БЛОКА: Безопасный контроль кнопки паузы if (this._pauseBtn) { this._pauseBtn.setAlpha(window.hidePauseBtn ? 0 : (this._paused ? 75 / 255 : 0.75)); if (window.hidePauseBtn && this._pauseBtn.input && this._pauseBtn.input.enabled) { @@ -7388,7 +7385,7 @@ _buildSettingsPopup() { } } - // ДАЛЬШЕ ИДЕТ СТАРЫЙ КОД ИГРЫ (if (window.isEditor) и т.д.) + if (window.isEditor) { if (this._editorPlaytestActive && !this._editorPlaytestPaused) { From d46e2c85b306f7e2a2f30cced3377c5e55810b3f Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 19:02:50 +0500 Subject: [PATCH 27/31] , --- assets/scripts/core/loading-screen.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/core/loading-screen.js b/assets/scripts/core/loading-screen.js index 5db69b03..149b4d2c 100644 --- a/assets/scripts/core/loading-screen.js +++ b/assets/scripts/core/loading-screen.js @@ -187,7 +187,7 @@ class BootScene extends Phaser.Scene { "It is only game...", "Unlock new icons and colors by completing achievements", "y=mx+b", - "Nicest game ever!" + "Nicest game ever!", "GeometFree Dash!" ]; const sliderOriginX = cx - 105; From ee5a21f045b15fcd07b0e6bbb434588097244b85 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 19:18:47 +0500 Subject: [PATCH 28/31] -90 -> -80 --- assets/scripts/core/game-scene.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 005b1af8..a6e84a88 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4764,7 +4764,7 @@ _buildSettingsPopup() { const column1X = -200; const column2X = 200; const checkOffset = -120; - const textOffset = -90; + const textOffset = -80; const spacingY = 54; const startY = -150; let pageContainer = this.add.container(0, 0); From 98c8e4cb539e56bdc3ecd77acfa0c61666813765 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 19:46:19 +0500 Subject: [PATCH 29/31] createInfoButton --- assets/scripts/core/game-scene.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index a6e84a88..2c5ed765 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4783,7 +4783,7 @@ _buildSettingsPopup() { if (hasInfoBox) { if (infoText) { - createInfoButton(container, x + checkOffset - 34, y - 30, infoText, 0.3); + createInfoButton(container, x + checkOffset - 30, y - 25, infoText, 0.3); } } From 3a193da7e0ac8a75c92666c6cb1fe575b3d667e9 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 19:51:01 +0500 Subject: [PATCH 30/31] InfoSize --- assets/scripts/core/game-scene.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/scripts/core/game-scene.js b/assets/scripts/core/game-scene.js index 2c5ed765..bf0a87c1 100644 --- a/assets/scripts/core/game-scene.js +++ b/assets/scripts/core/game-scene.js @@ -4783,7 +4783,7 @@ _buildSettingsPopup() { if (hasInfoBox) { if (infoText) { - createInfoButton(container, x + checkOffset - 30, y - 25, infoText, 0.3); + createInfoButton(container, x + checkOffset - 30, y - 24, infoText, 0.34); } } From 4bc5b2836cf0ee3ebf99480db2138b44d86e6d45 Mon Sep 17 00:00:00 2001 From: SSI <130287955+SSI-GH@users.noreply.github.com> Date: Sat, 25 Jul 2026 22:24:55 +0500 Subject: [PATCH 31/31] fix: apply speedhack to custom songs (TestCommit) --- assets/scripts/core/audio.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/scripts/core/audio.js b/assets/scripts/core/audio.js index 9ae2ec76..96a40295 100644 --- a/assets/scripts/core/audio.js +++ b/assets/scripts/core/audio.js @@ -269,6 +269,10 @@ class AudioManager { const source = ctx.createBufferSource(); source.buffer = audioBuffer; source.loop = true; + const currentSpeed = window.SpeedHack || 1; + if (source && source.playbackRate) { + source.playbackRate.setValueAtTime(currentSpeed, ctx.currentTime); + } source.connect(gainNode); source.start(0, safeOffset); this._onlineSource = source; @@ -527,4 +531,4 @@ class AudioManager { this._pendingOnlineSongFadeDuration = null; this.stopMusic(); } -} \ No newline at end of file +}