Conversation
A hidden renderer receives no compositor frames, so with Launch Animation off Krunker's load could stall before ready-to-show and the launch deadlocked behind a black screen. The intro path always shows the window at its opaque reveal; the no-intro path now does the same as soon as the navigation starts. Also fixes two renderer crashes hit on every launch: - whenDOMReady reached observer and poll before their declarations whenever the body already existed, killing the reload/fallback applyClientVisuals pass (theme, identity and keyframe fix never ran). - menu declutter called every/filter on NodeLists returned by querySelectorAll, throwing a repeating Uncaught TypeError on the menu.
Alx8g
force-pushed
the
fix/reveal-game-window-without-intro
branch
from
September 3, 2026 11:29
cb831b5 to
10cfa70
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
With Launch Animation turned off, some launches went permanently black: the window appeared but Krunker never loaded, and the only recovery was killing the client.
Cause
The game window is created hidden. With the intro enabled, the intro's opaque reveal shows it unconditionally about 1.5s in, which also stops Chromium treating the renderer as a hidden window. With the intro disabled, the first and only reveal was ready-to-show. A hidden renderer receives no compositor frames, so Krunker's load can stall before that event fires. The 25s failsafe then shows a window whose renderer never painted: a black screen for the rest of the session.
Two further crashes were reproduced on every launch while diagnosing this (from the renderer console log):
whenDOMReadyreachedobserverandpollbefore their declarations whenever the body already existed, killing the reload/did-finish-loadapplyClientVisualspass, so theme, custom identity and the keyframe fix never ran.every/filteron NodeLists returned byquerySelectorAll, producing a repeatingUncaught TypeError: cards.every is not a function.Fix
observer/pollbeforerunand guard the interval id (preload.ts).every/filter(menu-declutter.ts).Verification
pnpm run validate: lint, typecheck, 586 tests pass.introAnimation: falseplus the release smoke harness: outcome success, window visible, game usable at 8.3s, non-uniform pixels. Both renderer console errors are gone (0 occurrences vs repeating before).