nervk_v2 & The Stalker that shows up randomly
.nervk armor
Tiny native-Linux FPS experiment in the spirit of .kkrieger: one C file, no asset files, no engine, procedural everything.
This branch is now built around nervk2.c as the base, with the useful missing pieces from nervk_armory(5).c folded back in rather than replacing the newer systems.
What it is
.nervk armory is a compact endless corridor shooter:
- procedural levels carved from a deterministic seed
- procedural wall, floor, ceiling and glow textures
- normal-mapped GL 2.1 lighting and fog
- synthesized weapon and monster audio
- generated creature silhouettes
- generated weapon models
- HUD, pickups, particles, projectiles and floor transitions
- no external assets
The funny part: the current tiny build has been measured at about 28.2 KB, while still having enough moving parts to feel like a real little horror shooter rather than just a size stunt.
Current feature set
Weapons
Weapon switching is on 1, 2, 3, plus mouse wheel.
1pistol- accurate hitscan
- uses bullet ammo
- fast, reliable fallback weapon
2shotgun- nine-pellet spread
- uses shell ammo
- heavy kick
- improved generated model with twin barrels, receiver, pump, stock and double muzzle flash
3rocket launcher- physical glowing rocket projectile
- smoke trail
- radius damage
- self-damage if you fire like a hero in a cupboard
The weapon sounds are intentionally back near the older armory-style synth sounds after the over-beefed pass made them worse.
Pickups
Four pickup classes:
- red health
- amber/yellow bullets
- orange/brass shells
- cyan rockets
The pickup and HUD colour language follows the newer nervk2.c look, with shells added into the existing palette instead of recolouring the whole thing.
Creature roster
The roster now keeps the newer nervk2.c enemies and the useful armory creatures as distinct kinds, so nothing gets silently overwritten.
CRAWLER- basic fast melee pressure
SKITTER- small, fast panic enemy
BRUTE- large heavy tank / exit guardian
BRUISER- renamed armory heavy variant, kept separate from
BRUTE
- renamed armory heavy variant, kept separate from
SPITTER- newer projectile spitter
- ranged acid/gob pressure
ARMORY_SPITTER- renamed green armory spitter/gland creature
- does not fire a projectile
- closes to bile/light range, rears up, lights the ground/player green, then applies direct damage
- nasty when it has you boxed into a corner
That last one is important: the green armory spitter is not just another ranged shooter. It is a close-range controller / corner-punisher. The windup gives you a readable “move now” moment, but if you are trapped it becomes a proper bastard.
Tilesets and floors
There are now three procedural tileset families:
WORKS- original brick walls
- grimy floor slabs
- bolted metal ceilings
HIVE- chitin plates
- membrane floors
- ribbed organic ceilings
VESSEL- armory pressure-vessel look
- wet black ribbed walls
- gridded floor plates
- oily duct ceilings
Normal floors use one coherent tileset family.
Every fourth floor is a MIXED floor. On those floors the wall, floor and ceiling each choose a deterministic random tileset independently, so you can get combinations like brick walls, hive floor and vessel ceiling without adding asset bulk.
Endless descent
Touching the green exit:
- derives the next deterministic seed
- increments the floor counter
- carries resources forward with small bonuses
- changes the floor identity / tileset cycle
- keeps the pressure climbing through spawn weighting
Controls
WASD move
Mouse look
LMB fire
1 pistol
2 shotgun
3 rocket launcher
Mouse wheel cycle weapon
ESC quit
Build
Build the normal stripped ELF:
bash build_nervk_armory_tiny.shRun it:
./nervk_armory.xzrunOverride the deterministic seed:
./nervk_armory.xzrun --seed 12345Tiny build notes
The project still follows the original 96 KB discipline: system libraries such as SDL2, OpenGL and libc are not counted, just like .kkrieger leaned on the platform graphics stack.
The current tiny build has been measured at roughly:
runner: 26 KB
That is after adding:
- three weapons
- four pickup types
- six creature kinds
- three procedural tileset families
- mixed-material floors
- projectiles
- particles
- synthesized audio
- HUD and generated weapon models
So the headroom is still absurdly good. There is room for this to become more of a real game without betraying the original “tiny procedural bastard” idea.
Verification
The latest merge was syntax/type checked with strict C flags against local SDL/OpenGL stubs:
gcc -std=c99 -Wall -Wextra -Werror -fsyntax-only nervk_armory.cA full native SDL2/OpenGL link needs SDL2 development headers and GL libraries installed on the target Linux system.
Design notes
The project started as a size experiment: how small can a native Linux FPS be if everything is generated in code?
The answer is that the constraint accidentally creates a proper design language. Because there are no asset files to lean on, every feature has to be a compact system:
- textures are algorithms
- levels are seeded rules
- enemies are behaviour archetypes
- audio is small synth events
- weapon feel is timing, kick, light and hit logic
- atmosphere is material, fog and dynamic light
The result is not just “small Doom clone”. It is a tiny procedural horror shoebox where each extra kilobyte has to earn its keep.
Still no asset files. The weapons, pickups, creature silhouettes, bile-light attack, projectile trail, explosion, audio voices, floor materials and HUD are all generated in code.
Download nervk and run this then just launch
chmod +x ./nervkchmod +x ./nervk_v2 Seed sharing now works like:
./nervk_v2 --seed 12345



