C# · OpenGL 4.1 · Every seed is a different game

PROCGENFPS

A retro-gameplay, modern-look first-person shooter where the levels, weapons, monsters and soundtrack are all generated from scratch — procedurally, every run.

Everything is generated

No two runs are alike. A single seed drives an entire world — and it's all self-validating, so every level is guaranteed beatable.

Procedural levels

Rooms placed on a grid and carved into corridors, at varying elevations with Doom-style stairs and elevators. A strict blue → yellow → red key chain gates the exit.

Procedural weapons

12 classes assembled from parametric parts — receiver, barrel, grip, mag, sight, stock — with seed-driven stats, colours and names. Each level generates its own arsenal.

Procedural monsters

Three body plans built as rigid-part skeletons and animated on the fly — walk cycles, attack lunges, hover, death topple. AI patrols, investigates noise, and gives chase with A* pathfinding.

Procedural sound & music

Every gunshot is synthesized from oscillators and noise — no audio files. Each level gets its own looping action track, its tempo and key derived from the level number.

Checkpoints & saves

Every key or weapon pickup is a checkpoint. Die and you resume there — enemies you cleared stay dead, doors you opened stay open, guns you found stay found.

Boss every 5th level

A four-strong roster that cycles and scales: The Maw, Gunlord, Eye Tyrant and Broodmother — oversized, glowing, and driving a health bar across the HUD.

One seed. A whole game.

Play starts from a fixed seed that increments each level, so the sequence is identical every run — but change the seed and everything changes with it: the map layout, the guns on the floor, the monsters in the rooms, the melody in your ears.

The level generator is self-validating: every lock is placed by staged flood-fill and rolled back if it can't be made solvable. The key order always holds, and the exit is always reachable — verified across thousands of generated levels.

Grid rooms + carved corridors Per-sector elevations Stairs & elevators Volumetric light shafts Strict lock chain A* pathfinding
A glowing cyan invulnerability sphere floats in a boss arena, with a pulsing cyan screen border and an INVULN 30 countdown on the HUD.
A rare invulnerability sphere — a per-level roll — grants 30 seconds of immunity.

The arsenal

You enter each level holding only weapon 1. The other guns are scattered around as floating, spinning pickups that glow in their accent colour — grab one and it arrives loaded.

HITSCAN

Pistol · SMG · Chaingun

Fast, straight, belt-fed. The chaingun's barrel cluster spins up on the trigger.

SPREAD

Shotgun · Double Shotgun

Twin side-by-side barrels dealing double the per-pellet damage up close.

PRECISION

Rifle · Railgun

Scope in on right-click — a scoped shot is dead-centre and a guaranteed one-hit kill.

ENERGY

Plasma · Cannon

Straight bolts of raw energy in the weapon's seed-driven accent colour.

SPLASH

Grenade · Rocket Launcher

Lobbed grenades bounce and detonate; rockets deal punchy splash across the whole radius.

ULTIMATE

The BFG

A rare find on ~30% of levels, hard-capped at 10 rounds you can never exceed.

Download

Self-contained builds — the .NET runtime is bundled in, so there's nothing else to install. Just download, unzip or mount, and play.

Windows

64-bit · portable .zip
Download for Windows30 MB

Unzip anywhere and run FPS2.exe. Windows may show a SmartScreen warning — click More info → Run anyway.

macOS

Apple Silicon · .dmg
Download for macOS29 MB

Open the .dmg and drag FPS2 to Applications. First launch: right-click the app → Open to clear Gatekeeper.

Version 1.0.0 · Also runs from source on Linux — see below.

Run from source

Prefer to build it yourself? Requires the .NET 8 SDK and an OpenGL 4.1 core-profile context (macOS, Windows or Linux).

terminal
# launch fullscreen at 1920×1080
$ dotnet run -c Release

Controls

WASDMove
MouseLook
L-ClickFire (hold for automatic)
R-ClickScope in (rifles)
16 / WheelSwitch weapon
RReload
FFlashlight
TabOverhead automap
EUse exit pad (descend)
EscQuit

Find keys in order — blueyellowred — to open the colour-coded locked doors. Grab green health cubes and magenta ammo cubes, ride elevators to hidden lofts, then reach the green exit pad and press E to descend to the next generated level.