Elara S. Novikova
Iskra-226

WUMPUS

Охота на Вумпуса

Gregory Yob, 1973

Twenty caves, three tunnels out of each, one wumpus asleep somewhere in the dark. You smell it before you reach it, you never see it, and when you shoot you name a single cave. Gregory Yob laid the map out as a dodecahedron in 1973 because he was tired of games played on a grid.

sectors
20-29
source lines
172
caves
20, three tunnels each
adjacency table
60 entries
Four moves through the caves. In cave 8 the smell of the wumpus comes up one of the tunnels, the arrow goes into cave 1, and that is the end of the hunt.
Four moves through the caves. In cave 8 the smell of the wumpus comes up one of the tunnels, the arrow goes into cave 1, and that is the end of the hunt.

Run this disk · The image, 256,256 bytes

Why this one matters

Gregory Yob had had enough of hide-and-seek on a checkerboard. Every hunting game of the early seventies put its target in a square of a grid, and the strategy was always the same halving, over and over, until the square fell out. So he took the grid away and handed the player a graph: twenty rooms, three doors each, the vertices and edges of a dodecahedron. You cannot draw that from inside it without effort, and the effort is the game. Real topology, in a program from 1973, on machines whose owners had never heard the word.

The warnings are what make it playable. A smell means the wumpus is one room away, a draft means a pit is one room away, and neither of them tells you which room. You are being asked to build a map out of local evidence and then bet an arrow on it. Children who could not have defined a graph learned to reason across one, because the alternative was being eaten. It traveled the way the whole canon traveled, as a listing in David Ahl's second collection, and a printed listing needs no license, no distributor and no export permit. Somebody just types it in.

The graph is the real thing

The adjacency is a table of sixty entries written out by hand, three per cave, and it is the actual object rather than a suggestion of one: twenty vertices, every one of degree three, every connection symmetric, shortest cycle five, and no two caves more than five moves apart. Wumpus, pit and bats are placed at the start, none of them on top of each other or on you. Each turn prints your cave and the three that lead out, then any warnings, then asks whether to walk or shoot. The bats carry you off to a random cave, which can drop you straight onto the wumpus. A missed arrow can wake it and move it somewhere else.

What it cost the interpreter

This is the title that leans hardest on chance: four placements at the start, the bat teleport, the waking of the wumpus. RND appears nowhere in the recovered software, because a program that computes wages has no use for randomness and so the dialect never gave the atom up. There was nothing to copy. The generator is therefore plain BASIC, six lines of it, with the modulo done by subtracting a hundred until the number fits, and a truncation routine sits next to it doing the job of INT. Everything unpredictable on this disk comes out of those two subroutines.

And then it runs. ЧУВСТВУЮ ВУМПУСА on a screen built for wage tables, on a machine whose other recovered disks compute stipends for a vocational school and carry a planning suite from a Gosplan institute. One hundred and seventy-two lines fit in ten sectors, the catalog gives the program eight characters like everything else, and the interpreter has no opinion about being asked to model a dodecahedron. That is the part I keep coming back to. The machine was never the limitation. Nobody had written this for it, and nobody was going to.

What this disk is not

This disk was written in 2026. Yob's design is common property and has been reimplemented for fifty years, but the code in this image is mine, written this year against a dialect reconstructed from the six recovered sides. Nothing here was excavated. No Soviet games disk has ever surfaced, and if one ever does it will look nothing like this. What the image proves is a smaller thing worth more than a forgery: reading a disk format wrong can go unnoticed indefinitely, and writing one that an independent parser then loads, lists and executes cannot.

What I checked

Warnings ("ЧУВСТВУЮ ВУМПУСА", "СКВОЗНЯК"), bat teleport, pathfinding across the graph, the kill.

What this does not show

What is tested is the emulator, not the hardware. The seed is fixed at 37, since no clock function is attested, so the same cave layout comes up on every run. This is also a reduced hunt: Yob gives you two pits, two bat colonies and five crooked arrows that fly through as many as five rooms. Here there is one pit, one colony of bats, and the arrow goes to a single named cave, though you may keep shooting.

Where to read more

The source

WUMPUS.bas, 172 lines, assembled onto the image with iskra_asm.py

172 lines of BASIC
10 REM HUNT THE WUMPUS
20 PRINT "*** ОХОТА НА ВУМПУСА ***"
30 PRINT "20 ПЕЩЕР, В КАЖДОЙ 3 ХОДА."
40 PRINT "БЕРЕГИТЕСЬ ЯМ И ЛЕТУЧИХ МЫШЕЙ."
50 GOSUB 1000
60 V50 = 37
70 GOSUB 900
71 V61 = V50 / 5
72 GOSUB 950
73 V01 = V60 + 1
80 GOSUB 900
81 V61 = V50 / 5
82 GOSUB 950
83 V02 = V60 + 1
84 IF V02 = V01 GOTO 80
90 GOSUB 900
91 V61 = V50 / 5
92 GOSUB 950
93 V03 = V60 + 1
94 IF V03 = V01 GOTO 90
95 IF V03 = V02 GOTO 90
100 GOSUB 900
101 V61 = V50 / 5
102 GOSUB 950
103 V04 = V60 + 1
104 IF V04 = V01 GOTO 100
105 IF V04 = V02 GOTO 100
106 IF V04 = V03 GOTO 100
110 V10 = 0
120 V10 = V10 + 1
130 PRINT "--- ХОД";V10;" ВЫ В ПЕЩЕРЕ";V01
140 V11 = V01 - 1
141 V11 = V11 * 3
142 V12 = V11 + 1
143 V13 = V11 + 2
144 V14 = V11 + 3
150 V15 = A30(V12)
151 V16 = A30(V13)
152 V17 = A30(V14)
160 PRINT "ХОДЫ ВЕДУТ В";V15;V16;V17
170 IF V15 = V02 GOTO 175
171 IF V16 = V02 GOTO 175
172 IF V17 = V02 GOTO 175
173 GOTO 180
175 PRINT "ЧУВСТВУЮ ВУМПУСА!"
180 IF V15 = V03 GOTO 185
181 IF V16 = V03 GOTO 185
182 IF V17 = V03 GOTO 185
183 GOTO 190
185 PRINT "СКВОЗНЯК - РЯДОМ ЯМА!"
190 IF V15 = V04 GOTO 195
191 IF V16 = V04 GOTO 195
192 IF V17 = V04 GOTO 195
193 GOTO 200
195 PRINT "СЛЫШУ ЛЕТУЧИХ МЫШЕЙ!"
200 PRINT "1-ИДТИ 2-СТРЕЛЯТЬ"
210 INPUT V20
220 IF V20 = 2 GOTO 400
230 PRINT "В КАКУЮ ПЕЩЕРУ"
240 INPUT V21
250 IF V21 = V15 GOTO 280
251 IF V21 = V16 GOTO 280
252 IF V21 = V17 GOTO 280
253 PRINT "ТУДА ХОДА НЕТ."
254 GOTO 200
280 V01 = V21
290 IF V01 = V02 GOTO 700
300 IF V01 = V03 GOTO 720
310 IF V01 = V04 GOTO 320
315 GOTO 120
320 PRINT "ЛЕТУЧИЕ МЫШИ УНЕСЛИ ВАС!"
330 GOSUB 900
331 V61 = V50 / 5
332 GOSUB 950
333 V01 = V60 + 1
340 GOTO 290
400 PRINT "В КАКУЮ ПЕЩЕРУ СТРЕЛЯТЬ"
410 INPUT V22
420 IF V22 = V02 GOTO 740
430 PRINT "СТРЕЛА УШЛА В ПУСТОТУ."
440 GOSUB 900
441 IF V50 > 50 GOTO 450
442 GOTO 120
450 PRINT "ВУМПУС ПРОСНУЛСЯ И ПЕРЕШЕЛ!"
460 GOSUB 900
461 V61 = V50 / 5
462 GOSUB 950
463 V02 = V60 + 1
464 IF V02 = V01 GOTO 700
470 GOTO 120
700 PRINT "*** ВУМПУС СЪЕЛ ВАС! ***"
710 GOTO 800
720 PRINT "*** ВЫ УПАЛИ В ЯМУ! ***"
730 GOTO 800
740 PRINT "*** ВУМПУС УБИТ! ПОБЕДА! ***"
750 PRINT "ХОДОВ:";V10
760 END
800 PRINT "ИГРА ОКОНЧЕНА НА ХОДУ";V10
810 END
900 V50 = V50 * 21
910 V50 = V50 + 13
920 IF V50 < 100 GOTO 940
930 V50 = V50 - 100
935 GOTO 920
940 RETURN
950 V60 = 0
960 IF V61 < 1 GOTO 990
970 V60 = V60 + 1
980 V61 = V61 - 1
985 GOTO 960
990 RETURN
1000 A30(1) = 2
1001 A30(2) = 5
1002 A30(3) = 8
1003 A30(4) = 1
1004 A30(5) = 3
1005 A30(6) = 10
1006 A30(7) = 2
1007 A30(8) = 4
1008 A30(9) = 12
1009 A30(10) = 3
1010 A30(11) = 5
1011 A30(12) = 14
1012 A30(13) = 1
1013 A30(14) = 4
1014 A30(15) = 6
1015 A30(16) = 5
1016 A30(17) = 7
1017 A30(18) = 15
1018 A30(19) = 6
1019 A30(20) = 8
1020 A30(21) = 17
1021 A30(22) = 1
1022 A30(23) = 7
1023 A30(24) = 9
1024 A30(25) = 8
1025 A30(26) = 10
1026 A30(27) = 18
1027 A30(28) = 2
1028 A30(29) = 9
1029 A30(30) = 11
1030 A30(31) = 10
1031 A30(32) = 12
1032 A30(33) = 19
1033 A30(34) = 3
1034 A30(35) = 11
1035 A30(36) = 13
1036 A30(37) = 12
1037 A30(38) = 14
1038 A30(39) = 20
1039 A30(40) = 4
1040 A30(41) = 13
1041 A30(42) = 15
1042 A30(43) = 6
1043 A30(44) = 14
1044 A30(45) = 16
1045 A30(46) = 15
1046 A30(47) = 17
1047 A30(48) = 20
1048 A30(49) = 7
1049 A30(50) = 16
1050 A30(51) = 18
1051 A30(52) = 9
1052 A30(53) = 17
1053 A30(54) = 19
1054 A30(55) = 11
1055 A30(56) = 18
1056 A30(57) = 20
1057 A30(58) = 13
1058 A30(59) = 16
1059 A30(60) = 19
1060 RETURN

Back to Iskra-226