--- title: "War in the East" id: 51814 type: "computer_media" slug: "war-in-the-east" url: "http://localhost/computer_media/war-in-the-east/" markdown_url: "http://localhost/computer_media/war-in-the-east.md" published_at: "2023-08-13T23:14:33+00:00" modified_at: "2026-03-30T21:46:24+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2022/03/War-in-the-East.png" excerpt: "Command German or Soviet forces across a 30-turn Eastern Front campaign where terrain, winter rules, and a Moscow control counter determine your fate." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Sharp's" slug: "sharps" taxonomy: "post_tag" url: "http://localhost/tag/sharps/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" - name: "Strategy" slug: "strategy" taxonomy: "genre" url: "http://localhost/type/strategy/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/War in the East (1983)(Sharps)(US)(TS2068)(Cassette).zip" mediadate: "1983" producer_company: - id: 11276 title: "Sharp’s" type: "company" url: "http://localhost/company/sharps/" images: - url: "http://localhost/wp-content/uploads/2022/03/War-in-the-East.png" related_products: - id: 14561 title: "War in the East" type: "product" url: "http://localhost/product/war-in-the-east/" media_type_tags: "Game, Strategy" --- # War in the East 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: 1. **roll > 10** — attacker eliminates defender, advances into square 2. **roll > 8** — both units degraded, defender retreats 3. **roll > 5** — defender retreats, attacker advances 4. **roll > 3** — attacker retreats (repulsed) 5. **roll > 1** — attacker retreats with possible encirclement check 6. **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 `2106` checks 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 `SOUND` statement at lines `6117` and `7087` uses 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 `1016` assigns both `i=2` and `k=4` for turn 21 but the variable `i` is also used as the German unit loop counter; this is safe only because the reinforcement block at `1070`–`1089` uses its own `FOR i` loop, shadowing the outer variable. - The save routine at lines `3000`–`3003` is triggered by key 1 only on turn >1 (line `161`), 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 `9990` contains a bare `INVERSE 1` with no following code or `RETURN`; it is never reached in normal play and appears to be a leftover fragment. - Line `2151` references `g(j)` (the German unit type array indexed by the Soviet loop counter `j`), which is almost certainly a bug — it should likely read `g(i)` or be removed, since the intent appears to be resetting a position variable for an empty slot. ## 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) 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 ```