A from-scratch FPS built in pure C with raylib — no engine, no scripting layer, one file
2,900+ lines of C • zero dependencies beyond raylib
Billboard-sprited enemies with boids separation and multi-state AI. Three subtypes roam the arena:
Standard combatant. Balanced speed and damage output.
Tank variant. Absorbs punishment, hits harder.
Glass cannon. Closes distance quickly, low survivability.
AI STATE MACHINE
The entire game lives in one game.c file. No engine, no scripting layer, no abstraction layers — just raw C and raylib.
Hand-written fragment shader with 6 dynamic point lights, distance fog, and per-pixel attenuation. Lights flicker and pulse.
Enemies rendered as camera-facing quads, back-to-front sorted each frame for correct transparency. Classic 2.5D aesthetic.
Hit-spawned particle system with floor decals. Particles inherit velocity, fade over time, and stick to surfaces as permanent blood splats.
Moving platforms with Quake 3 Arena-inspired mechanics. Elevators, jump pads, and vertical combat arenas.
No eBPF, no Unity, no Unreal, no Godot. Just C, raylib for windowing/GL, and raw OpenGL shaders. Build with a single gcc invocation.
Iconic background music loop that sets the tone. Volume adjustable in-game with -/+ keys.
UT/MK-style voice lines: First Blood, Headshot, Multi-Kill, Killing Spree, Fatality. Triggered by kill streaks and special shots.
Explosions and gunfire attenuate with distance. Spatial audio gives positional feedback on enemy locations.
Per-weapon fire sounds, shell casings, rocket trails, meat impacts. Every action has distinct audio confirmation.
Source code • Build instructions • Asset pipeline