What it does
A run holds one floor and steps it on with the player's controls: a move, a facing, the trigger, the use key and a weapon choice. It slides the player along walls, opens the door ahead or tells you which key it needs, pushes a secret wall back into its closet, fires the gun in hand, resolves every pellet against the enemies and the walls, and lets every enemy within earshot of the shot hear it. Then the enemies take their turn, projectiles fly both ways, and anything the player walks over is collected if it is any use.
It is built from three smaller packs you can use on their own: cell-dungeon is the map, fps-weapons the arsenal
and fps-enemies the AI. The run ties them together with pickups, damage, lives, extra lives at score thresholds,
death and a restarted floor, and the exit switch with its tally and bonus. The next floor keeps your score, lives,
health and guns.
Floors come from a generator built on levelgen's dungeon: rooms in their own wall pictures, doors where walls flank
a doorway, the exit in the room farthest on foot from the start, a locked door that cuts it off with the key in a
room you can still reach, secret closets of treasure carved into the rock, and seeded enemies and items. The
generator lights them too, as data in the map: lamps or torches through the rooms and corridors, some rooms left dark
if you like, a glow spilling from each secret passage and another at the exit switch. An autopilot plays any floor,
for attract modes and tests.
Features
- Doors, keys and secrets — doors slide open and close behind you unless someone is in the way; locked doors need their key; push-walls slide back on hidden closets.
- Enemies with senses — they stand guard or patrol, see within a cone, hear shots through open doors, chase along paths, aim, shoot, flinch and fall, and only a few aim at once.
- A real arsenal — melee, hitscan and projectile weapons, automatic or one shot per press, pellets in a cone, damage falloff, shared or separate ammunition, switching by number.
- Pickups — health only when hurt, ammunition only with room for it, weapons, treasure, keys and extra lives.
- Lives and the tally — a death restarts the floor with the starting guns; the exit pays bonuses for perfect ratios and time under par.
- Generated floors — seeded rooms and corridors that grow floor by floor, with a lock and key and secrets.
- Lit floors — lamps, torches and glows placed by room and corridor, in your colours, brightness and spacing.
- Two sets — a classic one with guards, dogs, officers and troopers, and a crypt one with bolts, scatterguns, fire, skeletons, archers, wraiths and brutes.
- An autopilot — a simple player that shoots, gathers supplies, fetches the key and walks to the exit.
Good for
- A retro first-person shooter — the classic set and generated floors are a complete game.
- A dungeon or crypt crawler in real time — the crypt set swaps the guns and the monsters.
- A game jam or a teaching project — the rules are done, so the time goes on the look.
- A raycaster — the map's rays give cell, side and texture position for column drawing.
- A stealth or horror maze — turn down the guns and turn up the enemies' senses.
Make it yours
Weapons, ammunition, enemies, items, player health and lives, damage, par, bonus and the map are all configuration. Write floors by hand as rows of characters, or generate them with your own size, enemy mix, density, items, wall pictures, door and switch pictures, lock, number of secrets and lighting. The classic set on a 33-cell floor with a gold key under steady lamps is one game; the crypt set on larger floors, with projectiles you dodge, splash damage, a silver key and torchlight with dark rooms between, is another from the same rules.
A quick look
Start a generated floor, step it with the player's controls, and move on at the exit.
const run = corridorShooter.createCorridorRun(corridorShooter.corridorFloor(1, { seed: 7, skill: 'normal' }));
game.step('play', dt => {
run.step(dt, { move: { x: mx, z: mz }, yaw, fire, use });
if (run.status === 'complete') run.nextFloor(corridorShooter.corridorFloor(++floor, { seed: 7 }));
if (run.status === 'dead') run.respawn();
});
Works with
cell-dungeon,fps-weaponsandfps-enemies— the map, the arsenal and the AI it is built from.world-3d,render-3dandrig-fps— textured boxes, billboards and a first-person camera to draw it.raycast-view— draws the same map the 1992 way, column by column.audio— every sound comes as an event with a place, for positional sound.levelgen— the dungeon generator under its floors.cover-shooter— for light-gun games on a route instead.
Good to know
- Floors are one level of square cells: no stairs, heights or angled walls, as in the games it follows.
- Shots are flat; aiming up or down changes nothing.
- It draws nothing: the gallery's Corridor Raid and Crypt Crawl are worked examples of a presenter, lit with
lighting-3dfrom the map's lights, with a flat look and a raycaster to switch to. - The autopilot is a demonstration player, not a strong one, and can die on the harder skills.






