The Crown

Products: The Crown
Developer(s): Brian Walker
Date: 1983
Type: Program
Platform(s): TS 2068
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 31003199.

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 35013530 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 76007760 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.

Content

Appears On

Related Products

The Crown has been stolen by an evil wizard! It is up to you, the great adventurer, to restore the...

Related Articles

Related Content

Image Gallery

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 NMX<WB OR NMX>EB OR NMY>SB OR NMY<NB THEN GO TO VAL "610"
  550 IF POINT (nmx*VAL "8"+VAL "3",(VAL "21"-nmy)*VAL "8"+VAL "4") THEN LET NMX=MX: LET NMY=MY: RETURN 
  560 PRINT AT MY,MX;" "
  599 LET MY=NMY: LET MX=NMX
  600 RETURN 
  610 LET RM=E(DF)
  615 IF RM=VAL "0" THEN GO TO VAL "3700"
  620 IF RM>VAL "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")<VAL "2" THEN GO TO VAL "980"
  900 LET NCX=CX+SGN (MX-CX)*(ABS (MX-CX)>=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 hp<VAL "10" THEN PRINT FLASH VAL "1";AT VAL "0",VAL "14";hp; FLASH VAL "0";" ": GO TO VAL "1021"
 1020 PRINT AT VAL "0",VAL "14";HP;" "
 1030 RETURN 
 1100 IF NOT I(VAL "24") THEN PRINT AT VAL "21",VAL "0";"None left      ": RETURN 
 1103 LET i(VAL "24")=i(VAL "24")-VAL "1"
 1104 IF m(rm)=VAL "0" THEN LET i(VAL "24")=i(VAL "24")+1: PRINT AT VAL "21",VAL "0";"Don't waste 'em": PAUSE VAL "2": RETURN 
 1105 LET AY=MY: LET AX=MX
 1110 FOR I=VAL "1" TO VAL "30"
 1120 LET NAX=AX+(DF=VAL "2")-(DF=VAL "4")
 1130 LET NAY=AY+(DF=VAL "3")-(DF=VAL "1")
 1140 IF NAX<WB OR NAX>EB OR NAY<NB OR NAY>SB 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 (hp<VAL "10");AT VAL "0",VAL "14";hp;" ": PRINT AT VAL "21",VAL "0";"Feels good     "
 2345 FOR i=VAL "1" TO VAL "200": NEXT i
 2350 RETURN 
 2400 CLS : LET monster=m(rm): LET m(rm)=VAL "0": LET OMX=MX: LET OMY=MY
 2405 PRINT AT VAL "0",VAL "12";"INVENTORY": OVER VAL "1": PRINT AT VAL "0",VAL "12";"_________": OVER VAL "0": PRINT 
 2410 PRINT "Max life pts ";MHP,: IF I(VAL "16") THEN PRINT " Sword ";: IF i(VAL "16")>VAL "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 (HP<VAL "10");HP; FLASH VAL "0";"  "
 2710 RESTORE (VAL "5000"+RM*VAL "100")
 2720 FOR I=VAL "1" TO VAL "4"
 2730 READ E(I)
 2740 NEXT I
 2750 IF N(VAL "40"*(lv-VAL "1")+RM,VAL "1") THEN PRINT AT Y(RM),X(RM);CHR$ VAL "16"+CHR$ VAL "6"+CHR$ VAL "160"
 2760 READ X,Y: PLOT x*VAL "8"+VAL "3",(VAL "21"-y)*VAL "8"+VAL "4"
 2770 LET OX=X: LET OY=Y: READ X,Y
 2779 IF X=VAL "0" AND Y=VAL "0" AND NOT waterflag THEN PLOT ox*VAL "8"+VAL "4",(VAL "21"-oy)*VAL "8"+VAL "5"
 2780 IF X=VAL "0" AND Y=VAL "0" THEN GO TO VAL "2820"
 2790 IF X<VAL "0" AND Y<VAL "0" THEN LET X=-X: LET Y=-Y: PLOT ox*VAL "8"+VAL "4",(VAL "21"-oy)*VAL "8"+VAL "5": PLOT x*VAL "8"+VAL "3",(VAL "21"-y)*VAL "8"+VAL "4": GO TO VAL "2770"
 2795 IF X<0 THEN PAPER 5: LET X=-X: LET waterflag=1
 2796 IF Y<0 THEN PAPER 7: LET Y=-Y: LET waterflag=0
 2797 IF waterflag AND ox=x THEN FOR i=oy TO y STEP (y>oy)-(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)-(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"

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top