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:
sv_friction sv_accelerate sv_autohop
sv_stopspeed sv_maxairspeed sv_airaccelerate
m_sensitivityForward-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.