tinyFPS

World record attempt ยท a first-person shooter in 5,234 bytes

Loads a DOS emulator in your browser. Best on desktop.

WASD move Mouse look Space Click fire 123 weapon R Right-click reload [] sensitivity Esc quit
5,234 bytes
the whole game
97,280 bytes
record holder
18x smaller
than the record

A playable zombie-horde first-person shooter that fits in 5,234 bytes. Built from scratch in x86 assembly, running right here in your browser.

The record it targets

Small enough to disappear

tinyFPS this game
5,234 bytes
this green sliver is the entire game
.kkrieger Guinness record holder, 2004
97,280 bytes
~18x under the record

Stack 18 copies of tinyFPS and you still would not reach the record holder. It is about 18 times smaller than the current Guinness World Record for the fewest bytes in a first-person shooter, and smaller than a typical email signature.

What is inside

A real shooter, not a tech demo

Every system listed here is running in the build you just played. None of it is faked for the page.

Raycast 3D world

A fresh maze every round, perspective floor casting with a tiled ground, brick-textured distance-shaded walls, and mouse look. Drawn a column at a time.

Enemies that hunt you

Zombies spawn out in the maze and path through the corridors to find you via a flood-fill distance field. A rotating radar tracks the whole horde around you, even through walls, so you always know where they are.

Three weapons

Pistol, shotgun, and SMG, each with its own fire rate, damage, sound, magazine, and reload. Ammo reads out beside the gun, and every hit lands with a crosshair marker and a sound. Plus recoil, blood, and endless waves.

Nothing wasted

The sine and cosine tables, the map, and the color palette are all generated at startup, so almost none of it costs a single byte on disk.

How it stays this small

Every byte earns its place

A short tour of the tricks that keep a complete shooter under 5,234 bytes.

01
One flat binary. A DOS .COM file: no headers, no libraries, no runtime. Execution starts at the first byte.
02
Runtime tables. A 65-byte quarter-wave seed expands into full sine and cosine tables in memory, so the trig costs almost nothing on disk.
03
Bit-packed everything. The 16x16 map is packed to 32 bytes and read one bit at a time; scratch variables live in free high memory at zero file cost.
04
Shared code paths. Repeated math and drawing are folded into tiny reusable helpers, and the cosine table is just a window into the sine table.

Questions

The short version

Is this really a world record?
It targets the Guinness World Records category for the smallest first-person shooter by file size. The current holder, .kkrieger, is 97,280 bytes. tinyFPS is 5,234 bytes, about 18 times smaller, and the attempt is being documented for submission.
How does a DOS game run in a browser?
js-dos boots a small x86 PC emulator compiled to WebAssembly and runs the original DOS program unmodified, right inside this page. Nothing is installed and nothing leaves your machine.
Is 5,234 bytes really the entire game?
Yes. It is one flat DOS .COM file with no external assets and no libraries. The trig tables, the map, and the color palette are all generated in memory when it starts, so they cost almost nothing on disk.
What is the best way to play?
Use a desktop browser with a keyboard and mouse. Click Play now, then click inside the window so the game can capture your mouse for aiming. Press Esc to release it.