Back to Devlog
    v0.8.0
    RendererJanuary 2, 2026Release notes

    The Engine Meets a Quake Map

    BSP loading, PK3 archives and the Quake shader system. The release where a TypeScript engine stopped being an engine and started being an arena shooter.

    Everything Up To This Point Was Loading Nothing

    Ten months of work on cameras, plants, pots and console commands, and the honest summary of the renderer was: it could draw shapes we made ourselves.

    Quake 3 and Warsow maps are not shapes. They are a 1999-era binary format full of lightmaps, PVS clusters, fog volumes and faces that assume a coordinate system Babylon.js has never heard of.

    What Landed

    BSP loading, both dialects:

    • IBSP v46/v47 — Quake 3 Arena maps.
    • FBSP v1 — Warsow maps.

    Face types are polygons, bezier patches and meshes, with UV coordinates converted from Quake's Z-up right-handed axes into Babylon's Y-up left-handed ones. One mesh per texture group, which is a decision made for phones, not for our GPUs.

    PK3 archives, because a BSP on its own is a husk. Textures live in packages, so: multi-path archive loading, an index that maps file to package (cached in localStorage), and automatic loading of whichever texture PK3s a given map actually needs. TGA, JPG, PNG and KTX, all read straight out of the archives.

    The Quake shader system — .shader files parsed from the PK3s into a registry, with the old underscore-to-slash name translation handled once instead of at every lookup. Material properties are real: cull, blendFunc, alphaFunc, polygonOffset. Alpha testing gives fences and leaves proper cutout transparency, and cull none makes surfaces double-sided.

    The Whole Thing Is Nine Console Commands

    This is the part that made it feel like a real engine rather than a demo:

    pk3 path game/basewsw/
    pk3 index build
    scene empty
    bsp load wdm11
    bsp loadrequired
    shader load
    bsp render
    bsp applytextures

    That is a Warsow map, with its textures, in a browser, driven from a console.

    Known Issues

    Stated here because the changelog states them, not tucked away:

    • Alpha blending may be wrong on some transparent textures.
    • Some decals still z-fight.
    • Lightmaps are parsed but not yet applied to materials. The data is in

    memory and on screen it is going unused.

    That last one is why this post is a beginning rather than a arrival.