Eight Weapons, Off By About Twenty-Four Bits
All eight Warsow weapons with ammo entities and projectiles, a two-slot inventory, and a KTX1 decoder whose bit offsets were wrong.
The Roster
All eight Warsow weapons as EntityRegistry definitions — gunblade, machinegun, riotgun, grenade launcher, rocket launcher, electrobolt, lasergun, instagun — plus ammo entities and the grenade, rocket and gunblade-blast projectiles.
InventoryManager.MAX_WEAPONS = 2. Two slots, Quake-style, and the game has to decide every time you walk over a weapon whether picking it up is a swap or a refusal.
Pickup UX
PRESS [F] TO PICKUP <name>
PRESS [F] TO SWAP TO <name>Drop and swap, 0.8s pickup immunity on dropped weapons, scroll wheel cycles slots 0 and 1. Pickups auto-collect ammo and health on touch.
The Wire
weapon_state per player in snapshots, local weapon_fire prediction skipped, spawn weapons aligned to the gunblade rather than the plasmagun, and server projectile spawn height corrected +20 to +24. giveWeapon() returns { acquired, dropped }.
The Decoder
diffBit/flipBit extracted from wrong bit positions (off by ~24 bits)Also tableIdx0/tableIdx1 off by about 16 bits, modifier indices 0 and 1 swapped, and pixel index ordering row-major instead of column-major. KTX row-flip added after the software decode.
Every compressed texture on every map was rendering as noise, and the bug report would have been "textures look wrong".
Known Issues: LightGrid dimension mismatch warnings on some FBSP maps.