Skip to content

pinguy/nervk

Repository files navigation

nervk

nervk is a native Linux procedural survival FPS squeezed into a 32 KiB runnable.

It is a .kkrieger-flavoured tiny game experiment: generated floors, procedural materials, synthesized audio, weapons, enemies, curses, boss pressure, automap, seed/floor sharing, death/retry, and cumulative run scoring.

The point is not just that it is small.

The point is that it is still recognisably a game.

Current release artefact: 32 KiB class. The GCC 9 BCJ+tight-stub build measured 32,701 bytes, leaving 67 bytes under the 32 KiB line.

Screenshots

Floor Biomes

Works Hive
Works biome Hive biome
Vessel Mixed
Vessel biome Mixed biome

Enemies And Attacks

Crawler + Skitter Spitters + Acid
Crawler and skitter enemies Spitter acid attack
Brute + Bruiser
Brute and bruiser attack

Weapons

Pistol Shotgun
Pistol Shotgun
Rocket Dynamite
Rocket launcher Dynamite

What It Is

nervk is a single-C-file native Linux game with no asset files.

Everything is generated or embedded in code:

  • procedural dungeon floors
  • generated wall / floor / ceiling materials
  • normal maps and glow sprites synthesized at startup
  • generated audio and weapon sounds
  • multiple weapons and pickups
  • enemy variants, curses, boss pressure, and a stalker threat
  • automap, scoring, seed editing, and replayable floor commands
  • self-extracting compressed runner

The final runnable is a tiny shell self-extractor containing a compressed native ELF payload.

Size Claim

The current release build is a 32 KiB runnable.

The size budget refers to the generated runner file, not the system libraries already present on Linux.

Expected direct ELF dependency after the GCC 9 build:

NEEDED: libdl.so.2

SDL2, OpenGL, libm, and libc are loaded at runtime. The self-extracting runner also expects xz on the target system.

Exact byte count can vary if rebuilt with different compiler, linker, binutils, shell, or xz versions. The checked-in runner is the measured target.

Running

chmod +x ./nervk
./nervk

Press ESC to quit from any screen. Press F11 to toggle fullscreen.

Building

For the size-targeted build, use the bundled GCC 9 Bullseye wrapper:

sh ./REBUILD_ME.sh

That wrapper uses Podman and the local toolchains/gcc9-bullseye/Containerfile. The build script applies a temporary source pre-pass when useful, then builds the packed runner.

Disable the source pre-pass with:

COPT_SOURCE_PREPASS=0 sh ./REBUILD_ME.sh

Controls

Title

CLICK       start
E           edit seed
F           edit floor
ENTER       apply edit
ESC         quit
F11         fullscreen

Play

WASD        move
Mouse       look
LMB         fire
1 / 2 / 3 / 4
            pistol / shotgun / rocket / dynamite
Mouse wheel cycle weapon
M           toggle automap
TAB         hold expanded automap
ESC         quit
F11         fullscreen

Clear Screen

LMB         descend

Death Screen

C           copy run/floor command
R           retry current floor
ENTER       new run

Status

nervk is playable, experimental, and deliberately ridiculous.

It is small enough that an ordinary screenshot can be larger than the game itself.

That is the joke.

That is also the achievement.

About

Native Linux 32K procedural survival FPS

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors