Back to Devlog
    v0.8.9
    GameplayJanuary 4, 2026Release notes

    A Door That Was In The Map The Whole Time

    BSP entities routed through the same handler registry as .map files, func_door with inline brush models, and freefly collision against clip brushes.

    One Registry, Two File Formats

    BSP entities now go through the same EntityHandlerRegistry as .map files, via processBspEntities() in MapLoader and a new BspEntityHandlers.ts.

    func_door

    Brush-model meshes come from BSP inline models (*N). Three details that are easy to get wrong and were:

    • Triangle indices from `meshVerts`, not a triangle fan.
    • Lightmaps via RawTexture from the BSP's raw RGB, with UV2 coords.
    • Movement direction from the angle key: -1 up, -2 down, otherwise degrees

    horizontally.

    Doors group by targetname and share a controller. Tested on the wdm17 tech door.

    text
    bsp door list | open <name> | close <name> | toggle <name>

    Travel distance is brush size minus a lip, default 8.

    Freefly Collision

    Combines Babylon mesh collision with BSP clip brushes (fullclip, playerclip). FBSP brushside parsing was fixed — a 12-byte RBSP struct.

    Three new debug commands, and they are unusually specific: freefly_collision clipviz, clipdump and cliptrace [dist] [radius] [height].

    Compatible with both IBSP (Q3) and FBSP (Warsow).

    Known Issues: none stated.