Back to Devlog
    v1.0.0-alpha.5
    1.0 Alpha 5October 25, 2026Release notes

    Road to 1.0: A Lighter Load

    Much smaller downloads, restored weapon detail and loading that handles map changes, background tabs and failures more carefully. Inside Washoi alpha 5.

    Bring Less, Get More Ready

    Alpha 4 taught the game to prepare downloads in the background and keep unchanged packages between visits. Alpha 5 asks an earlier question: how much did we need to download in the first place?

    The answer turns out to include quite a lot that the game never used.

    The weapon package drops from 86 MB to 4.9 MB. The five map texture banks together go from 181 MB to about 34 MB. Weapons also gain normal and gloss detail that their model conversion had left behind.

    Alongside those smaller packages is a sustained repair of the loading pipeline: what happens when you switch maps, leave the tab in the background, lose a graphics context, or have a download finish after the scene that asked for it has already gone away.

    Another step toward 1.0 means carrying less into the arena, and being more careful about when the game says it is ready.

    The Weapon Package Loses Its Baggage

    The old package carried the original weapon asset bank alongside the converted models. That meant textures and model formats the game never loaded, retired weapons and redundant exports all travelled to the browser with the guns it actually drew.

    The rebuilt package carries the media the game uses. Its textures are WebP, at most 1024 pixels, and the package is 4.9 MB instead of 86 MB.

    There is more detail in those guns, too. The conversion had embedded their colour textures while leaving out normal and gloss maps. Those now make their way into the materials, bringing out panel lines, bevels and worn metal across the weapons.

    A smaller download and a more complete material can be the same change. The savings come from removing unused content and packaging textures more efficiently, while restoring maps the models were missing.

    Five Map Banks, a Much Smaller Total

    The map texture banks had a similar problem. They shipped TGA and PNG images copied from the master texture bank, even though those are expensive formats to send down a connection.

    The five banks now total 33.6 MB instead of 181.4 MB. As one example, washoi_dm5's bank goes from 59 MB to 10.8 MB. Those totals describe the texture banks across all five maps; joining a match prepares the selected map and its dependencies.

    WebP quality is chosen per texture. Normal maps, sky boxes and cut-out edges get more attention than a single blanket compression setting would allow. Shaders that name a TGA texture still work: the loader looks for its WebP version first.

    The KTX2 sidecars used by the default rendering path stay unchanged. They continue to be encoded from the lossless master images. The smaller fallback banks do not become a lossy intermediate for those GPU textures. With KTX2 disabled, the research comparison found slightly softer fine noise on concrete, while signs, brick, sky and lights remained close to the originals.

    Let the Cache Finish in Its Own Time

    A cache should help a download finish, rather than become another reason for it to wait forever.

    Browser cache reads and writes now have bounded waits. A validated package is available to the game before its disk write finishes. Pending writes queue archive identities behind the bounded memory cache, fixing packages that were previously skipped when two writes were already pending.

    An existing valid entry is kept until its replacement succeeds. The write queue also limits how many downloaded bodies it retains, so persistence has a budget as well as a job to do.

    The package index gets a stronger handover between updates. Generated manifests refer to an immutable index payload, concurrent requests share their work, and an incomplete published update retries or retains the last coherent snapshot. Falling back to a cached index also preserves the content hashes used to identify reusable packages.

    Texture requests acquire their indexed package before resolving its files. Concurrent requests and reads from the same ZIP share work, and independent map dependencies can use the existing two-download scheduler together. An indexed failure no longer sends the loader searching for loose files that were never published.

    Ready Means the Scene Can Draw

    One of the nastier failures looked like a completed load: the loading screen closed, the match state advanced, and the game view was white.

    A map material could be frozen with a replacement shader still compiling, while retaining the previous draw's ready flag. The next draw then tried to use a shader that was not ready, stopping the render loop.

    World materials now stay unfrozen through shader warmup, reflections and final scene readiness. They freeze for gameplay afterward. Explicit preparation also temporarily unfreezes an already frozen material while its replacement effect compiles, with cleanup restoring its policy if the operation fails or is cancelled.

    Required collision data, player models and combat models are checked before play opens. Held weapons and projectiles have bounded readiness waits; a missing required projectile model fails preparation instead of quietly being counted as ready. Normal demo Watch now uses the same held-weapon and projectile preparation as live matches.

    There are repairs for water and depth state too. Depth capture restores the renderer's framebuffer state on every exit, and map changes reject disposed shared captures. Water replaces unavailable capture textures instead of holding onto a dead one that prevents its material from becoming ready.

    A Map Change Belongs to the New Map

    A download or decoder can finish after the player has already moved on. That completion still needs to know which load it belonged to.

    Loading operations now carry cancellation and identity through scene cleanup and match or demo preparation. An older load cannot dismiss a newer loading screen or put entries back into pickup caches that were cleared for the next map.

    Texture decoders discard results whose destination was disposed during a timeout or map change. Retired work leaves scene readiness tracking, and an obsolete sidecar request cannot start a source fallback inside the replacement map.

    Background tabs get a more useful recovery path. GPU preparation pauses its timeout budget while the tab is hidden or frozen. On return, healthy resources are checked without forcing another full shader recompile. A lost graphics context or device reports a retryable loading failure.

    Optional texture metadata, sidecar preparation and audio also have bounded waits. Audio starts alongside the map load. Static water highlight preparation uses a spatial triangle index for its visibility rays, removing a measured multi-second loading freeze caused by repeatedly scanning the world's triangles.

    A Quieter Lobby, a Clearer Finish

    The Play page gains a speaker key beside Credits. It turns lobby music off and on, stays pressed while muted, and remembers the choice in the browser. Match music keeps playing, so you can quiet the menu without turning off the soundtrack everywhere.

    The winner on the end-of-match screen also gets their armour and detail back. A forced full-bright glow and outline had washed the model into a flat shape of the player's colour. The winner now has a light of their own, keeping the colour while making the model readable again.

    Loadout weapon previews use the shared asset loader, fixing missing previews and requests for loose GLB files that returned 404 in production. Packaged weapons without optional attachment overrides also stop making repeated requests for a missing tags file.

    Less to Carry Toward 1.0

    The biggest numbers in alpha 5 are download sizes. The equally useful work is in the handovers: a valid package becoming usable, a shader finishing, a cancelled map leaving cleanly, a background tab returning.

    Smaller packages give the connection less work. Clearer loading ownership helps the game finish that work safely. The road to 1.0 gets lighter, one unnecessary download and one broken handover at a time.