This is a two-player strategic wargame simulating Operation Barbarossa, the German invasion of the Soviet Union beginning in July 1941. The game loads a machine-code block from tape (168 bytes at address 65368) along with a pre-drawn map screen, then manages up to 19 German units and 30 Soviet units across a 30-turn campaign representing turns from summer 1941 through the winter. Unit types include Panzers (P), Guards (G), Infantry (I), Tanks (T), Rifles (R), Cavalry (C), and Bombers (B), each with different movement allowances that are reduced to 1 during winter turns 12–13. Terrain effects are encoded in the string array `a$` using special characters (`\q` for rivers, `\::` for impassable terrain), which penalize movement and modify combat ratios. Victory is determined by how many consecutive turns the German player controls the Moscow map square, tracked through variables `v1`, `v2`, and `v3`, with outcomes ranging from a decisive Soviet victory to a decisive German one.
Program Analysis
Program Structure
The program is organized into a series of functional blocks accessed via GO TO and GO SUB. The main game loop runs from line 19 to 1200, iterating over 30 turns using the variable t. Within each turn the sequence is: draw/update German units (lines 40–90), handle German player input and movement (lines 100–529), resolve German counter-attacks (lines 7000–7752), spawn new Soviet reinforcements (lines 1000–1120), move Soviet AI units (lines 2000–5220), resolve Soviet–German combat (lines 6000–6612), and finally check the Moscow control condition (lines 1120–1200).
Data Initialization and Tape Loading
Lines 8–10 load assets from tape: a 168-byte machine-code block at address 65368 (likely a custom character set or sound routine), followed by a predrawn map stored as a SCREEN$ save. Line 5 uses ON ERR GO TO 150 to trap tape-loading errors and fall through gracefully to the input routine, a common defensive technique. The RANDOMIZE at line 11 seeds the random number generator at the start of each game without a fixed value, ensuring varied play.
Unit Representation
German units are stored in parallel arrays: g(i) holds unit type, x(i) and y(i) hold screen coordinates for up to 19 units. Soviet units use r(j), c(j), and d(j) for up to 30 units. A separate occupancy array b(), indexed with a +2/+1 offset, tracks whether each map cell is empty (0), Soviet-occupied (1), or German-occupied (2). The character codes used to display each unit type are summarized below:
| Display char | German code | Soviet code | Unit type |
|---|---|---|---|
| P | g(i)=9 | — | Panzer |
| G | g(i)=6 | — | Guards |
| I | g(i)=1 | r(j)=4 | Infantry / Soviet Infantry |
| T | g(i)=3 | r(j)=8 | Tank |
| R | g(i)=2 | r(j)=1 | Rifle |
| C | — | r(j)=2 | Cavalry |
| B | — | r(j)=3 | Bomber |
Movement System
The German player selects a unit (cycling with key 9) and moves it with keys 5 (west), 6 (south), 7 (north), and 8 (east). Each unit has a movement allowance m stored at line 130: most units get 2 moves per turn, but Panzers (g(i)=9) and Tanks (g(i)=3) get 3. During winter turns 12–13, all movement is reduced to 1 regardless of type. Crossing river terrain (character \q) costs an extra movement point, implemented by incrementing n at lines such as 218 and 318. Impassable terrain (\::, representing mountains or dense forest) blocks movement entirely.
Terrain Encoding
The map string array a$, loaded from the predrawn SCREEN$, encodes terrain using specific characters. The subroutine at line 600 restores the terrain character under a German unit when it moves away, and simultaneously determines the INK color used to redraw it — white/plain for open ground, green for forest, blue for rivers, and so on. The Soviet equivalent is the subroutine at line 9000, which performs the same function for Soviet unit positions using c(j)/d(j).
Combat Resolution
Combat is resolved twice per turn: first in the German counter-attack phase (lines 7000–7752) where German units adjacent to Soviet units may attack, and then in the Soviet combat phase (lines 6000–6612) where Soviet units adjacent to Germans fight back. Both phases compute a ratio of attacker strength to defender strength, modify it for supply-line position (y(i)>q doubles the ratio favoring the attacker beyond the front), and add a 1d6 die roll. Winter (turns >13) gives Soviets a +1 bonus and Germans a –1 penalty. The possible outcomes by die roll are:
- roll > 10 — attacker eliminates defender, advances into square
- roll > 8 — both units degraded, defender retreats
- roll > 5 — defender retreats, attacker advances
- roll > 3 — attacker retreats (repulsed)
- roll > 1 — attacker retreats with possible encirclement check
- roll ≤ 1 — attacker eliminated
Encirclement is checked at several points: if a unit is surrounded on both its north/south or east/west sides by enemy units (checked in the b() array), it is destroyed outright regardless of the die roll.
Soviet AI
The Soviet AI in lines 2100–5220 is a simple pathfinding routine. For each Soviet unit, it compares its position (c(j), d(j)) to the nearest German unit (x(j), y(j)) and selects one of four movement subroutines at lines 4000, 4020, 4080, and 4100 based on relative position. Subroutine 5000 handles east–west movement; 5200 handles north–south. The variable z1 selects the direction of travel within each subroutine (0 = left/up, 1 = right/down), and z5 is set to 5 to signal a successful move, preventing further move attempts that turn.
Victory Condition
Moscow’s map square is hardcoded at board position (7,26) in the b() array. Lines 1120–1190 check each turn whether that cell or any adjacent cell contains a German unit. If so, v1 is set to 1 and v2 (consecutive turn counter) increments; if not, v2 resets. The high-water mark is stored in v3, which only ever increments by 1 per turn. Reaching v3>=4 triggers an immediate German decisive victory at line 9500. The end-screen at lines 9500–9560 reports the result in five levels and notably misspells “strategic” as “stratigic” in both the Soviet and German victory messages.
Notable Techniques and Anomalies
- The
b()occupancy array uses a fixed +2 row / +1 column offset throughout; this is an artifact of the array being 1-indexed while screen coordinates are 0-based, requiring careful manual adjustment in every access. - Line
2106checks if any Soviet unit has reached column 8 or less (d(j)<8), which represents Soviet forces entering Germany from the east — the instant-loss condition for the German player. - The
SOUNDstatement at lines6117and7087uses a multi-channel call (SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0) for a combat audio effect. - Line
1016assigns bothi=2andk=4for turn 21 but the variableiis also used as the German unit loop counter; this is safe only because the reinforcement block at1070–1089uses its ownFOR iloop, shadowing the outer variable. - The save routine at lines
3000–3003is triggered by key 1 only on turn >1 (line161), and saves the BASIC program, the machine-code block, and the map screen to tape in sequence before stopping — a full mid-game save facility. - Line
9990contains a bareINVERSE 1with no following code orRETURN; it is never reached in normal play and appears to be a leftover fragment. - Line
2151referencesg(j)(the German unit type array indexed by the Soviet loop counterj), which is almost certainly a bug — it should likely readg(i)or be removed, since the intent appears to be resetting a position variable for an empty slot.
Content
Source Code
1 REM War in the East - Invasion of Russia July 1941 \*1984 by Mark L Stueber
2 PRINT AT 10,8;"WAR IN THE EAST"
3 PRINT AT 12,1;"INVASION OF RUSSIA JULY 1941"
4 PRINT AT 14,5;"\*1984 by Mark L Stueber"
5 ON ERR GO TO 150
7 FLASH 1: INK 2: PRINT AT 2,7;"LEAVE TAPE RUNNING": FLASH 0
8 LOAD "graphic" CODE 65368,168
9 LET v1=0: LET v2=0: LET v3=0
10 LOAD "map"SCREEN$
11 RANDOMIZE
12 PAPER 6
19 IF t>1 THEN GO TO 21
20 FOR t=1 TO 30
21 BORDER 0
22 LET q=INT (t/2)+q1
23 IF q>31 THEN LET q=31
25 INVERSE 0: OVER 1: PRINT INK 1; FLASH 1;AT 21,q;" ": OVER 0: FLASH 0
26 PRINT FLASH 0; INK 1; OVER 1;AT 21,q-1;" ": OVER 0
27 IF t=12 THEN PRINT AT 0,4;"MT"
28 IF t=14 THEN PRINT AT 0,4;" "
29 IF t=14 THEN OVER 1: INK 2: PRINT AT 0,4;"Winter": OVER 0
30 IF t=1 THEN PRINT INVERSE 0; INK 2; OVER 1;AT 0,12;"MF=": OVER 0
31 PRINT INK 0;AT 0,15;v3
39 IF t>2 THEN GO TO 100
40 FOR i=1 TO 19
42 IF g(i)>0 THEN GO TO 46
43 LET b(x(i)+2,y(i)+1)=0
44 NEXT i: GO TO 70
46 INVERSE 1: INK 0
48 IF g(i)=9 THEN LET b$="P"
50 IF g(i)=6 THEN LET b$="G"
52 IF g(i)=1 THEN LET b$="I"
54 IF g(i)=3 THEN LET b$="T"
56 IF g(i)=2 THEN LET b$="R"
60 PRINT AT x(i),y(i);b$
62 LET b(x(i)+2,y(i)+1)=2
64 NEXT i
70 FOR h=1 TO 30
72 INVERSE 1: INK 2
74 IF r(h)>0 THEN GO TO 78: NEXT h: GO TO 100
75 LET b(c(h)+2,d(h)+1)=0
76 NEXT h: GO TO 100
78 IF r(h)=8 THEN LET c$="T"
80 IF r(h)=3 THEN LET c$="B"
82 IF r(h)=1 THEN LET c$="R"
84 IF r(h)=2 THEN LET c$="C"
86 IF r(h)=4 THEN LET c$="I"
88 PRINT AT c(h),d(h);c$
89 LET b(c(h)+2,d(h)+1)=1
90 NEXT h
100 INK 0
101 PRINT AT 0,0;t
102 BORDER 0
105 FOR i=1 TO 19
110 IF g(i)>0 THEN GO TO 120
115 NEXT i: GO TO 7000
120 IF g(i)=9 THEN LET b$="P"
125 IF g(i)=6 THEN LET b$="G"
126 IF g(i)=3 THEN LET b$="T"
127 IF g(i)=1 THEN LET b$="I"
128 IF g(i)=2 THEN LET b$="R"
130 LET m=2: IF g(i)=3 OR g(i)=9 THEN LET m=3
131 IF t=12 OR t=13 THEN LET m=1
132 FOR n=1 TO m
133 LET b(x(i)+2,y(i)+1)=2
134 IF b(x(i)+1,y(i))=1 OR b(x(i)+1,y(i)+1)=1 OR b(x(i)+3,y(i)+1)=1 OR b(x(i)+2,y(i))=1 OR b(x(i)+2,y(i)+2)=1 OR b(x(i)+1,y(i)+2)=1 OR b(x(i)+3,y(i)+2)=1 OR b(x(i)+3,y(i))=1 THEN NEXT i: GO TO 7000
142 FOR j=1 TO 3
144 GO SUB 600
145 PAUSE 8
146 INVERSE 1: PRINT INK 0;AT x(i),y(i);b$
147 PAUSE 7
148 NEXT j
150 INPUT k
160 IF k=4 THEN GO TO 142
161 IF k=1 AND t>1 THEN GO TO 3000
162 IF k=9 THEN NEXT i
164 IF k=9 THEN GO TO 7000
166 IF k=5 THEN GO TO 200
167 IF k=6 THEN GO TO 300
168 IF k=7 THEN GO TO 400
169 IF k=8 THEN GO TO 500
170 GO TO 150
200 IF y(i)<=1 OR b(x(i)+2,y(i))>0 THEN GO TO 9900
205 IF b(x(i)+2,y(i))<>0 THEN GO TO 9900
206 IF t>13 THEN GO TO 212
210 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i)+1,y(i))="\q" THEN GO TO 9900
211 IF (m=2 AND n>1) AND a$(x(i)+1,y(i))="\q" THEN GO TO 9900
212 IF a$(x(i)+1,y(i))="\::" THEN GO TO 9900
215 GO SUB 600
217 INVERSE 1: INK 0
218 IF t<14 AND a$(x(i)+1,y(i))="\q" THEN LET n=n+1
219 LET y(i)=y(i)-1
220 PRINT AT x(i),y(i);b$
221 BEEP .2,-7
222 LET b(x(i)+2,y(i)+2)=0
224 LET b(x(i)+2,y(i)+1)=2
230 NEXT n: NEXT i: GO TO 7000
300 IF x(i)>=21 OR b(x(i)+3,y(i)+1)>0 THEN GO TO 9900
301 IF t>13 THEN GO TO 304
302 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i)+2,y(i)+1)="\q" THEN GO TO 9900
303 IF (m=2 AND n>1) AND a$(x(i)+2,y(i)+1)="\q" THEN GO TO 9900
304 IF a$(x(i)+2,y(i)+1)="\::" THEN GO TO 9900
305 IF b(x(i)+3,y(i)+1)<>0 THEN GO TO 9900
308 GO SUB 600
317 INVERSE 1: INK 0
318 IF t<14 AND a$(x(i)+2,y(i)+1)="\q" THEN LET n=n+1
319 LET x(i)=x(i)+1
320 PRINT AT x(i),y(i);b$
321 BEEP .2,-7
322 LET b(x(i)+1,y(i)+1)=0
324 LET b(x(i)+2,y(i)+1)=2
329 NEXT n: NEXT i: GO TO 7000
400 IF x(i)<=0 OR b(x(i)+1,y(i)+1)>0 THEN GO TO 9900
401 IF t>13 THEN GO TO 404
402 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i),y(i)+1)="\q" THEN GO TO 9900
403 IF (m=2 AND n>1) AND a$(x(i),y(i)+1)="\q" THEN GO TO 9900
404 IF a$(x(i),y(i)+1)="\::" THEN GO TO 9900
405 IF b(x(i)+1,y(i)+1)<>0 THEN GO TO 9900
408 GO SUB 600
417 INVERSE 1: INK 0
418 IF t<14 AND a$(x(i),y(i)+1)="\q" THEN LET n=n+1
419 LET x(i)=x(i)-1
420 PRINT AT x(i),y(i);b$
421 BEEP .2,-7
422 LET b(x(i)+3,y(i)+1)=0
424 LET b(x(i)+2,y(i)+1)=2
429 NEXT n: NEXT i: GO TO 7000
500 IF y(i)>=31 OR b(x(i)+2,y(i)+2)>0 THEN GO TO 9900
501 IF t>13 THEN GO TO 504
502 IF ((m=1) OR (m=3 AND n>2)) AND a$(x(i)+1,y(i)+2)="\q" THEN GO TO 9900
503 IF (m=2 AND n>1) AND a$(x(i)+1,y(i)+2)="\q" THEN GO TO 9900
504 IF a$(x(i)+1,y(i)+2)="\::" THEN GO TO 9900
505 IF b(x(i)+2,y(i)+2)<>0 THEN GO TO 9900
508 GO SUB 600
517 INVERSE 1: INK 0
518 IF t<14 AND a$(x(i)+1,y(i)+2)="\q" THEN LET n=n+1
519 LET y(i)=y(i)+1
520 PRINT AT x(i),y(i);b$
521 BEEP .2,-7
522 LET b(x(i)+2,y(i))=0
524 LET b(x(i)+2,y(i)+1)=2
529 NEXT n: NEXT i: GO TO 7000
600 INVERSE 0: INK 6
609 IF a$(x(i)+1,y(i)+1)<>" " THEN INK 1
610 IF a$(x(i)+1,y(i)+1)="\p" THEN INK 4
611 IF a$(x(i)+1,y(i)+1)=" " THEN INK 6
615 IF a$(x(i)+1,y(i)+1)="\q" THEN INK 1
617 IF a$(x(i)+1,y(i)+1)="\r" THEN INK 3
619 IF a$(x(i)+1,y(i)+1)="\s" THEN INK 0
625 PRINT AT x(i),y(i);a$(x(i)+1,y(i)+1)
630 RETURN
1000 LET m=0: LET h=0
1001 BORDER 4
1003 IF t=3 OR t=17 OR t=21 THEN LET h=2
1006 IF (t=9 OR t=15) THEN LET m=1
1009 IF m>0 OR h>0 THEN GO TO 1070
1010 LET m=0: LET h=0: LET o=0: LET i=0: LET k=0
1011 IF t=8 THEN LET o=2
1014 IF t=5 OR t=9 THEN LET m=1
1015 IF (t=5 OR t=9 OR t=13 OR t=15) THEN LET i=3
1016 IF t=21 THEN LET i=2: LET k=4
1017 IF (t=2 OR t=3 OR t=5 OR t=7 OR t=11 OR t=1 OR t=6 OR t=8) THEN LET h=2
1018 IF m>0 OR i>0 OR h>0 OR k>0 OR i>0 THEN GO TO 1090
1019 GO TO 1120
1070 FOR i=1 TO 19
1071 IF g(i)=9 THEN LET b$="P"
1080 IF g(i)=6 THEN LET b$="G"
1081 INVERSE 1: INK 0
1082 IF g(i)>0 THEN NEXT i: GO TO 1010
1084 IF h>0 THEN LET g(i)=6: LET x(i)=10: LET y(i)=4: LET h=h-1: PRINT AT x(i),y(i);"G": LET b(x(i)+2,y(i)+1)=2: NEXT i
1086 IF m>0 THEN LET g(i)=9: LET x(i)=10: LET y(i)=4: LET m=m-1: PRINT AT x(i),y(i);"P": LET b(x(i)+2,y(i)+1)=2: NEXT i
1089 GO TO 1010
1090 FOR j=1 TO 30
1101 INVERSE 1: INK 2
1102 IF r(j)=0 THEN GO TO 1104
1103 NEXT j: GO TO 1120
1104 IF k>0 THEN LET r(j)=8: LET d(j)=29: LET c$="T": LET c(j)=INT (RND*15): LET k=k-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
1108 IF i>0 THEN LET r(j)=4: LET d(j)=29: LET c(j)=INT (RND*5)+2: LET c$="I": LET i=i-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
1109 IF o>0 THEN LET r(j)=3: LET d(j)=29: LET c(j)=INT (RND*5)+3: LET c$="B": LET o=o-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
1110 IF h>0 THEN LET r(j)=1: LET d(j)=29: LET c$="R": IF x(j)=0 THEN LET x(j)=2: LET c(j)=x(j)-2: LET h=h-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
1111 IF m>0 THEN LET r(j)=2: LET d(j)=29: LET c$="C": LET c(j)=INT (RND*17): LET m=m-1: PRINT AT c(j),d(j);c$: LET b(c(j)+2,d(j)+1)=1: NEXT j
1120 IF b(7,26)=2 THEN LET v1=1: GO TO 1186
1121 IF b(7,26)=0 AND ((b(6,26)=2 OR b(8,26)=2 OR b(7,25)=2 OR b(7,27)=2 OR b(6,25)=2 OR b(8,25)=2 OR b(6,27)=2 OR b(8,27)=2)) THEN LET v1=1
1122 IF b(7,26)=0 AND ((b(6,26)=1 OR b(8,26)=1 OR b(7,25)=1 OR b(7,27)=1 OR b(6,25)=1 OR b(8,25)=1 OR b(6,27)=1 OR b(8,27)=1)) THEN LET v1=0
1186 IF v1=1 THEN LET v2=v2+1
1187 IF v1=0 THEN LET v2=0
1188 IF v2>v3 THEN LET v3=v3+1
1190 LET v1=0
1195 IF v3>=4 THEN GO TO 9500
1200 NEXT t: GO TO 9500
2000 LET r2=20
2001 BORDER 2
2002 FOR j=1 TO 19
2004 IF r(j)=0 THEN GO TO 2010
2006 NEXT j: GO TO 2100
2010 IF r(r2)>0 THEN GO TO 2020
2012 IF r2>29 THEN GO TO 2100
2014 LET r2=r2+1
2017 GO TO 2010
2020 LET r(j)=r(r2): LET c(j)=c(r2): LET d(j)=d(r2): LET r(r2)=0
2022 NEXT j: GO TO 2100
2100 FOR j=1 TO 30
2102 LET n=0
2104 IF r(j)=0 THEN NEXT j: GO TO 6000
2106 IF d(j)<8 AND r(j)>0 THEN PRINT INVERSE 0; INK 2;"You lose- Russians entered Germany": STOP
2108 LET m=2: IF r(j)=3 OR r(j)=8 THEN LET m=3
2110 IF r(j)=2 THEN LET m=1
2150 LET z5=0
2151 IF g(j)=0 THEN LET x(j)=10: LET y(j)=3
2152 IF b(c(j)+2,d(j))=2 OR b(c(j)+2,d(j)+2)=2 OR b(c(j)+3,d(j)+1)=2 OR b(c(j)+3,d(j))=2 OR b(c(j)+3,d(j)+2)=2 OR b(c(j)+1,d(j)+1)=2 OR b(c(j)+1,d(j))=2 OR b(c(j)+1,d(j)+2)=2 THEN NEXT j: GO TO 6000
2154 LET z1=0
2155 IF r(j)=1 THEN LET c$="R"
2156 IF r(j)=2 THEN LET c$="C"
2159 IF r(j)=3 THEN LET c$="B"
2160 IF r(j)=4 THEN LET c$="I"
2162 IF r(j)=8 THEN LET c$="T"
2165 IF x(j)>c(j)+4 THEN GO TO 4100
2167 IF x(j)<c(j)-4 THEN GO TO 4020
2169 IF y(j)<d(j)-4 THEN GO TO 4000
2171 IF x(j)<c(j) THEN GO TO 4020
2173 IF y(j)<d(j) THEN GO TO 4000
2175 IF x(j)>c(j) THEN GO TO 4100
2177 IF y(j)>d(j) THEN GO TO 4080
2179 IF x(j)=c(j) AND y(j)=d(j) THEN GO TO 4080
3000 SAVE "war" LINE 1
3001 SAVE "graphic"CODE 65368,168
3002 SAVE "map"SCREEN$
3003 STOP
4000 LET z1=0: GO SUB 5000
4012 IF z5=5 THEN GO TO 2150
4013 LET z1=1: GO SUB 5200
4014 IF z5=5 THEN GO TO 2150
4015 LET z1=0: GO SUB 5200
4017 LET z1=0
4018 IF z5=5 THEN GO TO 2150
4019 NEXT j: GO TO 6000
4020 GO SUB 5200
4021 IF z5=5 THEN GO TO 2150
4022 LET z1=1
4024 GO SUB 5000
4026 LET z1=0
4027 IF z5=5 THEN GO TO 2150
4028 GO SUB 5000
4029 GO TO 4018
4080 LET z1=1: GO SUB 5000
4081 LET z1=0
4082 IF z5=5 THEN GO TO 2150
4084 GO SUB 5200
4086 IF z5=5 THEN GO TO 2150
4088 LET z1=1: GO SUB 5200
4089 GO TO 4017
4100 LET z1=1: GO SUB 5200
4102 LET z1=0
4104 IF z5=5 THEN GO TO 2150
4106 GO TO 4022
5000 LET n=n+1
5002 IF n>m THEN RETURN
5008 IF z1=0 AND b(c(j)+2,d(j))=0 THEN LET b(c(j)+2,d(j))=1: BEEP .1,0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN
5009 IF z1=1 AND b(c(j)+2,d(j)+2)=0 THEN LET b(c(j)+2,d(j)+2)=1: BEEP .1,0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN
5020 RETURN
5200 LET n=n+1
5202 IF n>m THEN RETURN
5210 IF z1=0 AND b(c(j)+1,d(j)+1)=0 THEN LET b(c(j)+1,d(j)+1)=1: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: BEEP .1,0: LET c(j)=c(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN
5212 IF z1=1 AND b(c(j)+3,d(j)+1)=0 THEN LET b(c(j)+3,d(j)+1)=1: BEEP .1,0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000: LET c(j)=c(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: LET z5=5: RETURN
5220 RETURN
6000 FOR j=1 TO 30
6001 BORDER 3
6002 IF r(j)=0 THEN NEXT j: GO TO 1000
6010 IF b(c(j)+2,d(j))=2 OR b(c(j)+3,d(j))=2 OR b(c(j)+1,d(j))=2 OR b(c(j)+3,d(j)+1)=2 OR b(c(j)+1,d(j)+1)=2 OR b(c(j)+3,d(j)+2)=2 OR b(c(j)+2,d(j)+2)=2 OR b(c(j)+1,d(j)+2)=2 THEN GO TO 6020
6015 NEXT j: GO TO 1000
6020 FOR i=1 TO 19
6021 IF g(i)=0 THEN NEXT i: NEXT j: GO TO 1000
6025 IF (c(j)=x(i) AND d(j)=y(i)-1) OR (c(j)=x(i) AND d(j)=y(i)+1) OR (c(j)=x(i)-1 AND d(j)=y(i)) OR (c(j)=x(i)+1 AND d(j)=y(i)) OR (c(j)=x(i)+1 AND d(j)=y(i)+1) OR (c(j)=x(i)-1 AND d(j)=y(i)-1) OR (c(j)=x(i)+1 AND d(j)=y(i)-1) OR (c(j)=x(i)-1 AND d(j)=y(i)+1) THEN GO TO 6100
6090 NEXT i
6091 IF b(c(j)+2,d(j)+2)=2 THEN LET b(c(j)+2,d(j)+2)=0
6092 IF b(c(j)+2,d(j))=2 THEN LET b(c(j)+2,d(j))=0
6093 IF b(c(j)+1,d(j))=2 THEN LET b(c(j)+1,d(j))=0
6094 IF b(c(j)+3,d(j))=2 THEN LET b(c(j)+3,d(j))=0
6095 IF b(c(j)+3,d(j)+1)=2 THEN LET b(c(j)+3,d(j)+1)=0
6096 IF b(c(j)+1,d(j)+1)=2 THEN LET b(c(j)+1,d(j)+1)=0
6097 IF b(c(j)+1,d(j)+2)=2 THEN LET b(c(j)+1,d(j)+2)=0
6098 IF b(c(j)+3,d(j)+2)=2 THEN LET b(c(j)+3,d(j)+2)=0
6099 NEXT j: GO TO 1000
6100 LET ratio=r(j)/g(i)
6101 IF g(i)=9 THEN LET b$="P"
6102 IF r(j)=1 THEN LET c$="R"
6103 IF r(j)=2 THEN LET c$="C"
6104 IF r(j)=3 THEN LET c$="B"
6105 IF r(j)=4 THEN LET c$="I"
6106 IF g(i)=2 THEN LET b$="R"
6107 IF g(i)=3 THEN LET b$="T"
6108 IF g(i)=6 THEN LET b$="G"
6109 IF g(i)=1 THEN LET b$="I"
6110 IF t=12 OR t=13 THEN LET ratio=ratio*2
6111 IF r(j)=8 THEN LET c$="T"
6112 IF y(i)>q THEN LET ratio=ratio*2
6114 IF ratio<.5 THEN NEXT j: GO TO 1000
6116 LET roll=INT (RND*6)+1+ratio
6117 SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0
6118 IF t>13 THEN LET roll=roll+1
6120 IF roll>10 THEN GO TO 6200
6122 IF roll>8 THEN GO TO 6300
6124 IF roll>5 THEN GO TO 6400
6126 IF roll>3 THEN GO TO 6500
6128 IF roll>1 THEN GO TO 6600
6150 LET r(j)=0: LET b(x(i)+2,y(i)+1)=0: GO SUB 600
6155 LET x(i)=c(j): LET y(i)=d(j)
6160 LET b(x(i)+2,y(i)+1)=2
6165 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
6170 NEXT j: GO TO 1000
6200 LET g(i)=0: GO SUB 9000
6204 LET b(c(j)+2,d(j)+1)=0
6208 LET c(j)=x(i): LET d(j)=y(i)
6210 LET b(c(j)+2,d(j)+1)=1
6214 PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT j: GO TO 1000
6300 IF g(i)<6 THEN LET g(i)=0
6302 IF g(i)=6 THEN LET g(i)=1
6303 IF g(i)=9 THEN LET g(i)=3
6304 IF g(i)=1 THEN LET b$="I"
6305 LET b(x(i)+2,y(i)+1)=0
6306 GO SUB 600
6307 IF g(i)=3 THEN LET b$="T"
6310 IF r(j)<4 THEN LET r(j)=0
6312 IF r(j)=4 THEN LET r(j)=1
6314 IF r(j)=8 THEN LET r(j)=3
6316 IF r(j)=3 THEN LET c$="B"
6318 IF r(j)=1 THEN LET c$="R"
6319 LET b(c(j)+2,d(j)+1)=0
6320 GO SUB 9000
6322 IF r(j)=0 AND g(i)=0 THEN NEXT j: GO TO 1000
6350 IF g(i)>0 AND (b(x(i)+2,y(i)+2)=1 AND b(x(i)+2,y(i))=1) THEN LET g(i)=0: GO SUB 600
6351 IF g(i)>0 AND (b(x(i)+1,y(i)+1)=1 AND b(x(i)+3,y(i)+1)=1) THEN LET g(i)=0: GO SUB 600
6352 GO SUB 600: GO SUB 9000
6355 LET b(x(i)+2,y(i)+1)=0: LET b(c(j)+2,d(j)+1)=0
6358 IF r(j)>0 THEN LET b(x(i)+2,y(i)+1)=1: LET c(j)=x(i): LET d(j)=y(i)
6360 IF r(j)>0 THEN PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
6362 IF g(i)=0 THEN NEXT j: GO TO 1000
6370 IF b(x(i)+2,y(i))=0 THEN LET b(x(i)+2,y(i))=2: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6371 IF b(x(i)+3,y(i))=0 THEN LET b(x(i)+3,y(i))=2: LET x(i)=x(i)+1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6372 IF b(x(i)+1,y(i))=0 THEN LET b(x(i)+1,y(i))=2: LET x(i)=x(i)-1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6373 IF b(x(i)+1,y(i)+1)=0 THEN LET b(x(i)+1,y(i)+1)=2: LET x(i)=x(i)-1: LET y(i)=y(i): PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6374 IF b(x(i)+3,y(i)+1)=0 THEN LET b(x(i)+3,y(i)+1)=2: LET x(i)=x(i)+1: LET y(i)=y(i): PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6375 IF b(x(i)+3,y(i)+2)=0 THEN LET b(x(i)+3,y(i)+2)=2: LET x(i)=x(i)+1: LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6376 IF b(x(i)+1,y(i)+2)=0 THEN LET b(x(i)+1,y(i)+2)=2: LET x(i)=x(i)-1: LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6377 IF b(x(i)+2,y(i)+2)=0 THEN LET b(x(i)+2,y(i)+2)=2: LET x(i)=x(i): LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: NEXT j: GO TO 1000
6388 LET g(i)=0: NEXT j: GO TO 1000
6400 GO TO 6350
6452 GO SUB 600: GO SUB 9000
6500 IF b(x(i)+2,y(i))=1 AND b(x(i)+2,y(i)+2)=1 THEN LET g(i)=0: GO SUB 600
6502 IF b(x(i)+3,y(i)+1)=1 AND b(x(i)+1,y(i)+1)=1 THEN LET g(i)=0: GO SUB 600
6503 GO SUB 600
6504 LET b(c(j)+2,d(j)+1)=0: LET b(x(i)+2,y(i)+1)=0: GO SUB 9000
6505 IF b(c(j)+2,d(j)+2)=0 THEN LET b(c(j)+2,d(j)+2)=1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6507 IF b(c(j)+3,d(j)+2)=0 THEN LET b(c(j)+3,d(j)+2)=1: LET c(j)=c(j)+1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6508 IF b(c(j)+1,d(j)+2)=0 THEN LET b(c(j)+1,d(j)+2)=1: LET c(j)=c(j)-1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6509 IF b(c(j)+3,d(j)+1)=0 THEN LET b(c(j)+3,d(j)+1)=1: LET c(j)=c(j)+1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6510 IF b(c(j)+1,d(j)+1)=0 THEN LET b(c(j)+1,d(j)+1)=1: LET c(j)=c(j)-1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6511 IF b(c(j)+3,d(j))=0 THEN LET b(c(j)+3,d(j))=1: LET c(j)=c(j)+1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6512 IF b(c(j)+2,d(j))=0 THEN LET b(c(j)+2,d(j))=1: LET c(j)=c(j): LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6513 IF b(c(j)+1,d(j))=0 THEN LET b(c(j)+1,d(j))=1: LET c(j)=c(j)-1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: GO TO 6550
6520 LET r(j)=0
6550 IF roll<=3 THEN GO TO 6552
6551 IF g(i)>0 THEN GO TO 6370
6552 NEXT j: GO TO 1000
6600 IF b(c(j)+2,d(j))=2 AND b(c(j)+2,d(j)+2)=2 THEN LET r(j)=0
6603 IF b(c(j)+3,d(j)+1)=2 AND b(c(j)+1,d(j)+1)=2 THEN LET r(j)=0
6604 GO SUB 9000: GO SUB 600: LET b(c(j)+2,d(j)+1)=2
6605 LET b(x(i)+2,y(i)+1)=0: LET x(i)=c(j): LET y(i)=d(j)
6610 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: IF r(j)>0 THEN GO TO 6505
6612 NEXT j: GO TO 1000
7000 BORDER 3
7005 FOR i=1 TO 19
7010 IF g(i)=0 THEN NEXT i: GO TO 2000
7015 IF b(x(i)+2,y(i))=1 OR b(x(i)+2,y(i)+2)=1 OR b(x(i)+1,y(i))=1 OR b(x(i)+1,y(i)+1)=1 OR b(x(i)+1,y(i)+2)=1 OR b(x(i)+3,y(i)+1)=1 OR b(x(i)+3,y(i)+2)=1 OR b(x(i)+3,y(i))=1 THEN GO TO 7020
7017 NEXT i: GO TO 2000
7020 FOR j=1 TO 30
7025 IF r(j)=0 THEN NEXT j: NEXT i: GO TO 2000
7030 IF (x(i)=c(j) AND y(i)=d(j)+1) OR (x(i)=c(j) AND y(i)=d(j)-1) OR (x(i)=c(j)+1 AND y(i)=d(j)) OR (x(i)=c(j)-1 AND y(i)=d(j)) OR (x(i)=c(j)+1 AND y(i)=d(j)+1) OR (x(i)=c(j)-1 AND y(i)=d(j)-1) OR (x(i)=c(j)+1 AND y(i)=d(j)-1) OR (x(i)=c(j)-1 AND y(i)=d(j)+1) THEN GO TO 7040
7031 NEXT j
7032 IF b(x(i)+3,y(i)+2)=1 THEN LET b(x(i)+3,y(i)+2)=0
7033 IF b(x(i)+1,y(i)+2)=1 THEN LET b(x(i)+1,y(i)+2)=0
7034 IF b(x(i)+1,y(i)+1)=1 THEN LET b(x(i)+1,y(i)+1)=0
7035 IF b(x(i)+3,y(i)+1)=1 THEN LET b(x(i)+3,y(i)+1)=0
7036 IF b(x(i)+2,y(i)+2)=1 THEN LET b(x(i)+2,y(i)+2)=0
7037 IF b(x(i)+3,y(i))=1 THEN LET b(x(i)+3,y(i))=0
7038 IF b(x(i)+1,y(i))=1 THEN LET b(x(i)+1,y(i))=0
7039 NEXT i: GO TO 2000
7040 IF g(i)=9 THEN LET b$="P"
7042 IF g(i)=6 THEN LET b$="G"
7044 IF g(i)=1 THEN LET b$="I"
7046 IF g(i)=2 THEN LET b$="R"
7047 IF g(i)=3 THEN LET b$="T"
7050 IF r(j)=1 THEN LET c$="R"
7052 IF r(j)=2 THEN LET c$="C"
7054 IF r(j)=3 THEN LET c$="B"
7056 IF r(j)=4 THEN LET c$="I"
7058 IF r(j)=8 THEN LET c$="T"
7070 LET ratio=g(i)/r(j)
7073 IF y(i)>q THEN LET ratio=ratio/2
7075 IF t=12 OR t=13 THEN LET ratio=ratio/2
7077 IF ratio<.5 THEN NEXT i: GO TO 2000
7080 LET roll=(INT (RND*6)+1)+ratio
7082 IF t>11 THEN LET roll=roll-1
7085 IF t<14 AND a$(x(i)+1,y(i)+1)="\q" THEN LET roll=roll-1
7086 FOR l=1 TO 2
7087 SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0
7088 PAUSE 7
7089 NEXT l
7090 IF roll>10 THEN GO TO 7300
7092 IF roll>8 THEN GO TO 7400
7094 IF roll>5 THEN GO TO 7500
7096 IF roll>3 THEN GO TO 7600
7098 IF roll>1 THEN GO TO 7700
7099 LET g(i)=0: GO SUB 600
7100 LET b(c(j)+2,d(j)+1)=0: LET b(x(i)+2,y(i)+1)=1: GO SUB 9000
7110 LET c(j)=x(i): LET d(j)=y(i)
7120 PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
7130 NEXT i: GO TO 2000
7300 LET r(j)=0
7305 LET b(x(i)+2,y(i)+1)=0
7310 GO SUB 600: LET x(i)=c(j): LET y(i)=d(j)
7384 LET b(x(i)+2,y(i)+1)=2
7388 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
7390 NEXT i: GO TO 2000
7400 IF r(j)<4 THEN LET r(j)=0
7402 IF r(j)=4 THEN LET r(j)=1
7404 IF r(j)=8 THEN LET r(j)=3
7405 IF g(i)<6 THEN LET g(i)=0
7406 IF g(i)=9 THEN LET g(i)=3
7408 IF g(i)=6 THEN LET g(i)=1
7410 IF g(i)=3 THEN LET b$="T"
7412 IF g(i)=1 THEN LET b$="I"
7414 IF r(j)=1 THEN LET c$="R"
7416 IF r(j)=3 THEN LET c$="B"
7418 LET b(x(i)+2,y(i)+1)=0
7420 IF b(c(j)+1,d(j)+1)=2 AND b(c(j)+3,d(j)+1)=2 THEN LET r(j)=0: GO SUB 9000
7422 IF b(c(j)+2,d(j)+2)=2 AND b(c(j)+2,d(j))=2 THEN LET r(j)=0: GO SUB 9000
7424 GO SUB 600: GO SUB 9000
7425 LET b(c(j)+2,d(j)+1)=0
7426 LET x(i)=c(j): LET y(i)=d(j): GO SUB 600
7428 IF g(i)>0 THEN LET b(x(i)+2,y(i)+1)=2
7430 IF g(i)>0 THEN PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
7431 IF g(i)=0 AND r(j)=0 THEN GO SUB 9000
7432 IF r(j)=0 THEN NEXT i: GO TO 2000
7434 IF b(c(j)+2,d(j)+2)=0 THEN LET b(c(j)+2,d(j)+2)=1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7436 IF b(c(j)+3,d(j)+2)=0 THEN LET b(c(j)+3,d(j)+2)=1: LET c(j)=c(j)+1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7438 IF b(c(j)+1,d(j)+2)=0 THEN LET b(c(j)+1,d(j)+2)=1: LET c(j)=c(j)-1: LET d(j)=d(j)+1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7439 IF b(c(j)+1,d(j)+1)=0 THEN LET b(c(j)+1,d(j)+1)=1: LET c(j)=c(j)-1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7440 IF b(c(j)+3,d(j)+1)=0 THEN LET b(c(j)+3,d(j)+1)=1: LET c(j)=c(j)+1: LET d(j)=d(j): PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7442 IF b(c(j)+2,d(j))=0 THEN LET b(c(j)+2,d(j))=1: LET c(j)=c(j): LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7444 IF b(c(j)+3,d(j))=0 THEN LET b(c(j)+3,d(j))=1: LET c(j)=c(j)+1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7446 IF b(c(j)+1,d(j))=0 THEN LET b(c(j)+1,d(j))=1: LET c(j)=c(j)-1: LET d(j)=d(j)-1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$: NEXT i: GO TO 2000
7448 LET r(j)=0: NEXT i: GO TO 2000
7500 IF b(c(j)+2,d(j))=2 AND b(c(j)+2,d(j)+2)=2 THEN LET r(j)=0: GO SUB 9000
7502 IF b(c(j)+1,d(j)+1)=2 AND b(c(j)+3,d(j)+1)=2 THEN LET r(j)=0: GO SUB 9000
7504 GO SUB 600: LET b(x(i)+2,y(i)+1)=0
7506 LET x(i)=c(j): LET y(i)=d(j): LET b(x(i)+2,y(i)+1)=2
7508 PRINT INVERSE 1; INK 0;AT x(i),y(i);b$
7510 IF r(j)>0 THEN GO TO 7434
7512 NEXT i: GO TO 2000
7600 IF b(c(j)+2,d(j))=2 AND b(c(j)+2,d(j)+2)=2 THEN LET r(j)=0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000
7602 IF b(c(j)+1,d(j)+1)=2 AND b(c(j)+3,d(j)+1)=2 THEN LET r(j)=0: LET b(c(j)+2,d(j)+1)=0: GO SUB 9000
7603 GO SUB 9000
7604 LET b(c(j)+2,d(j)+1)=0
7605 LET b(x(i)+2,y(i)+1)=0
7610 IF b(x(i)+2,y(i))=0 THEN GO SUB 600: LET b(x(i)+2,y(i))=2: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7612 IF b(x(i)+3,y(i))=0 THEN GO SUB 600: LET b(x(i)+3,y(i))=2: LET x(i)=x(i)+1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7613 IF b(x(i)+1,y(i))=0 THEN GO SUB 600: LET b(x(i)+1,y(i))=2: LET x(i)=x(i)-1: LET y(i)=y(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7614 IF b(x(i)+1,y(i)+1)=0 THEN GO SUB 600: LET b(x(i)+1,y(i)+1)=2: LET x(i)=x(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7615 IF b(x(i)+3,y(i)+1)=0 THEN GO SUB 600: LET b(x(i)+3,y(i)+1)=2: LET x(i)=x(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7616 IF b(x(i)+3,y(i)+2)=0 THEN GO SUB 600: LET b(x(i)+3,y(i)+2)=2: LET y(i)=y(i)+1: LET x(i)=x(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7617 IF b(x(i)+1,y(i)+2)=0 THEN GO SUB 600: LET b(x(i)+1,y(i)+2)=2: LET y(i)=y(i)+1: LET x(i)=x(i)-1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7618 IF b(x(i)+2,y(i)+2)=0 THEN GO SUB 600: LET b(x(i)+2,y(i)+2)=2: LET y(i)=y(i)+1: PRINT INVERSE 1; INK 0;AT x(i),y(i);b$: GO TO 7630
7620 LET g(i)=0
7630 IF roll<=3 THEN GO TO 7750
7632 IF r(j)>0 THEN GO TO 7434
7634 NEXT i: GO TO 2000
7700 IF b(x(i)+2,y(i))=1 AND b(x(i)+2,y(i)+2)=1 THEN LET g(i)=0
7702 IF b(x(i)+1,y(i)+1)=1 AND b(x(i)+3,y(i)+1)=1 THEN LET g(i)=0
7703 LET b(c(j)+2,d(j)+1)=0: GO SUB 9000
7704 LET c(j)=x(i): LET d(j)=y(i)
7715 PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
7719 LET b(c(j)+2,d(j)+1)=1
7720 IF g(i)>0 THEN GO TO 7610
7725 NEXT i: GO TO 2000
7750 LET b(c(j)+2,d(j)+1)=1: PRINT INVERSE 1; INK 2;AT c(j),d(j);c$
7752 NEXT i: GO TO 2000
9000 INVERSE 0: INK 6
9009 IF a$(c(j)+1,d(j)+1)<>" " THEN INK 1
9010 IF a$(c(j)+1,d(j)+1)="\p" THEN INK 4
9011 IF a$(c(j)+1,d(j)+1)=" " THEN INK 6
9015 IF a$(c(j)+1,d(j)+1)="\q" THEN INK 1
9017 IF a$(c(j)+1,d(j)+1)="\r" THEN INK 3
9019 IF a$(c(j)+1,d(j)+1)="\s" THEN INK 0
9025 PRINT AT c(j),d(j);a$(c(j)+1,d(j)+1)
9030 RETURN
9500 INVERSE 0: INK 0: PAPER 7
9505 PRINT AT 7,8;"GAME OVER"
9510 IF v3=0 THEN PRINT AT 10,3;"Stratigic Russian Victory - Moscow never fell"
9520 IF v3=1 THEN PRINT AT 10,3;"Russian Marginal Victory - Moscow fell for only one consecutive turn"
9530 IF v3=2 THEN PRINT AT 10,3;"German marginal victory - Moscow fell for 2 consecutive turns"
9540 IF v3=3 THEN PRINT AT 10,0;"German stratigic Victory - Moscow fell for 3 consecutive turns"
9550 IF v3=4 THEN PRINT AT 10,0;"German decisive Victory - Moscow fell for 4 consecutive turns"
9560 STOP
9900 INVERSE 0: INK 0
9910 FOR k=1 TO 3
9920 PRINT AT x(i),y(i);"X"
9930 PAUSE 8
9940 PRINT AT x(i),y(i);" "
9950 PAUSE 8
9960 NEXT k
9970 PRINT AT x(i),y(i);b$
9980 GO TO 142
9990 INVERSE 1
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
