--- title: "The Crown" id: 52656 type: "computer_media" slug: "the-crown" url: "http://localhost/computer_media/the-crown/" markdown_url: "http://localhost/computer_media/the-crown.md" published_at: "2024-01-03T18:10:19+00:00" modified_at: "2026-03-31T17:48:15+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2019/11/TheCrownTitleImage.png" excerpt: "Delve into a multi-level dungeon to recover The Crown, fighting monsters and gathering treasure across rooms drawn dynamically from coordinate data." 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: "Games to Learn By" slug: "games-to-learn-by" taxonomy: "post_tag" url: "http://localhost/tag/games-to-learn-by/" - 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/" indiv: - name: "Brian Walker" slug: "brian-walker" taxonomy: "indiv" url: "http://localhost/indiv/brian-walker/" genre: - name: "Arcade" slug: "arcade" taxonomy: "genre" url: "http://localhost/type/arcade/" - name: "Game" slug: "game" taxonomy: "genre" url: "http://localhost/type/game/" media_type: "Program" programmers: - name: "Brian Walker" slug: "brian-walker" taxonomy: "indiv" url: "http://localhost/indiv/brian-walker/" download_url: "https://archive.org/download/timex-sinclair-software-archive/The%20Crown%20%281983%29%28Games%20to%20Learn%20By%29%28US%29%28TS2068%29%28Cassette%29.zip" mediadate: "1983" producer_company: - id: 10892 title: "Games to Learn By, Inc." type: "company" url: "http://localhost/company/games-to-learn-by/" images: - url: "http://localhost/wp-content/uploads/2019/11/TheCrownTitleImage.png" - url: "http://localhost/wp-content/uploads/2024/01/TheCrown.Help_.png" - url: "http://localhost/wp-content/uploads/2024/01/TheCrown.EntryRoom.png" - url: "http://localhost/wp-content/uploads/2024/01/0.png" - url: "http://localhost/wp-content/uploads/2019/11/TheCrownTape.png" - url: "http://localhost/wp-content/uploads/2019/11/TheCrownCase.png" related_products: - id: 14301 title: "The Crown" type: "product" url: "http://localhost/product/the-crown/" media_type_tags: "Arcade, Game" --- The Crown is a Rogue-like dungeon exploration game in which the player navigates a multi-level dungeon, fights monsters, collects treasure, and attempts to retrieve a mystical crown. The game uses DRAW and PLOT commands to render room layouts from compact coordinate data stored in DATA statements, with each room defined by wall segments, exit connections, item positions, and spawn points. Rooms support special terrain including water (drawn with PAPER 5) and secret doors, and the player character and monsters are rendered using UDG characters loaded from a separate “CHAR SET” code block. Joystick input is polled via OUT 245 and IN 502 alongside keyboard controls, and level data for each of five dungeon levels is loaded from separate tape files at runtime. *** ## Program Analysis ### Program Structure The program is organized into a set of clearly separated functional subroutines and a main game loop. Line `1` sets up an error handler at `1400` and jumps to `3500` to initialize the game. Line `10` is a loader stub that loads a screen, a machine code block, and further data from tape before stopping. The main event loop runs from line `1400`, polling for keyboard and joystick input. Control branches to subroutines for movement (`500`), room entry (`610`), monster AI (`800`), combat (`700`), arrow firing (`1100`), secret door searching (`1700`), item pickup (`2200`), potion use (`2300`), inventory (`2400`), item use (`3600`), and the help menu (`4900`). Room rendering is handled by subroutine `2700`, which reads room geometry from DATA and draws it using PLOT and DRAW. Level loading from tape occurs at lines `3100`–`3199`. ### Initialization and Data Layout Line `3500` dimensions all game arrays: `N(120,2)` holds item type and quantity for up to 120 room slots across three levels, `M(40)` tracks monster presence per room, `I(25)` holds the player’s inventory (items 1–15 are treasures, 16–19 are equipment, 20–25 are special items/consumables), and `D(4,3)` stores door/key data per level. Lines `3501`–`3530` randomly populate item placements, ensuring keys, the crown (item 15 at slot 120), equipment upgrades, arrows (`N(j,1)=24`), and potions (`N(j,1)=25`) are scattered through all three level blocks. Starting conditions are set at line `3550`. ### Room Rendering (Subroutine 2700) Each room’s DATA block (at offsets from line `5000+RM*100`) encodes: four exit room numbers, a series of coordinate pairs for PLOT/DRAW wall segments (terminated by `0,0`), twelve corridor boundary and item spawn values, a room name string, four player start positions (one per facing direction), and the room’s cardinal bounds (NB, EB, SB, WB). The renderer reads these with RESTORE/READ, draws walls using DRAW between coordinate pairs, and handles sign-encoded special segments: a pair of negative coordinates signals a “lift pen and move” (PLOT without DRAW), a negative X value triggers water drawing mode (PAPER 5), and a negative Y value restores normal paper. Water-filled areas use PRINT AT to fill cells rather than DRAW. ### Monster System Monsters are spawned probabilistically at line `860` based on the current level (`lv`) and a random roll. Up to ten monster types are defined in DATA at line `9300`, each with a name string, hit-dice count (`H`), attack power (`W`), and armor class (`A`). Monster characters are rendered as UDGs using `CHR$(147+M(RM))` in INK 2 (red). Monster AI at line `880` moves toward the player using a simple Chebyshev-distance approach: `NCX` and `NCY` step toward the player’s position, prioritizing the dominant axis. Combat at line `700` and `980` uses randomized hit/miss checks influenced by player level (`MLV`), equipment values from `I()`, and monster stats. ### Player Movement and Collision Movement subroutine `500` checks whether the proposed new position (`NMX`, `NMY`) is within room bounds, then uses POINT to test whether the destination pixel is set (i.e., a wall). If the position is outside bounds, control passes to line `610` to handle room transitions via the exit table `E(DF)`. Room 0 routes to the town (line `3700`), while rooms above 100 trigger a level change (line `3100`). Direction is tracked as `DF`: 1=up, 2=right, 3=down, 4=left, and the player character is shown as `CHR$(143+DF)` from the loaded UDG set. ### Tape-Based Level Loading The dungeon spans five levels, each stored as a separate CODE file on tape. Subroutine `3100` searches memory from address 42200 to 45000 for a two-byte marker (`127,127`) to locate the load target address dynamically. The appropriate level file is then loaded with `LOAD "LEVELn" CODE start`. After all level data is loaded, a custom character set is loaded at `USR "a"` (168 bytes), replacing the default UDGs with game-specific graphics for player facings, monster types, and arrows. ### Sound System A general-purpose music/sound subroutine at line `1600` reads duration/pitch pairs from DATA until a `0,0` terminator and plays them with BEEP. Multiple melody datasets are defined: lines `1620`, `1669`, `1679`, `1689`, and `1699` encode different tunes for events such as enemy kill, combat hit, monster appearance, and item pickup. The caller sets the read position with RESTORE before calling the subroutine. ### Joystick Input At line `1417`, joystick state is read by writing 14 to port 245 and reading from port 502. The raw byte is subtracted from 255 to get active bits, and individual direction bits (1, 2, 4, 8) are mapped to the Q/Z/O/P keys, with bit 128 mapped to the attack key “a”. This is tested before keyboard input, providing transparent joystick/keyboard dual control. ### Inventory and Item System The `I(25)` array stores all player possessions: slots 1–10 hold treasure quantities, 11–15 hold keys (Bronze through Crystal plus The Crown), 16–19 hold equipment (sword, shield, helmet, armor) with values encoding upgrade level (+1, +2, etc.), and 20–25 hold special items (jumping ring, flame scroll, teleport gem, protection ring, arrows, potions). Item names are stored in `N$(25,12)`, read from DATA at line `9310`. The pickup routine at line `2211` detects when a floor item is an equipment upgrade and prompts the player whether to swap it for their current item. ### Key BASIC Idioms - `VAL "number"` is used extensively in GO TO, GO SUB, and expressions as a memory optimization — the tokenized number literal takes more space than a short string. - Boolean arithmetic is used for compact conditional assignments, e.g., `MLV=1+(EXP>2000)+...+(EXP>70000)` to compute player level from experience thresholds. - `FOR i=1 TO 2 STEP 0` creates an infinite loop for key-wait prompts, with exit via conditional `NEXT i` suppression when a valid key is detected. - RESTORE to a specific DATA line before calling subroutine `1600` allows a single sound player to handle multiple different tunes. - ON ERR GO TO 1400 at line `1` routes all runtime errors to the main game loop, used as a general “any key to continue” recovery mechanism. ### Notable Techniques - Room geometry is drawn from a single stream of coordinate pairs using DRAW, with sign-encoded control values (negative pairs, negative X, negative Y) multiplexing wall drawing, pen-lift moves, and water/paper-color changes into the same data stream. - The POINT function is used for pixel-perfect wall collision detection, avoiding any need for a separate map array. - Monster positions and types are stored in parallel arrays (`M()`, `CX`, `CY`, `CHP`) but only one monster per room is tracked at a time; re-entering a room may respawn a different monster type. - The score multiplier at game over (`exp*(i(15)+1)`) doubles the score if the player successfully retrieved The Crown (item 15). - Water areas use PAPER 5 with PRINT AT to flood-fill rectangular regions, integrated directly into the room-drawing DATA stream via negative coordinate sentinels. ### Bugs and Anomalies - Line `1500` branches to `GO TO 1441` after the search subroutine, but line `1441` does not exist in the listing; this likely falls through to the nearest following line (`1450`), which calls the monster routine — probably the intended behavior. - Line `3420` has a missing `THEN` colon separator: `IF RND<.33 THEN LET m(i)=...` — the assignment on the same line without a colon following THEN is valid in Spectrum BASIC but the `NEXT i` on line `3421` shows the loop body was intended to be split across lines. - Lines `7600`–`7760` contain three consecutive “Bedroom” rooms (rooms 38, 39, 40 equivalents on level 3) with identical DATA for room layout and spawn positions, which appears intentional for repeated room types but may be copy-paste artifacts given the identical coordinate strings. - At line `2820`, the DATA label is referenced but the label itself does not appear as a line number in the listing — the DRAW loop at `2800` uses `GO TO 2770` and the termination path falls to the unlabeled section between `2779` and `2825`, suggesting line `2820` is the implicit continuation after the `0,0` check at `2780`. ## Source Code ``` 10 CLS : LOAD ""SCREEN$ : PRINT AT 0,0;"";: LOAD ""CODE : PRINT AT 0,0;"";: LOAD "" 20 STOP 1 ON ERR GO TO 1400: GO TO VAL "3500" 540 IF NMXEB OR NMY>SB OR NMYVAL "100" THEN GO SUB VAL "3100" 690 GO SUB VAL "2700" 695 RETURN 700 IF NOT M(RM) THEN PRINT AT VAL "21",VAL "0";"Can't attack": RETURN 710 IF SQR (ABS (MX-CX)^VAL "2"+ABS (MY-CY)^VAL "2")>=VAL "2" THEN PRINT AT VAL "21",VAL "0";"Too far ": RETURN 715 IF df=VAL "4" OR df=VAL "3" THEN PRINT OVER VAL "1";AT my,mx;"\o" 717 IF df=VAL "2" OR df=VAL "1" THEN PRINT OVER VAL "1";AT my,mx;"\p" 720 LET DAMAGE=(INT (RND*VAL "100"+VAL "5"*(I(VAL "16")-VAL "1"))>=VAL "101"-VAL "5"*A(M(RM))-VAL "5"*MLV)*INT (RND*VAL "4"+RND*VAL "4"+VAL "1") 730 IF DAMAGE<=VAL "0" THEN PRINT AT VAL "21",VAL "0";"Missed him ": RETURN 740 LET CHP=CHP-DAMAGE 750 IF CHP>VAL "0" THEN PRINT AT VAL "21",VAL "0";"Hit him ": RETURN 760 PRINT AT VAL "21",VAL "0";"Killed him";AT VAL "21",VAL "17";" " 770 LET EXP=EXP+H(M(RM))*VAL "30": LET M(RM)=VAL "0" 780 PRINT AT CY,CX;" " 785 RESTORE VAL "1679": GO SUB VAL "1600" 787 FOR i=VAL "1" TO VAL "100": NEXT i 790 RETURN 800 PRINT AT my,mx;CHR$ (VAL "143"+df): IF M(RM)<>VAL "0" THEN GO TO VAL "880" 810 IF RND-VAL ".005"*lv>VAL ".015" THEN RETURN 820 RESTORE VAL "5050"+RM*VAL "100" 830 FOR I=VAL "1" TO INT (RND*VAL "4"+VAL "1"): READ CX,CY: NEXT I 850 IF POINT (cx*VAL "8"+VAL "3",(VAL "21"-cy)*VAL "8"+VAL "4") THEN RETURN 860 LET M(RM)=INT (RND*VAL "10"+VAL "1"): LET CHP=VAL "0": FOR i=VAL "1" TO H(M(RM)): LET CHP=CHP+INT (RND*VAL "8"+VAL "1"): NEXT i 870 BORDER VAL "2": PRINT AT CY,CX; INK VAL "2";CHR$ (VAL "147"+M(RM)) 875 PRINT AT VAL "21",VAL "17";c$(M(RM)) 877 BORDER VAL "1" 878 RESTORE VAL "1699": GO SUB VAL "1600" 880 IF SQR (ABS (MX-CX)^VAL "2"+ABS (MY-CY)^VAL "2")=ABS (CY-MY)) 910 LET NCY=CY+SGN (MY-CY)*(ABS (MY-CY)>ABS (MX-CX)) 920 IF POINT (ncx*VAL "8"+VAL "3",(VAL "21"-ncy)*VAL "8"+VAL "4") THEN RETURN 930 PRINT AT CY,CX;" " 940 LET CX=NCX: LET CY=NCY 950 PRINT AT CY,CX; INK VAL "2";CHR$ (VAL "147"+M(RM)) 970 RETURN 980 LET DAMAGE=(INT (RND*VAL "100"+VAL "1")>=VAL "50"-VAL "5"*H(M(RM))+VAL "15"*(I(VAL "19")>VAL "0")+VAL "5"*I(VAL "19")+VAL "5"*I(VAL "18")+VAL "5"*I(VAL "17")+VAL "5"*I(VAL "23"))*INT (RND*W(M(RM))/VAL "2"+RND*w(m(rm))/VAL "2"+VAL "1") 990 IF DAMAGE<=VAL "0" THEN PRINT AT VAL "21",VAL "0";"He missed ": RETURN 1000 BORDER VAL "2": LET HP=HP-DAMAGE: PRINT AT VAL "21",VAL "0";"He hit you ": BORDER VAL "1" 1010 IF HP<=VAL "0" THEN GO TO VAL "3000" 1015 IF hpEB OR NAYSB THEN PRINT AT VAL "21",VAL "0";"Missed him ": PRINT AT AY,AX;" ": PRINT AT MY,MX;CHR$ (VAL "143"+DF): RETURN 1150 IF NAX<>CX OR NAY<>CY THEN GO TO VAL "1190" 1160 LET CHP=CHP-INT (RND*VAL "4"+VAL "1"): PRINT AT VAL "21",VAL "0";"Hit him " 1170 IF CHP<=VAL "0" THEN PRINT AT VAL "21",VAL "0";"Killed him ": PRINT AT CY,CX;" ": LET exp=exp+h(m(rm))*VAL "30": LET M(RM)=VAL "0": LET CX=VAL "0": LET CY=VAL "0": PRINT AT VAL "21",VAL "17";" ": RESTORE VAL "1679": GO SUB VAL "1600" 1175 IF AX<>MX OR AY<>MY THEN PRINT AT AY,AX;" " 1180 RETURN 1190 IF NOT POINT (nax*VAL "8"+VAL "3",(VAL "21"-nay)*VAL "8"+VAL "4") THEN GO TO VAL "1220" 1195 PRINT AT VAL "21",VAL "0";"Missed him " 1200 IF AY<>MY OR AX<>MX THEN PRINT AT AY,AX;" " 1210 RETURN 1220 IF AY<>MY OR AX<>MX THEN PRINT AT AY,AX;" " 1230 LET AX=NAX 1240 LET AY=NAY 1250 PRINT AT AY,AX;CHR$ (VAL "160"+DF) 1260 NEXT I 1279 RETURN 1400 PRINT AT my,mx;CHR$ (VAL "143"+df): LET MLV=VAL "1"+(EXP>VAL "2000")+(EXP>VAL "4000")+(EXP>VAL "8000")+(EXP>VAL "17000")+(EXP>VAL "35000")+(EXP>VAL "70000"): LET MHP=MLV*VAL "10"+VAL "10" 1401 FOR i=VAL "1" TO VAL "100" 1417 OUT 245,14: LET joy=IN 502 1419 LET i$=INKEY$ 1420 IF I$<>"" OR joy<>255 THEN GO TO 1460 1430 NEXT I: PRINT AT 21,0;" " 1440 GO SUB 800 1450 GO TO 1400 1460 PRINT AT 21,0;" " 1461 IF i$<>"" THEN GO TO 1470 1462 LET joy=255-joy: IF joy>=1 THEN LET i$="q" 1463 IF joy>=2 THEN LET i$="z" 1464 IF joy>=4 THEN LET i$="o" 1465 IF joy>=8 THEN LET i$="p" 1466 IF joy>=128 THEN LET i$="a" 1470 IF i$="p" THEN LET df=2: LET NMX=MX+1: GO SUB 500: GO SUB 800: GO TO 1401 1472 IF i$="o" THEN LET df=4: LET NMX=MX-1: GO SUB 500: GO SUB 800: GO TO 1401 1474 IF i$="q" THEN LET df=1: LET NMY=MY-1: GO SUB 500: GO SUB 800: GO TO 1401 1476 IF i$="z" THEN LET df=3: LET NMY=MY+1: GO SUB 500: GO SUB 800: GO TO 1401 1480 IF I$="a" THEN GO SUB 700: GO TO 1440 1490 IF I$="f" THEN GO SUB 1100: GO TO 1440 1500 IF I$="s" THEN GO SUB 1700: GO SUB 800: GO TO 1441 1520 IF I$="g" THEN GO SUB 2200: GO SUB 800: GO TO 1401 1530 IF I$="d" THEN GO SUB 2300: GO SUB 800: GO TO 1401 1535 IF I$="u" THEN GO SUB 3600: GO TO 1440 1540 IF I$="i" THEN GO SUB 2400: GO TO 1401 1550 IF I$="w" THEN GO SUB 3200: GO TO 1401 1555 IF i$="h" THEN GO SUB 4900: GO TO 1401 1560 GO TO 1430 1600 READ dur,pitch: IF dur=0 AND pitch=0 THEN RETURN 1610 BEEP dur,pitch: GO TO 1600 1620 DATA .1,0,.1,5,.1,9,.1,12,.1,-60,.1,9,.4,12,0,0 1669 DATA .6,5,.2,4,.2,5,.4,7,.8,2,.8,0,.7,-2,.2,-3,.2,-2,.3,0,1,-5,.8,-3,.4,-2,.4,0,.1,2,.4,7,.4,7,.6,0,.5,-60,.4,10,.4,10,.2,10,.3,9,.2,7,1,5,0,0 1679 DATA .15,-2,.25,-2,.05,-2,.05,-2,.25,-2,.05,-2,.05,-2,.25,2,.05,-2,.05,-2,.35,-2,0,0 1689 DATA .14,2,.32,5,.05,2,.14,3,.21,5,.32,-60,.14,2,.32,5,.05,2,.14,3,.3,5,0,0 1699 DATA .1,-7,.1,-7,.1,-3,.1,-7,.1,-2,.1,-7,.1,-1,.1,0,.1,-2,.1,-2,.1,2,.1,-2,.1,3,.1,-2,.1,4,.3,5,0,0 1700 IF RND*7<4 THEN PRINT AT 21,0;"Didn't find any": RETURN 1710 IF NOT C(DF*3-2) THEN PRINT AT 21,0;"Didn't find any": RETURN 1720 PRINT AT 21,0;"Found one " 1730 IF DF=1 OR DF=3 THEN GO TO 1780 1740 FOR I=C(DF*3-1) TO C(DF*3) 1750 PRINT AT I,C(DF*3-2);" " 1760 NEXT I 1770 RESTORE 1620: GO SUB 1600: RETURN 1780 FOR I=C(DF*3-2) TO C(DF*3) 1790 PRINT AT C(DF*3-1),I;" " 1800 NEXT I 1810 RESTORE 1620: GO SUB 1600: RETURN 1900 IF rm<>40 OR D(LV,3)<=0 THEN PRINT AT 21,0;"What ?????": PAUSE 5: RETURN 1905 LET NMX=MX+(DF=2)-(DF=4): LET NMY=MY+(DF=3)-(DF=1) 1920 IF d(lv,1)=nmx AND d(lv,2)=nmy THEN GO TO 1940 1930 RETURN 1945 IF I(D(LV,3)) THEN GO TO 1960 1950 PRINT AT 21,0;"No key ": PAUSE 5: RETURN 1960 PRINT AT d(lv,2),d(lv,1);" " 1999 RETURN 2200 IF NOT N(VAL "40"*(lv-VAL "1")+RM,VAL "1") THEN RETURN 2210 IF SQR (ABS (MX-X(RM))^VAL "2"+ABS (MY-Y(RM))^VAL "2")>=VAL "2" THEN RETURN 2211 IF N(VAL "40"*(lv-VAL "1")+RM,VAL "1")<=VAL "15" OR N(VAL "40"*(lv-VAL "1")+RM,VAL "1")>VAL "19" OR I(N(VAL "40"*(lv-VAL "1")+RM,VAL "1"))=VAL "0" THEN GO TO VAL "2220" 2212 PRINT AT y(rm),x(rm);" ": PRINT AT VAL "21",VAL "0";N$(N(VAL "40"*(lv-VAL "1")+RM,VAL "1"));AT VAL "21",VAL "6";"+";N(VAL "40"*(lv-VAL "1")+RM,VAL "2")-VAL "1": FLASH VAL "1": PRINT AT VAL "21",VAL "9";"Use ?";: FLASH VAL "0": PRINT " ": FOR I=VAL "1" TO VAL "2" STEP VAL "0": LET I$=INKEY$: IF I$<>"" THEN GO TO VAL "2214" 2213 NEXT i 2214 IF I$="n" THEN PRINT AT VAL "21",VAL "0";"O.k. Left there": RETURN 2215 IF I$<>"y" THEN NEXT i 2216 LET TEMP=I(N(VAL "40"*(lv-VAL "1")+RM,VAL "1")): LET I(N(VAL "40"*(lv-VAL "1")+RM,VAL "1"))=N(VAL "40"*(lv-VAL "1")+RM,VAL "2"): LET N(VAL "40"*(lv-VAL "1")+RM,VAL "2")=TEMP: PRINT AT VAL "21",VAL "0";"O.k. Picked up ": RETURN 2220 PRINT AT VAL "21",VAL "0";" ": PRINT AT VAL "21",VAL "0";N(VAL "40"*(lv-VAL "1")+RM,VAL "2");" ";N$(N(VAL "40"*(lv-VAL "1")+RM,VAL "1")) 2230 LET I(N(VAL "40"*(lv-VAL "1")+RM,VAL "1"))=I(N(VAL "40"*(lv-VAL "1")+RM,VAL "1"))+N(VAL "40"*(lv-VAL "1")+RM,VAL "2") 2240 PRINT AT Y(RM),X(RM);" " 2250 IF N(VAL "40"*(lv-VAL "1")+rm,VAL "1")<=VAL "15" THEN RESTORE VAL "1689": GO SUB VAL "1600" 2257 LET n(VAL "40"*(lv-VAL "1")+rm,VAL "1")=VAL "0" 2260 RETURN 2300 IF I(VAL "25")=VAL "0" THEN PRINT AT VAL "21",VAL "0";"No potions left": RETURN 2310 LET I(VAL "25")=I(VAL "25")-VAL "1" 2320 LET HP=HP+INT (RND*VAL "8"+VAL "1") 2330 IF HP>MHP THEN LET HP=MHP 2340 PRINT FLASH (hpVAL "1" THEN PRINT "+ ";I(VAL "16")-VAL "1" 2420 PRINT AT VAL "3",VAL "0";"Life points ";HP,: IF I(VAL "17") THEN PRINT " Shield ";: IF i(VAL "17")>VAL "1" THEN PRINT "+ ";I(VAL "17")-VAL "1" 2430 PRINT AT VAL "4",VAL "0";"Level ";LV,: IF I(VAL "18") THEN PRINT " Helmet ";: IF i(VAL "18")>VAL "1" THEN PRINT "+ ";I(VAL "18")-VAL "1" 2440 PRINT AT VAL "5",VAL "0";"Score ";EXP,: IF I(VAL "19") THEN PRINT " Armor ";: IF i(VAL "19")>VAL "1" THEN PRINT "+ ";I(VAL "19")-VAL "1" 2460 FOR I=VAL "1" TO VAL "15" 2465 IF NOT I(I) THEN GO TO VAL "2490" 2470 PRINT AT I+VAL "6",VAL "0";I(I) 2480 PRINT AT I+VAL "6",VAL "3";N$(I) 2490 NEXT I 2495 FOR I=VAL "20" TO VAL "25" 2497 IF NOT I(I) THEN GO TO VAL "2510" 2500 PRINT AT I-VAL "13",VAL "17";I(I): PRINT AT I-VAL "13",VAL "20";n$(I) 2510 NEXT I 2650 PRINT FLASH VAL "1";AT VAL "21",VAL "17";"HIT ANY KEY" 2660 IF INKEY$<>"" THEN GO TO VAL "2680" 2670 GO TO VAL "2660" 2680 GO SUB VAL "2700": LET MX=OMX: LET MY=OMY: LET nmx=mx: LET nmy=my: PRINT AT MY,MX;CHR$ (VAL "143"+df): IF monster THEN LET m(rm)=monster: PRINT INK VAL "2";AT cy,cx;CHR$ (VAL "147"+m(rm)): PRINT AT VAL "21",VAL "17";c$(m(rm)) 2690 RETURN 2700 CLS : PRINT AT VAL "0",VAL "0";"LIFE PTS LEFT "; FLASH (HPoy)-(y<=oy): PRINT AT i,x;" ": NEXT i: GO TO 2770 2798 IF waterflag AND oy=y THEN FOR i=ox TO x STEP (ox=x): PRINT AT y,i;" ": NEXT i: GO TO 2770 2800 DRAW (x-ox)*8,(oy-y)*8: PLOT ox*8+5,(21-oy)*8+6: DRAW (x-ox)*8,(oy-y)*8: PLOT ox*8+4,(21-oy)*8+5: PLOT x*8+3,(21-y)*8+4: GO TO 2770 2825 IF rm<>40 OR D(LV,3)<=0 THEN GO TO 2900 2830 IF d(lv,3)>0 THEN PRINT AT d(lv,2),d(lv,1);"X": GO TO 2900 2840 PRINT AT d(lv,2),d(lv,1);" " 2900 FOR I=1 TO 12: READ C(I): NEXT I 2905 READ R$: PRINT AT 0,17;CHR$ 16+CHR$ 4+R$ 2910 FOR I=1 TO DF: READ MX,MY: NEXT I 2920 IF DF<>4 THEN FOR I=DF+1 TO 4: READ J,J: NEXT I 2925 LET nmx=mx: LET nmy=my 2930 READ NB,EB,SB,WB 2940 PRINT INK 7;AT my,mx;CHR$ (143+df) 2950 IF NOT M(RM) THEN GO TO 2999 2960 RESTORE 5050+RM*100: FOR I=1 TO INT (RND*4+1): READ CX,CY: NEXT I: IF NOT POINT (cx*8+3,(21-cy)*8+4) THEN LET CHP=0: FOR I=1 TO H(M(RM)): LET CHP=CHP+INT (RND*8+1): NEXT I: PRINT AT CY,CX;CHR$ 16+CHR$ 2+CHR$ (147+M(RM)): PRINT AT 21,17;C$(M(RM)): GO TO 2999 2970 GO TO 2960 2999 PRINT AT my,mx;" ": RETURN 3000 CLS : PRINT "Once again the mighty adventurerfails to retrieve The Crown. The world is doomed unless another brave adventurer dares to try retrieve The Crown hiddensomewhere deep inside the dungeon." 3010 GO SUB 3800: PRINT : PRINT " Your score was ";exp*(i(15)+1) 3020 PRINT : PRINT "Play again (y/n)? ": FOR i=0 TO 1 STEP 0: LET I$=INKEY$: IF i$="" THEN NEXT i 3030 IF i$="n" THEN NEW : STOP 3035 IF i$<>"y" THEN NEXT i 3037 IF lv<>1 THEN LET lv=1: GO SUB 3110 3040 PRINT AT 19,0;"Please wait while I set up the dungeon.": GO TO VAL "3500" 3050 NEXT i 3100 CLS : PRINT ;"Position tape at level ";INT (rm/100): RESTORE 1669: GO SUB 1600: LET lv=INT (rm/100): FOR i=42200 TO 45000: IF PEEK i<>127 OR PEEK (i+1)<>127 THEN NEXT i 3105 LET start=i+3 3110 CLS : PRINT "START TAPE AT LEVEL ";LV 3120 LET RM=RM-LV*100 3125 IF LV=1 THEN LOAD "LEVEL1"CODE start 3130 IF LV=2 THEN LOAD "LEVEL2"CODE start 3140 IF LV=3 THEN LOAD "LEVEL3"CODE start 3150 IF LV=4 THEN LOAD "LEVEL4"CODE start 3160 IF LV=5 THEN LOAD "LEVEL5"CODE start 3172 LOAD "CHAR SET"CODE USR "a",168 3189 CLS : PRINT AT 10,5;"Stop Tape Now !!!!": BEEP 1,1 3190 RESTORE 9200: FOR I=1 TO 40: READ X(I),Y(I): NEXT I 3192 FOR I=1 TO 10: READ C$(I),W(I),H(I),A(I): NEXT I 3199 RETURN 3200 PRINT FLASH 1;AT 21,0;"Hit any key" 3220 FOR i=1 TO 2 STEP 0: LET I$=INKEY$ 3230 IF I$="" THEN NEXT i 3235 IF i$="w" THEN NEXT i 3240 PRINT AT 21,0;" ": RETURN 3406 FOR i=1 TO 40: LET m(i)=0: NEXT i 3407 GO SUB 3190 3420 FOR i=1 TO 40: IF RND<.33 THEN LET m(i)=INT (RND*10+1) 3421 NEXT i 3499 RETURN 3500 RANDOMIZE : POKE VAL "23562",VAL "10": DIM N(VAL "120",VAL "2"): DIM X(VAL "40"): DIM Y(VAL "40"): DIM N$(VAL "25",VAL "12"): DIM M$(VAL "10"): DIM C$(VAL "10",VAL "15"): DIM M(VAL "40"): DIM W(VAL "10"): DIM H(VAL "10"): DIM A(VAL "10"): DIM C(VAL "12"): DIM D(VAL "4",VAL "3"): DIM I(VAL "25"): DIM E(VAL "4"): DIM R$(VAL "15") 3501 FOR i=1 TO 120: IF RND>.33 THEN LET N(i,1)=INT (RND*10+1): LET N(i,2)=INT (RND*3+1+RND*(i/40)) 3502 NEXT i 3503 LET j=INT (120*RND+1): LET n(j,1)=23: LET n(j,2)=1 3504 FOR k=0 TO 2: FOR i=1 TO 5: LET j=INT (k*40+RND*40+1): LET N(j,1)=24: LET N(j,2)=INT (RND*7)+1: NEXT i: FOR i=1 TO 5: LET j=INT (k*40+RND*40+1): LET N(j,1)=25: LET n(j,2)=INT (RND*3+1): NEXT i 3505 IF k=0 THEN GO TO 3510 3506 LET j=INT (RND*40+1+k*40): LET n(j,1)=21: LET n(j,2)=INT (RND*2.5+k) 3510 LET j=INT (k*40+RND*40+1): LET N(j,1)=11+k: LET n(j,2)=1 3520 FOR i=1 TO 4: LET j=INT (k*40+RND*40+1): IF NOT n(j,1) THEN LET n(j,1)=i+15: LET n(j,2)=k+2 3523 NEXT i 3525 LET j=INT (k*40+RND*40+1): IF n(j,1) THEN GO TO 3525 3527 LET n(j,1)=11+k: LET n(j,2)=1 3528 LET j=INT (40*k+RND*40+1): IF n(j,1) THEN GO TO 3528 3529 LET n(j,1)=20+k: LET n(j,2)=1 3530 NEXT k 3531 LET d(1,1)=13: LET d(1,2)=11: LET d(1,3)=11 3532 LET d(2,1)=11: LET d(2,2)=13: LET d(2,3)=12 3533 LET d(3,1)=8: LET d(3,2)=13: LET d(3,3)=13 3536 LET n(120,1)=15: LET n(120,2)=1 3540 RESTORE 9310: FOR I=1 TO 25: READ N$(I): NEXT I 3550 BORDER 1: LET LV=1: LET i(16)=1: LET i(18)=1: LET i(19)=1: LET i(17)=1: LET waterflag=0: LET EXP=0: LET CX=0: LET CY=0: LET RM=1: LET HP=20: LET MHP=20: LET MLV=1: LET DF=1: LET i(24)=20: LET i(25)=5: GO SUB 3400: GO SUB 2700: GO TO 1400 3600 PRINT FLASH 1;AT 21,0;"Use What? " 3610 FOR i=1 TO 2 STEP 0: LET I$=INKEY$: IF I$="" THEN NEXT I 3612 IF i$="u" THEN NEXT i 3615 IF i$="k" THEN GO SUB 1900: RETURN 3620 IF I$="j" AND I(20) AND rm=16 AND LV=1 THEN PRINT AT 21,0;"Here we go.....": PRINT AT MY,MX;" ": LET MX=29*(MX=16)+16*(MX=29): LET MY=2*(My>=5)+15*(MY<=3): LET MY=MY+1*(POINT (mx*8+3,(21-my)*8+4)): PRINT AT MY,MX;CHR$ (143+DF): RETURN 3630 IF I$="f" AND M(RM) AND I(21) THEN LET I(21)=I(21)-1: LET DAMAGE=INT (RND*20+10): GO TO 740 3640 IF I$="t" AND I(22) THEN IF RND>.1 THEN LET RM=RM*(E(DF)=0 OR E(DF)>40)+E(DF)*(E(DF)<=40): GO SUB 2700: RETURN 3650 IF I$="t" AND i(22) THEN PRINT AT 21,0;"It broke ": LET i(22)=i(22)-1: RETURN 3699 PRINT AT 21,0;"What ?????": PAUSE 5: RETURN 3700 IF NOT i(15) THEN GO TO 3709 3703 CLS : GO SUB 3800: PRINT BRIGHT 1; FLASH 1;AT 10,3;"You have saved the world.": PRINT : PRINT " Your score was ";exp*2: RESTORE 1669: GO SUB 1600: RESTORE 1669: GO SUB 1600: PAUSE 10: GO TO 3020 3709 CLS : PRINT AT 5,0;" I will now donate all your treasures for blessings from thetown priest. His blessings willaid you in your quest to retrieve The Crown." 3710 GO SUB 3800 3720 FOR i=1 TO 10: LET i(i)=0: NEXT i 3725 LET MLV=1+(EXP>2000)+(EXP>4000)+(EXP>8000)+(EXP>17000)+(EXP>35000)+(EXP>70000): LET MHP=MLV*10+10 3730 LET hp=mhp: LET rm=1: LET df=1 3740 PRINT : PRINT FLASH 1;AT 16,10;"Hit any key": FOR i=1 TO 2 STEP 0: IF INKEY$="" THEN NEXT i 3799 GO SUB 2700: PRINT AT my,mx;CHR$ (143+df): RETURN 3800 LET exp=exp+20*i(1)+50*i(2)+15*i(3)+30*i(4)+300*i(5)+200*i(6)+75*i(7)+125*i(8)+75*i(9)+50*i(10): RETURN 4900 CLS : LET monster=m(rm): LET m(rm)=VAL "0": LET OMX=MX: LET OMY=MY 4910 PRINT AT VAL "0",VAL "12";"Help Menu";: PRINT OVER 1;AT 0,12;"_________" 4920 PRINT AT VAL "2",VAL "0";"Movement: Use O q-Up o-Lft": PRINT AT 3,9;"Joystick R z-Dwn p-Rgt" 4930 PRINT AT VAL "5",VAL "0";"Combat: a-Attack with sword";AT 6,8;"f-Fire arrow" 4935 PRINT AT VAL "8",VAL "0";"Using items: u & another letter";AT VAL "9",VAL "17";"k-Key";AT VAL "10",VAL "17";"j-Jumping/ring";AT VAL "11",VAL "17";"f-Flame/scroll";AT VAL "12",VAL "17";"t-Teleport/gem" 4940 PRINT AT VAL "14",VAL "0";"Misc: g-Grab treasure";AT 15,6;"d-Drink potion";AT 16,6;"i-Take inventory";AT 17,6;"w-Make game wait";AT 18,6;"s-search for secret door";AT 19,6;"h-Display help menu" 4990 GO TO 2650 4999 REM RESET \* 5100 DATA 2,3,0,4 5110 DATA 8,1,14,1,-8,-5,14,5,14,18,15,18,-17,-18,18,18,18,12,22,12,22,18,26,18,26,2,18,2,18,1,18,8,22,8,0,0 5120 DATA 0,0,0,26,10,10,0,0,0,0,0,0 5130 DATA "Entry room" 5150 DATA 16,16,9,3,16,2,25,10 5160 DATA 1,26,18,8 5200 DATA 7,5,1,10 5210 DATA 14,1,14,18,-18,-1,18,18,-2,-10,-13,10,13,11,2,11,-19,-10,29,10,29,11,19,11,19,-11,0,0 5220 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 5230 DATA "Bridge" 5250 DATA 16,17,16,12,16,2,16,15 5260 DATA 2,18,18,14 5300 DATA 6,5,0,1 5310 DATA 12,9,4,9,4,11,14,11,14,9,15,9,15,6,14,6,14,5,19,5,19,10,25,10,25,5,27,5,-27,-3,12,3,12,6,10,6,10,9,0,0 5320 DATA 22,3,22,0,0,0,0,0,0,4,10,10 5330 DATA "Rough cave" 5350 DATA 22,7,5,10,22,4,26,4 5360 DATA 3,27,11,4 5400 DATA 14,1,8,10 5410 DATA 12,1,12,3,22,3,-22,-7,19,7,-17,-7,10,7,0,0 5420 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 5430 DATA "Hallway" 5450 DATA 18,6,12,5,15,5,22,5 5460 DATA 3,22,7,12 5500 DATA 38,0,0,3 5510 DATA 3,12,6,12,6,17,16,17,16,16,30,16,30,2,19,2,19,14,16,14,16,2,6,2,6,9,11,9,3,9,0,0 5520 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 5530 DATA "Rough cave" 5550 DATA 12,14,4,11,14,9,26,10 5560 DATA 1,30, 18,3 5600 DATA 38,5,3,1 5610 DATA 12,10,12,14,16,14,16,10,12,10,0,0 5620 DATA 0,0,0,0,0,0,14,14,14,0,0,0 5630 DATA "Secret closet" 5650 DATA 14,13,13,11,15,12,15,13 5660 DATA 10,16,14,12 5700 DATA 15,0,2,14 5710 DATA 10,1,10,5,-10,-7,10,18,-14,-18,14,1,0,0 5720 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 5730 DATA "Main hallway" 5750 DATA 12,18,11,6,12,2,12,6 5760 DATA 1,14,18,10 5800 DATA 4,1,0,13 5810 DATA 12,3,22,3,-12,-7,17,7,-15,-7,15,14,6,14,6,18,20,18,20,7,22,7,19,7,0,0 5820 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 5830 DATA "Tool room" 5850 DATA 18,16,8,16,18,8,18,17 5860 DATA 7,20,18,6 5900 DATA 10,8,8,8 5910 DATA 6,1,6,3,-12,-1,12,3,22,3,-22,-7,19,7,-17,-7,10,7,-8,-7,6,7,6,14,15,14,15,7,0,0 5920 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 5930 DATA "Storage room" 5950 DATA 14,13,8,11,9,8,12,11 5960 DATA 7,15,14,6 6000 DATA 18,4,9,11 6010 DATA 21,9,17,9,19,9,19,1,9,1,9,9,12,9,5,9,5,13,-9,-16,9,13,13,13,-15,-13,21,13,0,0 6020 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6030 DATA "Cavern " 6050 DATA 14,12,10,11,21,11,21,11 6060 DATA 1,21,13,9 6100 DATA 0,10,13,12 6110 DATA 23,2,19,2,19,5,7,5,7,6,-7,-8,7,9,23,9,23,6,0,0 6120 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6130 DATA "Hallway" 6150 DATA 12,8,8,7,21,6,22,4 6160 DATA 2,23,9,7 6200 DATA 16,11,13,0 6210 DATA 13,2,13,3,2,3,2,14,11,14,-15,-14,15,10,-15,-8,15,2,-6,-3,6,14,-5,-13,-5,4,4,4,4,13,3,13,3,4,-3,-3,3,-3,0,0 6220 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6230 DATA "Beach" 6250 DATA 13,13,8,9,14,4,14,9 6260 DATA 2,15,14,2 6300 DATA 12,1,0,0 6310 DATA 11,14,8,14,8,18,17,18,17,14,15,14,0,0 6320 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6330 DATA "Storage room" 6350 DATA 12,15,13,17,13,15,9,17 6360 DATA 14,17,18,8 6400 DATA 15,7,4,18 6410 DATA 18,11,18,15,-14,-14,14,15,3,15,3,14,-3,-12,3,11,14,11,14,12,0,0 6420 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6430 DATA "Misty Hallway" 6450 DATA 6,13,4,13,10,13,13,13 6460 DATA 11,14,15,3 6500 DATA 20,40,7,19 6510 DATA 18,15,18,5,6,5,-4,-5,3,5,-3,-7,14,7,14,15,0,0 6520 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6530 DATA "Main hallway" 6550 DATA 16,15,3,6,5,6,16,6 6560 DATA 5,18,15,3 6600 DATA 17,10,12,5 6610 DATA 1,2,28,2,28,5,30,5,30,2,30,17,17,17,17,18,17,14,15,14,15,18,15,17,1,17,1,2,-2,-3,-27,3,27,4,2,4,2,5,27,5,-2,-6,29,6,29,7,2,7,2,8,29,8,29,9,2,9,2,10,29,10 6620 DATA 29,11,2,11,2,12,29,12,29,13,2,13,2,14,14,14,14,15,2,15,2,16,14,16,-18,-14,29,14,29,15,18,15,18,16,29,16,29,-16,-30,-16,0,0 6630 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0","Dock on a lake" 6650 DATA 16,16,16,15,29,3,16,15 6660 DATA 2,30,17,1 6700 DATA 22,18,16,31 6710 DATA 26,8,26,5,23,5,23,8,24,8,0,0 6720 DATA 0,0,0,26,6,6,0,0,0,0,0,0 6730 DATA "Secret room" 6750 DATA 25,7,24,7,24,6,25,6 6760 DATA 5,26,8,23 6800 DATA 19,14,10,17 6810 DATA 12,9,12,13,3,13,3,2,12,2,12,7,-6,-9,8,9,8,11,6,11,6,9,-7,-10,-7,10,7,-10,0,0 6820 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6830 DATA "Waterwheel room" 6850 DATA 7,5,4,12,4,4,11,8 6860 DATA 2,12,13,3 6900 DATA 21,15,18,25 6910 DATA 24,4,24,6,23,6,23,3,19,3,19,10,23,10,23,8,27,8,-27,-6,26,6,26,4,0,0 6920 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 6930 DATA "Guard post" 6950 DATA 21,4,20,7,22,8,22,7 6960 DATA 3,23,10,19 7000 DATA 22,39,15,21 7010 DATA 15,16,15,12,-15,-10,15,3,-17,-3,17,16,0,0 7020 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7030 DATA "Main hallway" 7050 DATA 16,16,16,11,16,3,16,14 7060 DATA 3,17,16,15 7100 DATA 22,20,19,27 7110 DATA 15,10,15,7,10,7,10,15,15,15,15,12,0,0 7120 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7130 DATA "Bedroom" 7150 DATA 12,8,13,10,11,14,14,11 7160 DATA 7,15,15,10 7200 DATA 35,36,20,23 7210 DATA 14,6,14,9,7,9,7,11,2,11,-2,-13,9,13,9,11,14,11,14,13,-16,-13,16,11,20,11,-20,-9,16,9,16,6,0,0 7220 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7230 DATA "Intersection" 7250 DATA 15,13,2,12,15,6,20,10 7260 DATA 6,20,13,2 7300 DATA 33,22,24,30 7310 DATA 22,3,22,12,-22,-14,22,18,-24,-18,24,17,30,17,-30,-15,24,15,24,3,0,0 7320 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7330 DATA "Intersection" 7350 DATA 23,18,23,13,23,3,29,16 7360 DATA 3,30,18,22 7400 DATA 23,26,25,29 7410 DATA 11,3,11,5,-11,-7,11,11,-13,-3,13,5,-13,-7,13,11,0,0 7420 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7430 DATA "Hallway" 7450 DATA 12,11,12,6,12,3,12,6 7460 DATA 3,13,10,11 7500 DATA 24,27,31,28 7510 DATA 12,3,12,7,-12,-9,12,17,-14,-17,14,9,-14,-7,14,3,0,0 7520 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7530 DATA "Hallway" 7550 DATA 13,16,13,8,13,3,13,8 7560 DATA 3,14,17,12 7600 DATA 22,20,27,24 7610 DATA 14,7,14,5,18,5,18,11,14,11,14,9,0,0 7620 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7630 DATA "Bedroom" 7650 DATA 16,6,15,8,17,10,15,10 7660 DATA 5,18,11,14 7700 DATA 26,21,31,25 7710 DATA 14,7,14,5,18,5,18,11,14,11,14,9,0,0 7720 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7730 DATA "Bedroom" 7750 DATA 16,6,15,8,17,10,15,10 7760 DATA 5,18,11,14 7800 DATA 29,25,31,0 7810 DATA 12,7,12,5,8,5,8,11,12,11,12,9,0,0 7820 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7830 DATA "Bedroom" 7850 DATA 10,6,9,8,9,10,11,8 7860 DATA 5,12,11,8 7900 DATA 30,24,28,0 7910 DATA 12,7,12,5,8,5,8,11,12,11,12,9,0,0 7920 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 7930 DATA "Bedroom" 7950 DATA 10,6,9,8,9,10,11,8 7960 DATA 5,12,11,8 8000 DATA 0,23,29,0 8010 DATA 22,3,22,12,22,10,18,10,18,16,22,16,22,14,22,18,-24,-18,24,17,30,17,-30,-15,24,15,24,3,0,0 8020 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8030 DATA "Bedroom" 8050 DATA 19,15,19,13,20,11,21,13 8060 DATA 10,22,16,18 8100 DATA 25,18,16,0 8110 DATA 8,10,12,10,-14,-10,19,10,19,16,8,16,8,10,0,0 8120 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8130 DATA "Large Bedroom" 8150 DATA 10,13,13,14,13,11,18,12 8160 DATA 10,19,16,8 8200 DATA 34,35,22,33 8210 DATA 6,11,14,11,14,15,6,15,6,11,0,0 8220 DATA VAL "8",VAL "11",VAL "8",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8230 DATA "Secret lab" 8250 DATA 13,14,8,13,8,12,8,12 8260 DATA 11,14,15,6 8300 DATA 0,34,23,0 8310 DATA 2,18,2,2,7,2,-7,-4,4,4,4,18,0,0 8320 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8330 DATA "Hallway" 8350 DATA 3,18,3,3,3,4,6,3 8360 DATA 2,7,18,2 8400 DATA 0,35,32,33 8410 DATA 2,18,2,2,11,2,11,11,7,11,7,4,4,4,4,18,0,0 8420 DATA 0,0,0,0,0,0,8,11,8,0,0,0 8430 DATA "Labratory" 8450 DATA 8,10,8,3,10,6,9,9 8460 DATA 2,11,11,7 8500 DATA 0,37,22,34 8510 DATA 17,17,17,15,15,15,15,1,29,1,29,5,-29,-7,29,15,19,15,19,17,0,0 8520 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8530 DATA "theatre room" 8550 DATA 18,14,20,10,24,3,28,6 8560 DATA 1,29,17,15 8600 DATA 35,39,15,22 8610 DATA 3,12,14,12,14,11,-14,-15,14,14,3,14,0,0 8620 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8630 DATA "Hallway" 8650 DATA 6,13,3,13,9,13,13,13 8660 DATA 12,12,14,3 8700 DATA 0,0,39,35 8710 DATA 15,16,15,8,-15,-6,15,2,29,2,29,14,17,14,17,16,0,0 8720 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8730 DATA "Servants room" 8750 DATA 16,14,16,7,22,5,26,12 8760 DATA 2,29,14,15 8800 DATA 37,0,3,39 8810 DATA 15,5,15,7,17,7,17,2,29,2,29,12,17,12,17,9,15,9,15,11,0,0 8820 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8830 DATA "Kitchen" 8850 DATA 20,12,18,8,27,4,26,10 8860 DATA 2,29,12,17 8900 DATA 37,38,40,36 8910 DATA 10,7,13,7,13,5,-15,-5,15,7,17,7,-17,-9,15,9,15,16,-13,-16,13,9,10,9,0,0 8920 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 8930 DATA "Intersection" 8950 DATA 14,16,10,8,14,5,17,8 8960 DATA 5,17,16,10 9000 DATA 39,0,201,15 9010 DATA 12,2,12,4,10,4,10,13,10,11,16,11,16,13,16,4,14,4,14,2,0,0 9020 DATA VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0",VAL "0" 9030 DATA "Stairway" 9050 DATA 13,11,11,8,13,3,15,8 9060 DATA 2,16,11,10 9200 DATA 22,5,16,10,22,8,18,5,28,4,14,11,11,11,8,17,13,12,11,3,10,7,10,12,16,16,9,12,16,9,29,4,24,6,6,4,20,6,16,6,13,12,12,10,23,11,12,8,13,9,16,6,16,6,10,6,10,6,19,12,18,14,13,12,3,13,9,7,22,4,9,13,27,4,26,5,14,15,13,7 9300 DATA "Giant Ant",6,2,3,"Giant Beetle",10,2,4,"Madman",8,1,4,"Elf",10,1,5,"Pigman",6,1,5 9305 DATA "Goblin",6,1,6,"Thief",8,1,6,"Giant Rat",3,1,7,"Skeleton",6,1,7,"Wild Dog",4,1,7 9310 DATA "sm diamonds","lg diamonds","sm rubies","lg rubies","gold statues","slvr statues","brnz statues","pearls","gold rings","saphires","Bronze key","Silver key","Gold key","Crystal key","The Crown","sword","shield","helmet","armor","jumping/ring","flame/scroll","teleport/gem","protect/ring","arrows","potions" ```