Skip to content
Novus Striker
All development notes

About 4 min readNovus Stream Solutions

A failed load used to look like a slow one

For two weeks a broken launch and a slow one showed the same frozen progress bar. What the game page checks now, and why only two of the five can stop a launch.

  • Engineering
  • Loading
  • Diagnostics
The in-engine loading screen from the current Novus Striker build.

The release this is about

e7466503acf1744e, shipped August 3, 2026. Sculpted characters, the skill stick, and a failed load that finally says so.

The picture above is the game's own loading screen, the one the engine draws once it is running. This post is about the screen before it: the website's, which is what you look at while the build is still arriving. For a fortnight it lied by omission.

The incident ran from 19 July to 3 August 2026. A launch that had failed and a launch that was merely slow produced exactly the same thing: a progress bar stopped part of the way across, with no message, no error and nothing to try. If your device could not run the game, the page never told you. It just kept looking busy.

Why it was invisible

The Unity player the site embeds does report this. react-unity-webgl exposes an initialisation error, and the page never read it. So a truncated download, a bad content encoding and an out-of-memory on a weak device all arrived at the same place: a value nothing was looking at, and a bar that stayed where it was.

There was no WebGL 2 check either, which is the part that made it a support problem rather than a bug report. Unity 6 WebGL requires WebGL 2. A browser without it was never going to run the game at all, and instead of being told that, it sat on the loading bar indefinitely, indistinguishable from a slow connection.

A failed load was indistinguishable from a slow one.
Release e7466503acf1744e, 3 August 2026

What the page does now

Five capability checks run before a single byte of the game is fetched. That ordering is the whole point of them: the check that existed before this work lived inside the component whose mount starts the download, so it ran alongside the fetch it was meant to prevent, and an unsupported browser still pulled the payload before being told it could not use it.

  • WebGL 2, which is what the game renders every frame into.
  • WebAssembly, which is what the game code is.
  • Device memory, against a floor of 2 GB.
  • Storage for the cache, so a second visit does not refetch everything.
  • An input device, meaning a keyboard, a pad or a touchscreen.

Only the first two can stop a launch. Everything else reports and then gets out of the way, and that restraint is deliberate rather than lenient.

Four stages, and only one of them claims a number

Loading is reported as download, compile, initialise and cache. The download stage carries a percentage because the loader reports byte-weighted progress and the total size is known. The other three carry none, and say so in words instead.

That is the correction for what the single bar was actually guilty of. Nothing measures how far through compiling your browser is, so a bar that kept creeping during the compile was inventing the number it displayed. Naming the stage and admitting no progress is reported is less satisfying to look at and is true, and it is also what makes a stall diagnostic: a launch that stops in compile is a different problem from one that stops in download.

The diagnostic report, and where it goes

When a launch fails the page offers a report: the renderer and vendor strings, the browser, the stage that was in flight, the release id, the cache version, a short error code and the results of the five checks. It is shown in full before it is copied, so you can read exactly what you would be sending.

The other half of the same release

The build that closed this incident also corrected a number. The download size had been written into the site by hand, in four separate places, and every one of them overstated it by about seventy per cent against the build that was actually being served. It is now summed from the release manifest when the site is built, so the figure the page quotes cannot fall behind the build it is quoting for.

The same rule now covers the release id, the roster stats and the control bindings the guides print: if a value describes the installed build, it is read from the installed build. What is checked, what each stage means and every field of the report are written out on the help page.

Where to check this

Nothing above is written from memory. These are the pages and records each claim comes from.

We use essential cookies to run the site. With your consent, we also show ads through Adsterra and use Google Analytics to understand usage. Learn more.