IVAN
Roguelike · v0.59 · free and open source

Iter Vehemens ad Necem

“a vehement journey to death”

IVAN models your body one part at a time. Parts come off. A severed part is food — so when you try to eat your own arm, the game stops and asks whether you are sure, because you may still be able to put it back.

Play in your browser

5 MB · nothing to install · no account
Chrome 85+, Firefox 79+ or Safari 15+

Your run lives in the tab. Closing it loses the game — saving to the browser is not wired up yet.

head right arm torso left arm groin right leg left leg

head

StrengthModifier200
Roundness70

The large hedgehog bites you in the head! You feel quite happy.

Every one of them is Category = FOOD and IsSadistWeapon = true.
Script/item.dat:4859
The job

Deliver a letter.

You gather bananas for a living. The viceroy of the colony needs a message carried to high priest Petrus in Attnam, and the only route is an underwater tunnel he describes as infested with monsters but probably fine.

This is the whole plot, and the game means all of it sincerely. What follows is the part where you lose an arm to a hedgehog.

You couldn’t possibly have guessed this day would differ from any other. It began just as always. You woke up at dawn and drove off the giant spider resting on your face. On your way to work you had serious trouble avoiding the lions and pythons roaming wild around the village.

After getting kicked by colony masters for being late you performed your twelve-hour routine of climbing trees, gathering bananas, climbing trees, gathering bananas, chasing monkeys that stole the first gathered bananas, carrying bananas to the village and trying to look happy when real food was distributed.

The game’s opening screen · Main/Source/game.cpp:790
Underwater Tunnel, level 1, turn 161

What it looks like from inside.

IVAN in play: a brown cave corridor lit unevenly, the player beside a zombie,
              a stat panel reading HP 24 of 35 in red, and a message log recording the fight.

Frame 594 of a recorded session, replayed to the same pixel every time.
The red HP is not a coincidence — the zombie is still there.

Under it

Simulation, not scenery.

Everything in IVAN is made of something, and the something has opinions. These are counts out of the game’s own data files.

411 materials

Each with a strength, a density, a colour and a patron god. A sword’s material decides whether it bends. A banana peel has Flexibility = 10, which is why you slip on it.

186 kinds of creature

They have bodyparts too, and the same rules apply to theirs. This is why you can end a fight holding something that used to belong to the other party.

7 parts of you

Tracked separately, damaged separately, lost separately. Losing a leg is not a number going down; it is a leg on the floor.

62% of notes, silent

The soundtrack is adaptive: instruments fade in as your worst body part gets worse. At full health most of the notes are silent. Getting hurt is how you hear the rest of the song.

Enough to start

Controls.

Move with the arrow or numpad keys. Press ? in the game for the full list — there are forty-odd commands and these are the ones you need in the first ten minutes.

←↑↓→move, or attack whatever is in the way
>go down, or enter an area
<go up
,pick up item
iinventory menu
Eequipment menu
eeat
aapply item
hrest and heal
ppray to gods
?show key layout
Ssave and quit

Main/Source/command.cpp:92

Colophon

How it got here.

The port

106,232 lines of C++ compiled to WebAssembly with Emscripten. The game logic is unchanged — the same code, on a different target.

Sound and music are the exception: those are played by the page rather than by the module, which keeps 60 MB of audio off the first load.

Correctness

IVAN shipped with no tests. Before any of this, the fork grew a differential harness: record a session, replay it, hash every frame. Native and WebAssembly builds now produce byte-identical traces, screenshots and save files on both committed corpora.

Credits

Source