Week 46 · 2026 · Essay

A 2B model clears all eight levels of DOOM's first episode on a home GPU

A 2B language model on one RTX 3090 plays all eight levels of DOOM's first episode in one sitting and chooses every move. What changed in the three weeks after the first essay, the results against its teacher, and a 30-minute uncut run with every decision on screen.

A 2-billion-parameter language model on one RTX 3090 now plays all eight levels of DOOM's first episode in one sitting, choosing every move itself, with health, armor, weapons and ammo carried from each level into the next. On 11 seeds it had never seen, it finished 7 full runs when allowed to restart a failed level up to three times. The hand-written teacher it learned from finished 46 of 60 under the same rule. Without restarts, both finish 18% of runs.

Two minutes: how it plays, how it learned, and one full run on seed 9504 cut down to the moments that matter. Every command on screen came from the model.
Seed 9504, real time and uncut: 26:54 of play, 8,372 decisions, no restarts. Notes in the video explain the moments worth a look.
  1. 0:00 How to read the screen
  2. 1:12 E1M1 Hangar
  3. 2:27 E1M2 Nuclear Plant
  4. 4:10 E1M3 Toxin Refinery
  5. 8:12 E1M4 Command Control
  6. 11:22 E1M5 Phobos Lab
  7. 16:33 E1M6 Central Processing
  8. 23:03 E1M7 Computer Station
  9. 27:29 E1M8 Phobos Anomaly
  10. 29:14 Results

The first video is two minutes: how it plays, how it learned, and one full run cut down to the moments that matter. The second is that whole run, seed 9504, in real time and uncut: 26 minutes 54 seconds of play and 8,372 decisions, with chapters for each level. In both, the panel on the right shows the text the model read before each decision and the command it chose.

On 19 October this experiment ended with two next steps: one model playing E1M1 to E1M8 in a single run, and weapon choice moved from a fixed rule to the model. Both are done. It took three more weeks on the same PC, 224 commits in total by the close on 7 November, and most of the effort went into places other than the model.

How it plays

The model never sees pixels and never writes text. Code describes the game in a short paragraph of facts, the model reads it next to a fixed menu of 30 commands, and the command it rates highest is played. Each decision is one forward pass that scores the menu, the method Featherless published as Simple Jev.

PartDoesDecides?
Perceptionturns game state into text: enemies with distance and angle, walls, doors, lifts, pickups, fireballs in flight, the shotgun's reload, coverno
Route sensorpoints at the next goal (key, switch, exit, a medikit when health is low), like an automapno
JevQwen3.5-2B + LoRA reads the text and picks one of 30 commands: move, turn, strafe, fire, use, switch weaponyes, every command
Executorplays the chosen command as a short key pattern until the next one arrivesno

The split matters for what this shows. Where to go is code; what to do right now, five times a second, is the model. The game runs at 35 tics per second and never waits: a slow answer arrives late, and late costs health.

What changed after 19 October

DateChangeWhy
19 Oct4B model replaced by a 2B; the teacher is now tuned at 50 ms of delay instead of 100 msWith CUDA graphs a decision takes 37 ms on the 2B and 80 ms on the 4B. At 50 ms the teacher clears E1M3 5 of 8 and E1M8 11 of 20; at 100 ms, 1-2 of 8 and 4 of 16
20 OctWeapon choice became three model commandsShells run out across eight levels, so which gun to hold became a decision
21 OctA tiny step forward added: 30 commandsPrecise pickups near ledges
20-26 OctTeacher routes, supplies and fights for E1M3-E1M7First full teacher run of the episode on 26 Oct
29 Oct-7 NovOne training round per night: the student plays full runs, the teacher relabels every state it reached, the model trains againFirst full student run on 30 Oct, about 1 in 28
6 NovUp to three restarts of a level per runA failed level replays from its start, like a player with a save

Results

Night 9, fresh seeds, no crashes. Each student model had its own server and one live game at a time.

PlayerFull runsFinished, no restartsFinished, up to 3 restarts
Teacher (rules, 50 ms delay)6011 (18%)46 (77%)
Student, final model112 (18%)7 (64%)
Student, previous night's model1106 (55%)

Eleven runs is a small sample: the 95% interval for 7 of 11 runs from about 35% to 85%. Without restarts the student went from about 4% of full runs on night 1 to 6% on night 6 and 18% on night 9.

Most failures happen in two places. E1M7 caused all four of the final student's failed runs and 8 of the teacher's 14; E1M6 is second. The student finished every other level on every seed, at worst after a restart.

Findings

1. Speed beat size. The 2B learned what the 4B could not, because it answers in less than half the time, and the teacher's own numbers show why: the same rules clear several times more runs at 50 ms of delay than at 100 ms. For a decision with a deadline, the smaller model that answers on time is the better model.

2. The teacher has to work at the student's speed. The rules were tuned and measured with the student's delay built in. A teacher that only works with instant reactions teaches tactics the student can never execute; this was the main finding in October, and it held for every level after.

3. Learning from its own mistakes did most of the work. After the first round, the gains came from the student playing full runs and the teacher labelling the states the student got itself into, including the bad ones the teacher would never reach on its own. The labels have to come from the exact teacher code the student plays under. On night 5 one set was labelled by an older version of the teacher, and the model lost E1M5 in 12 of 27 attempts at the one spot where the two versions differ; relabelled from the right version, its agreement with the teacher at that spot went from 55% to 84%.

4. Agreement says little about play. The final model picks the teacher's command on 96.7% of held-out states. What predicted live play were small test sets built from the places where runs actually failed, kept apart by seed.

5. Measure the noise before the result. The same code, run twice on the same machine, finished 13% and 29% of full runs. Machine load and even the working copy moved the numbers. One live game per model server, repeated runs of identical code and paired seeds came before any comparison was trusted.

6. Restarts turn variance into completion. With up to three restarts, the student went from 18% to 64% and the teacher from 18% to 77%. A failure on one level is often bad luck that does not repeat, and a cheap restart point converts that luck into a finished run.

What carries over to a company

The October essay made the case for small local models on narrow, repeated decisions. Three weeks of nightly rounds added three points about running such a project.

  • Time is a requirement, size is a choice. The model that answers within the deadline beats the larger one that answers late, and the deadline belongs in the test from the first day.
  • The judgment written down is the ceiling. The student never beat the teacher. In a company the teacher is the documented expertise: the rules, the examples, the decisions a specialist would make, and their quality caps whatever is trained on them.
  • Noise first, results second. Two runs of identical code differed by 16 points. A pilot that compares one run of the old process with one run of the new one is measuring luck, and a repeat of the baseline costs little next to a decision based on it.

What is still open

  • The student can at best match its teacher. The remaining gap is mostly on E1M6 and E1M7.
  • Eleven runs per model is a small sample; about 30 more would narrow the interval. They were not run.
  • The route sensor does the spatial work. A model that finds its own way without it is a separate and harder experiment.

The code, the training pipeline and every number are public: github.com/inosov9-byte/doom-jev. EXPERIMENT.md has the full results, and the tag experiment-close marks the final state.

The model was the easy part to shrink. The work was in the teacher and in measuring honestly what the student learned from it.

Sources

  1. ENdoom-jev: code, data pipeline and results
    GitHub (Ivan Nosov), 7 Nov 2026·github.com
  2. ENA 4B model clears DOOM's episode finale on a home GPU
    nosov.ai (Ivan Nosov), 19 Oct 2026·nosov.ai

Back to top