Back to Devlog
    v0.8.19
    MovementJanuary 15, 2026Release notes

    The Engine Learned to Bunny Hop

    Warsow movement constants ported from gs_pmove.c, a BSP lightgrid, a day/night cycle, and the first weapon view models with muzzle flashes.

    The Movement Numbers Came From The Source

    Ported from Warsow's gs_pmove.c rather than guessed:

    text
    sv_friction      sv_accelerate      sv_autohop
    sv_stopspeed     sv_maxairspeed     sv_airaccelerate
    m_sensitivity

    Forward-only air acceleration with a bunny speed soft cap of 925 u/s. Strafe-only acceleration at 70 with a capped wishspeed of 30. Ground strafe at 50% speed. A jetpack fix that only counts ground contact when velocity.y <= 0.

    Lighting From The Map

    BSP LightGrid integration: trilinear interpolation of ambient and directional light, a per-model DirectionalLight, spherical Q3 lat/long direction decoding, gamma-correct colour conversion, and a fallback when there is no grid data.

    Then a day/night cycle on top of it — daynight presets, world diffuse modulation between 0.1x and 1.5x, a skybox tinted from bright white at noon to dark blue at midnight, street lamps that switch themselves on, and worldspawn keys daynight_enabled, daynight_time, daynight_cycle, daynight_animate.

    Then The Guns Arrived

    WeaponViewManager.ts, ProjectileManager.ts, MD3 weapon models with tag_weapon and tag_flash, billboarded additive muzzle flashes, bob, sway and recoil. join spawns you at a random info_player_* and sets spectator 0.

    Also: spawnmodel with rotate/move/scale and animation control, ModelLoader's animation API (playAnimation, pauseAnimation, getAnimationNames), and a 24/32-bit TGA parser with alpha.

    Known Issues: none stated.