'     THE WONDERFUL WORLD OF EAMON DELUXE (v2)
'                BY FRANK BLACK
'
'   A COMPUTERIZED FANTASY ROLE-PLAYING SYSTEM
' BASED UPON THE APPLE II VERSION BY DONALD BROWN,
'    JOHN NELSON, TOM ZUCHOWSKI, & FRANK
'
'              BASE DUNGEON PROGRAM v3.0
'
' (EDX v2 conversion 16 MAY 1999)
' Update: 11 APR 2002
'
' DharmaQuest              By Roger Pender
'
' Converted from Apple II Eamon to Eamon Deluxe by Frank Black, Feb 97

DECLARE SUB Main ()

TYPE DESC
  TEXT AS STRING * 253
END TYPE
DIM SHARED DS AS DESC
'
TYPE ROOM
  RNAME AS STRING * 79: D1 AS INTEGER: d2 AS INTEGER: D3 AS INTEGER
  D4 AS INTEGER: D5 AS INTEGER: D6 AS INTEGER: D7 AS INTEGER: D8 AS INTEGER
  D9 AS INTEGER: D10 AS INTEGER: Light AS INTEGER
END TYPE
DIM SHARED rm AS ROOM
'
TYPE ARTIFACT
  ARTNAME AS STRING * 35: AD1 AS INTEGER: AD2 AS INTEGER: AD3 AS INTEGER:
  AD4 AS INTEGER: AD5 AS INTEGER: AD6 AS INTEGER: AD7 AS INTEGER:
  AD8 AS INTEGER
END TYPE
DIM SHARED art AS ARTIFACT
'
TYPE MONSTER
  MNAME AS STRING * 35: MD1 AS INTEGER: MD2 AS INTEGER: MD3 AS INTEGER:
  MD4 AS INTEGER: MD5 AS INTEGER: MD6 AS INTEGER: MD7 AS INTEGER:
  MD8 AS INTEGER: MD9 AS INTEGER: MD10 AS INTEGER: MD11 AS INTEGER
  MD12 AS INTEGER: MD13 AS INTEGER
END TYPE
DIM SHARED mon AS MONSTER
'
TYPE RECORD
  CNAME AS STRING * 40: Status AS INTEGER: A1 AS INTEGER: a2 AS INTEGER
  a3 AS INTEGER: SP1 AS INTEGER: SP2 AS INTEGER: SP3 AS INTEGER
  SP4 AS INTEGER: WA1 AS INTEGER: WA2 AS INTEGER: WA3 AS INTEGER
  WA4 AS INTEGER: WA5 AS INTEGER: ae AS INTEGER: sex AS INTEGER: gold AS LONG
  bank AS LONG: ac AS INTEGER: WN1 AS STRING * 20: WN2 AS STRING * 20
  WN3 AS STRING * 20: WN4 AS STRING * 20: WCOMPLX1 AS INTEGER
  WCOMPLX2 AS INTEGER: WCOMPLX3 AS INTEGER: WCOMPLX4 AS INTEGER
  WTYPE1 AS INTEGER: WTYPE2 AS INTEGER: WTYPE3 AS INTEGER: WTYPE4 AS INTEGER
  WDICE1 AS INTEGER: WDICE2 AS INTEGER: WDICE3 AS INTEGER: WDICE4 AS INTEGER
  WSIDES1 AS INTEGER: WSIDES2 AS INTEGER: WSIDES3 AS INTEGER
  WSIDES4 AS INTEGER
END TYPE
DIM SHARED z AS RECORD
'
DIM SHARED a, a$, a2, ac, ae, aname$, ar, bank, c, ch, cz$, d, d2, db, df, die
DIM SHARED ea, em, f, gold, ha, hit, k, l, ls, lt, m, mc, mr%, na, naf, nc
DIM SHARED nd, ne, nh, nl, nm, nr, nw, nx, odds, of, q$, r, r2, r3, rec, rl
DIM SHARED ro, s, s$, s2$, sex, sh, SL, Speed, suc, sy, sy$, ta, tp, up
DIM SHARED v$, ver, w, w2, wh, wt, x, xm, adj1, adj2, adj3, adj4
'
'  Set up variable table
'
OPEN "NAME.DAT" FOR INPUT AS #1
INPUT #1, nr, naf, ne, nm, aname$, nd, ver
CLOSE : nr = 72: naf = 93: nm = 36: ne = 21
adj1 = 168: adj2 = 188: adj3 = 92: adj4 = 38: na = naf + 6
a = 0: m = a: ro = m: na = naf + 6
'
OPEN "HINTDIR.DAT" FOR INPUT AS #1
INPUT #1, nh: DIM SHARED h$(nh), h%(nh, 2)
FOR r = 1 TO nh
   INPUT #1, h$(r), h%(r, 1), h%(r, 2)
NEXT: CLOSE
'
READ nc
DIM SHARED a$(na), a%(na, 8), bv$(5, 2), c$(nc), d%(200), m$(nm), m%(nm, 15)
DIM SHARED r%(nr, 11), r$(nr), rb$(5, 1), sa%(4), sa$(4), sex$(2), sp%(4)
DIM SHARED sp$(4), sm$(3), t(4), wa%(5), wp%(na), wp$(5), gm$(5)
'---------------------------------------------------------------------------
'  Input data from files
'
Init:
OPEN "ROOMS.DAT" FOR RANDOM AS #1 LEN = 101
OPEN "ARTIFACT.DAT" FOR RANDOM AS #2 LEN = 51
OPEN "MONSTERS.DAT" FOR RANDOM AS #3 LEN = 61
OPEN "NEW-MEAT" FOR RANDOM AS #4 LEN = 200
FOR c = 1 TO nc
   READ c$(c)
NEXT
'
'   Rooms
'
FOR r = 1 TO nr
   GET #1, r + adj1, rm
   r$(r) = RTRIM$(rm.RNAME)
   r%(r, 1) = rm.D1: r%(r, 2) = rm.d2: r%(r, 3) = rm.D3: r%(r, 4) = rm.D4
   r%(r, 5) = rm.D5: r%(r, 6) = rm.D6: r%(r, 7) = rm.D7: r%(r, 8) = rm.D8
   r%(r, 9) = rm.D9: r%(r, 10) = rm.D10: r%(r, 11) = rm.Light
NEXT
'
'   Artifacts
'
FOR a = 1 TO naf
   GET #2, a + adj2, art
   a$(a) = RTRIM$(art.ARTNAME): a%(a, 1) = art.AD1: a%(a, 2) = art.AD2
   a%(a, 3) = art.AD3: a%(a, 4) = art.AD4: a%(a, 5) = art.AD5
   a%(a, 6) = art.AD6: a%(a, 7) = art.AD7: a%(a, 8) = art.AD8
NEXT
'
'   Monsters
'
FOR m = 1 TO nm
   GET #3, m + adj3, mon
   m$(m) = RTRIM$(mon.MNAME): m%(m, 1) = mon.MD1: m%(m, 2) = mon.MD2
   m%(m, 3) = mon.MD3: m%(m, 4) = mon.MD4: m%(m, 5) = mon.MD5
   m%(m, 6) = mon.MD6: m%(m, 7) = mon.MD7: m%(m, 8) = mon.MD8
   m%(m, 9) = mon.MD9: m%(m, 10) = mon.MD10: m%(m, 11) = mon.MD11
   m%(m, 12) = m%(m, 3)
NEXT
'
'   PLAYER
'
a = 1
GET #4, a, z
m$(0) = RTRIM$(z.CNAME): stat = z.Status: m%(0, 1) = z.A1: m%(0, 2) = z.a2
ch = z.a3: sp%(1) = z.SP1: sp%(2) = z.SP2: sp%(3) = z.SP3: sp%(4) = z.SP4
wa%(1) = z.WA1: wa%(2) = z.WA2: wa%(3) = z.WA3: wa%(4) = z.WA4: wa%(5) = z.WA5
ae = z.ae: sex = z.sex: gold = z.gold: bank = z.bank: ac = z.ac
a = naf + 1: m = a + 1: k = a + 2: w = a + 3
a$(a) = RTRIM$(z.WN1): a$(m) = RTRIM$(z.WN2): a$(k) = RTRIM$(z.WN3)
a$(w) = RTRIM$(z.WN4): a%(a, 5) = z.WCOMPLX1: a%(m, 5) = z.WCOMPLX2
a%(k, 5) = z.WCOMPLX3: a%(w, 5) = z.WCOMPLX4: a%(a, 6) = z.WTYPE1
a%(m, 6) = z.WTYPE2: a%(k, 6) = z.WTYPE3: a%(w, 6) = z.WTYPE4
a%(a, 7) = z.WDICE1: a%(m, 7) = z.WDICE2: a%(k, 7) = z.WDICE3
a%(w, 7) = z.WDICE4: a%(a, 8) = z.WSIDES1: a%(m, 8) = z.WSIDES2
a%(k, 8) = z.WSIDES3: a%(w, 8) = z.WSIDES4
CLOSE
FOR a = 1 TO 4
   sa%(a) = sp%(a)
NEXT
'
na = naf + 4
FOR a = naf + 1 TO na
   a$ = UCASE$(LEFT$(a$(a), 4))
   IF a$ <> "NONE" AND a$ <> "" THEN
     m = ABS((a%(a, 7) * a%(a, 8) > 25))
     a%(a, 2) = 2 + m: a%(a, 1) = 20 * (m + 1)
     a%(a, 3) = 2: wt = wt + 2: : a%(a, 4) = -1
   END IF
NEXT
m%(0, 7) = ac / 2 + ABS((sh > 0)): m%(0, 11) = 3
m%(0, 8) = -1: IF na > naf THEN m%(0, 8) = naf + 1
IF ae < ac * ac THEN ea = ae - ac * ac
'
'   Make players armor artifacts
'
FOR a = 1 TO 4: READ wp$(a): NEXT
a = INT(ac / 2): IF a > 4 THEN a = 4
IF a THEN
  na = na + 1: a$(na) = wp$(a) + " armor": a%(na, 2) = 11: a%(na, 3) = a * 7
  a%(na, 4) = -999: wt = wt + a%(na, 3): ar = na
  a%(na, 5) = ac - ABS(ac / 2 <> INT(ac / 2))
END IF
a = ABS((INT(ac / 2) <> ac / 2))
IF a THEN
  na = na + 1: sh = na: a$(na) = "shield": a%(na, 2) = 11: a%(na, 3) = 10
  a%(na, 4) = -999: wt = wt + 10: a%(na, 5) = 1
END IF
'
'   Check for duplicate Art. names
'
CheckDup:
r = 0
FOR a = naf + 1 TO na
   a$(a) = LTRIM$(RTRIM$(a$(a)))
   FOR m = 1 TO na
      IF m <> a AND LCASE$(a$(m)) = LCASE$(a$(a)) THEN
        a$(a) = a$(a) + "#": r = 1
      END IF
   NEXT
NEXT
IF r = 1 THEN GOTO CheckDup
'
'    Set starting variable values
'
ro = 1: r2 = 1: r3 = 1: q$ = CHR$(34)
sex$(0) = "Male": sex$(1) = "Female"

FOR a = 0 TO 5
   FOR a2 = 0 TO 2: READ bv$(a, a2): NEXT
NEXT
FOR a = 0 TO 5
   FOR a2 = 0 TO 1: READ rb$(a, a2): NEXT
NEXT
FOR a = 1 TO 3: READ sm$(a): NEXT
FOR a = 1 TO 5: READ wp$(a): NEXT
FOR a = naf + 1 TO na: a%(a, 0) = 1: NEXT
IF nd = 6 THEN
  FOR c = 7 TO 10: c$(c) = "": NEXT
END IF
OPEN "ROOMS.DSC" FOR RANDOM AS #10 LEN = 255
OPEN "ARTIFACT.DSC" FOR RANDOM AS #11 LEN = 255
OPEN "MONSTERS.DSC" FOR RANDOM AS #12 LEN = 255
OPEN "EFFECT.DSC" FOR RANDOM AS #13 LEN = 255
'
FOR a = 45 TO 56: a%(a, 0) = 1: NEXT
DIM SHARED LastWords$(10)
FOR a = 1 TO 10: READ LastWords$(a): NEXT
db = 58
'
' Randomize the RND seed
'
CLS : PRINT "(Base dungeon prog. v3.0)": LOCATE 12: COLOR 2
PRINT "Welcome to the Eamon Deluxe fantasy gaming system!"
PRINT : PRINT SPC(13); "Hit any key to begin.": a$ = INKEY$
DO
  a = RND
LOOP UNTIL INKEY$ <> ""
CLS : LOCATE 24
'----------------------------------------------------------------------------
' Start the game
'
CALL Main
'
'----------------------------------------------------------------------------
' Game returns here when finished
'
'  Delete player files and return to Main Hall
'
ExitRtn:
CLOSE : OPEN "GAMEDIR.DAT" FOR OUTPUT AS #1: PRINT #1, -1
FOR m = 1 TO 5: PRINT #1, "(none)": NEXT: CLOSE
FOR m = 1 TO 5
   a$ = "GAME" + LTRIM$(RTRIM$(STR$(m))) + ".SAV"
   OPEN a$ FOR OUTPUT AS #1: PRINT #1, 1: CLOSE : KILL a$
NEXT
KILL "NEW-MEAT"
'
' Update player record data
'
r = z.Status
z.CNAME = m$(0): z.Status = 1: z.A1 = m%(0, 1): z.a2 = m%(0, 2)
IF die = 1 THEN z.Status = 2
z.a3 = ch: z.SP1 = sp%(1): z.SP2 = sp%(2): z.SP3 = sp%(3): z.SP4 = sp%(4)
z.WA1 = wa%(1): z.WA2 = wa%(2): z.WA3 = wa%(3): z.WA4 = wa%(4): z.WA5 = wa%(5)
z.ae = ae: z.sex = sex: z.gold = gold: z.bank = bank: z.ac = ac
a = wp%(1): m = wp%(2): k = wp%(3): w = wp%(4)
z.WN1 = a$(a): z.WN2 = a$(m): z.WN3 = a$(k): z.WN4 = a$(w)
z.WCOMPLX1 = a%(a, 5): z.WCOMPLX2 = a%(m, 5): z.WCOMPLX3 = a%(k, 5)
z.WCOMPLX4 = a%(w, 5): z.WTYPE1 = a%(a, 6): z.WTYPE2 = a%(m, 6)
z.WTYPE3 = a%(k, 6): z.WTYPE4 = a%(w, 6): z.WDICE1 = a%(a, 7)
z.WDICE2 = a%(m, 7): z.WDICE3 = a%(k, 7): z.WDICE4 = a%(w, 7)
z.WSIDES1 = a%(a, 8): z.WSIDES2 = a%(m, 8): z.WSIDES3 = a%(k, 8)
z.WSIDES4 = a%(w, 8)
CLOSE
'
' Return to Test Bench
'
IF r < 1 THEN CHDIR "..": CHDIR "DD": RUN "DDMENU"
'
' Return to Main Hall
'
CHDIR "..": CHDIR "MAIN"
OPEN "PLAYERS.DAT" FOR RANDOM AS #1 LEN = 200
PUT #1, r, z
CLOSE
OPEN "PLAYER" FOR OUTPUT AS #2: WRITE #2, r: CLOSE
IF die <> 1 THEN RUN "MAINHALL"
CHDIR "..": RUN "EAMONDX"
'
DATA 44,north,south,east,west,up,down,ne,nw,se,sw,flee,close,drink,drop,eat
DATA examine,get,light,open,put,read,ready,remove,use,wear,attack,blast,free
DATA give,heal,request,smile,inventory,look,say,speed,power,status
DATA hints,save,restore,quit,help,pray
'
DATA leather,chain,plate,magic
'
DATA lunges,tears,claws,swings,chops,swings,shoots,shoots,shoots
DATA swings,swings,swings,stabs,lunges,jabs,swings,chops,stabs
'
DATA Missed,Missed,Parried,Missed,Missed,Missed,Parried,Missed,Parried,Missed
DATA Parried,Missed
'
DATA growl,look,smile
'
DATA axe,missile weapon,club,spear,sword
'
DATA "whispers a prayer to Odin","offers his life to Wotan"
DATA "snarls a curse at his killer"
DATA "thinks of the 20 gold pieces still owed to the tavern keeper"
DATA "sees the Valkyrie coming to take him to Valhalla"
DATA "prays to Poseidon to avenge him"
DATA "calls on Apollo to strike down his killer"
DATA "thinks of home and closes his eyes"
DATA "laughs at his attacker"
DATA "thinks of Sieglinde, the blonde adventuress from the Main Hall"

SUB Main
GOTO Move2
'----------------------------------------------------------------------------
' Main Loop
'
Main0:
GOSUB Lp4

Main:
IF die = 1 THEN GOTO EndGame
COLOR 12: GOSUB Lp1: IF ls = 0 THEN GOTO Main2A
IF a%(ls, 5) = -1 THEN GOTO Main2A
a%(ls, 5) = a%(ls, 5) - 1: m = a%(ls, 5)
IF m = 0 THEN
  COLOR 2: PRINT "Your "; a$(ls); " has gone out!": COLOR 12
  ls = 0: lt = nl: GOTO Main0
END IF

Main1A:
IF m < 10 THEN
  PRINT "Your "; a$(ls); " is almost out!": GOSUB Lp4: GOTO Main2A
END IF

Main1B:
IF m < 20 THEN
  PRINT "Your "; a$(ls); " grows dim!": GOSUB Lp4
END IF

Main2A:
IF Speed > 0 THEN
  Speed = Speed - 1
  IF Speed = 0 THEN
    m%(0, 2) = m%(0, 2) / 2
    PRINT "Your speed spell has just expired!": GOSUB Lp4
  END IF
END IF
FOR a = 1 TO 4
   IF sa%(a) < sp%(a) THEN sa%(a) = sa%(a) * 1.1
   IF sa%(a) > sp%(a) THEN sa%(a) = sp%(a)
NEXT

Main3A:
IF lt = 0 THEN
    PRINT "It's too dark to see.": GOSUB Lp4: GOTO Com1
  END IF
'
' Give room name and description
'
Main3B:
PRINT "You are "; r$(ro): GOSUB Lp4
IF r%(ro, 0) = 0 THEN
  r%(ro, 0) = 1: r = ro: GOSUB DiskRead
END IF
'
' List monsters in room
'
Main4A:
m2 = 1
FOR m = 1 TO nm
   IF m%(m, 5) = ro THEN
     IF m%(m, 0) = 0 THEN
       IF m2 = 0 THEN GOSUB Lp1
       m%(m, 0) = 1: r = m + 800: GOSUB DiskRead: m2 = 1
       IF m%(m, 3) = 1 THEN
         PRINT m$(m); " is here.": GOSUB Lp4: GOTO Main4B
       END IF
       IF m%(m, 3) > 1 THEN
         PRINT LTRIM$(STR$(m%(m, 3))); " "; m$(m); "s are here."
         GOSUB Lp4: : GOTO Main4B
       END IF
     END IF
     m2 = 0
     IF m%(m, 3) = 1 THEN
       PRINT m$(m); " is here.": GOSUB Lp2
     END IF
     IF m%(m, 3) > 1 THEN
       PRINT LTRIM$(STR$(m%(m, 3))); " "; m$(m); "s are here.": GOSUB Lp2
     END IF
   END IF
Main4B:
NEXT
'
' List artifacts in room
'
Main5A:
f = 0
FOR a = 1 TO na
   IF a%(a, 4) <> ro THEN GOTO Main5B
   f = f + 1
   IF a > naf THEN
     IF m2 = 0 AND f = 0 THEN GOSUB Lp1
     PRINT "Your "; a$(a); " is here.": GOSUB Lp2: m2 = 1: GOTO Main5B
   END IF
   IF a%(a, 0) = 0 THEN
     IF m2 = 0 THEN GOSUB Lp1
     a%(a, 0) = 1: r = a + 400: GOSUB DiskRead: m2 = 1
     PRINT "You see "; a$(a); ".": GOSUB Lp2
     IF a%(a, 2) = 4 AND a%(a, 6) = 1 THEN GOSUB Inv4
     GOSUB Lp1: GOTO Main5B
   END IF
   PRINT "You see "; a$(a); ".": GOSUB Lp2: m2 = 0
   IF a%(a, 2) = 4 AND a%(a, 6) = 1 THEN GOSUB Inv4
Main5B:
NEXT
'
' Get command
'
Com0:
GOSUB Lp1
Com1:
LINE INPUT "Your command?->"; a$: a$ = RTRIM$(LTRIM$(LCASE$(a$)))
l = 0: GOSUB Lp1
IF a$ = "" THEN
  a$ = cz$: LOCATE CSRLIN - 2, 16: PRINT a$: PRINT
END IF
'
' Parse command
'
v$ = "": s$ = "": s2$ = ""
IF a$ = "" THEN GOTO Err0
cz$ = a$
FOR a = 2 TO LEN(a$)
   IF MID$(a$, a, 1) = " " THEN
     v$ = LTRIM$(RTRIM$(LEFT$(a$, a - 1)))
     s$ = LTRIM$(RTRIM$(MID$(a$, a + 1))): a = LEN(a$)
   END IF
NEXT
IF v$ = "" THEN v$ = a$: GOTO Com2
'
FOR a = 1 TO LEN(s$)
   zz$ = MID$(s$, a, 3)
   IF zz$ = "to " OR zz$ = "on " OR zz$ = "in " THEN
     s2$ = LTRIM$(RTRIM$(MID$(s$, a + 3)))
     s$ = LTRIM$(RTRIM$(LEFT$(s$, a - 1)))
   END IF
NEXT: IF s2$ <> "" THEN GOTO Com2
FOR a = 1 TO LEN(s$)
   zz$ = MID$(s$, a, 5)
   IF zz$ = "from " OR zz$ = "with " THEN
     s2$ = LTRIM$(RTRIM$(MID$(s$, a + 5)))
     s$ = LTRIM$(RTRIM$(LEFT$(s$, a - 1)))
   END IF
NEXT
'
Com2:
a = LEN(v$): c = 0
FOR k = 1 TO nc
   IF v$ = LEFT$(c$(k), a) OR v$ = RIGHT$(c$(k), a) THEN
     c = k: k = nc
   END IF
NEXT
IF c = 0 THEN GOTO Err0
COLOR 3
Com3:
ON c GOTO Move, Move, Move, Move, Move, Move, Move, Move, Move, Move, Flee
ON c - 11 GOTO ItemClose, Drink, Drop, Drink, Examine, ItemGet, Light, ItemOpen
ON c - 19 GOTO ItemPut, ItemRead, Ready, Remove, Use, Wear, Attack, Blast
ON c - 27 GOTO Free, Give, Heal, Request, Smile, Inventory, Look, Say
ON c - 35 GOTO Speed, Power, Status, Hints, GameSave, GameRestore, Quit
ON c - 42 GOTO Help, Pray
'---------------------------------------------------------------------------
'  Pick foes
'
Pfoe:
IF die = 1 THEN GOTO EndGame
IF t(1) < 0 THEN t(1) = 0
IF t(1) = 0 THEN GOTO Pfoe3
GOSUB Lp1: m = 0: m9 = 1

Pfoe0:
m = m + 1
IF m%(m, 5) <> ro THEN GOTO Pfoe2A
IF m%(m, 11) = 2 THEN GOTO Pfoe2A
'
'  Will monster flee?
'
GOSUB RollDice
IF m%(m, 13) > 0 THEN rl = rl + 10
IF m%(m, 13) <= 0 AND m%(m, 12) > m%(m, 3) THEN rl = rl + 10
IF m%(m, 13) + 4 >= m%(m, 1) THEN rl = rl + 10
IF rl > m%(m, 4) THEN mr% = 1
IF mr% = 0 OR m%(m, 4) > 99 THEN GOTO SkipFlee
'
mr% = INT(RND * m%(m, 3)) + 1
IF m%(m, 3) > 1 THEN PRINT LTRIM$(RTRIM$(STR$(mr%))); " ";
PRINT m$(m);
PRINT MID$("s flee! flees!", ABS(mr% = 1) * 7 + 1, 7): GOSUB Lp4
'
IF nx = 0 THEN PRINT "But can't find an exit!": GOSUB Lp4: GOTO Pfoe2A
'
IF mr% = m%(m, 3) THEN
  GOSUB Flee1: m%(m, 5) = r2: GOSUB EnemyCheck: GOTO Pfoe2A
END IF
m%(m, 3) = m%(m, 3) - mr%: r3 = ro: GOSUB EnemyCheck
'
'  Find an enemy to attack
'
SkipFlee:
mc = 0: XMC = 1: IF m%(m, 3) > 1 THEN XMC = m%(m, 3)
of = m: df = 0: IF XMC > 8 THEN XMC = 8
'
Pfoe0A:
mc = mc + 1: df = 0
IF mc > XMC THEN GOTO Pfoe2A
IF m%(m, 11) > 1 THEN GOTO Pfoe1
'
' Unfriendly monsters find an enemy to attack
'
IF t(3) = m%(0, 1) THEN GOTO Pfoe2
FOR m2 = 1 TO nm
   IF m%(m2, 5) = ro AND m%(m2, 11) = 3 AND RND < .45 THEN
     df = m2: m2 = nm
   END IF
NEXT: GOTO Pfoe2
'
' Friendly monsters pick an enemy
'
Pfoe1:
FOR m2 = 1 TO nm
   IF m%(m2, 5) = ro AND m%(m2, 11) = 1 THEN
     df = m2
     IF df = nm OR RND(1) < .45 THEN m2 = nm
   END IF
NEXT: IF df = 0 THEN GOTO Pfoe2A
'
'  Send em' off to war
'
Pfoe2:
GOSUB Battle: IF die = 1 THEN GOTO EndGame
IF t(1) > 0 THEN GOTO Pfoe0A
'
Pfoe2A:
IF m < nm THEN GOTO Pfoe0
'
'  Every-round events
'
Pfoe3:
m9 = 0
IF t(1) = 0 THEN
  FOR of = 1 TO nm
     IF m%(of, 5) = ro AND m%(of, 8) < 0 THEN GOSUB GetWep
  NEXT
END IF
'
' Add your own special stuff here
'
GOTO Main
'---------------------------------------------------------------------------
' **** Movement commands ****
'
' **** Directions ****
'
Move:
r2 = r%(ro, c)
IF t(1) AND (nl > 0 OR lt > 0) THEN
  PRINT "You can't do that with unfriendlies about!": GOTO Main0
END IF

MoveCheck:
IF r2 > 1000 THEN GOTO Move1
IF r2 > 0 AND r2 <= nr THEN GOTO Move2
'
' Add special (negative) moves here
'
IF r2 = -5 OR r2 = -6 THEN
  r = 20 + ABS(r2) - 5: GOSUB Effect: die = 1: GOTO EndGame
END IF
IF r2 = -12 THEN PRINT "An invisible barrier blocks your path!": GOTO Lp12
IF r2 = -23 THEN
  PRINT "The city gates have been locked and secured tightly.": GOTO Main0
END IF
IF r2 = -63 THEN
  PRINT "You must READ the inscription and answer the riddle to leave."
  GOTO Lp12
END IF
IF r2 = -999 THEN
  PRINT "You successfully ride off into the sunset.": DI = 0: GOTO EndGame
END IF
PRINT "You can't go that way!": GOTO Main0
'
' Doors/Gates
'
Move1:
a = r2 - 1000
IF a%(a, 6) = 0 AND a%(a, 7) = 0 AND a%(a, 8) = 0 THEN
  r2 = a%(a, 5): GOTO MoveCheck
END IF
IF a%(a, 8) = 1 THEN r2 = 0: GOTO MoveCheck
PRINT "The "; a$(a); " blocks the way!": GOTO Main0
'
' Go to another room
'
Move2:
IF ls > 0 AND ls <= na THEN IF a%(ls, 4) <> -1 THEN ls = 0
r3 = ro: ro = r2: GOSUB MoveMons: GOSUB EnemyCheck
nl = r%(ro, 11): lt = ABS(nl OR ls): nx = 0
FOR a = 1 TO nd
   nx = nx + ABS(r%(ro, a) > 0 AND r%(ro, a) <= nr AND r%(ro, a) <> ro)
NEXT
IF nl > 0 AND ls > 0 THEN
  IF a%(ls, 5) = -1 THEN GOTO Main
  PRINT "It's not dark here.  Extinguish the "; a$(ls); "?";
  GOSUB Af1: IF s$ = "y" THEN ls = 0
END IF
GOTO Main
'
' **** Flee command ****
'
Flee:
IF t(1) = 0 THEN PRINT "Calm down.": GOTO Main0
IF nx = 0 OR ro = 23 THEN PRINT "There's no place to run!": GOTO Main0
IF s$ <> "" THEN GOTO Flee2
'
Flee0:
GOSUB Flee1: GOTO Move2
'
Flee1:
r2 = r%(ro, nd * RND + 1): IF r2 < 1 OR r2 > nr OR r2 = ro THEN GOTO Flee1
RETURN
'
Flee2:
r2 = 0
FOR a = 1 TO nd
   IF LEFT$(c$(a), LEN(s$)) = s$ THEN r2 = r%(ro, a)
NEXT
IF r2 = 0 THEN GOTO Flee0
GOTO MoveCheck
'---------------------------------------------------------------------------
'  Artifact manipulation commands
'
' **** Close command ****
'
ItemClose:
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
m = a%(a, 2): k = 6 + ABS(m = 8): w = 1 - ABS(m = 8)
IF m <> 4 AND m <> 8 THEN PRINT "You can't close it.": GOTO Main0
IF a%(a, k) <> w THEN PRINT "It's not open.": GOTO Main0
GOSUB Pu0: PRINT a$; "closed.": a%(a, k) = 0 + ABS(m = 8): GOTO Lp12
'
' **** Drink & Eat commands ****
'
Drink:
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err3
IF (a = 20 OR a = 21) AND c = 15 THEN PRINT "Yuch!": GOTO Lp12
m = a%(a, 2): IF m <> 6 AND m <> 9 THEN GOTO Err3
IF a%(a, 7) = 0 THEN GOTO Err2
IF a%(a, 6) < 1 THEN PRINT "There's none left.": GOTO Lp12
'
a%(a, 6) = a%(a, 6) - 1
IF a%(a, 6) = 0 AND m = 9 THEN
  PRINT "You eat it all up.": GOSUB Lp4: GOSUB WTRem: a%(a, 4) = 0
END IF
'
m%(0, 13) = m%(0, 13) - a%(a, 5): IF m%(0, 13) < 0 THEN m%(0, 13) = 0
PRINT "You feel "; MID$("betterworse", ABS(a%(a, 5) < 0) * 6 + 1, 6); "!"
GOSUB Lp4: df = 0: d2 = 0: GOSUB Mstatus: GOTO Pfoe
'
'  **** Drop command ****
'
Drop:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Asearch: IF s$ = "all" THEN GOTO Drop1
IF f = 0 THEN
  ha = -999: wh = ha: em = ha: GOSUB Asearch2: IF f = 0 THEN GOTO Err1
  GOTO Give
END IF
GOSUB Drop2: GOTO Pfoe
'
Drop1:
FOR a = 1 TO na
   IF a%(a, 4) = -1 THEN GOSUB Drop2
NEXT: wt = 0: m%(0, 8) = -1: GOSUB Lp4: GOTO Pfoe
'
' Add special effects of drop here
'
Drop2:
wt = wt - a%(a, 3): a%(a, 4) = ro: IF a = m%(0, 8) THEN m%(0, 8) = -1
GOSUB Pu0: PRINT a$; "dropped.": GOSUB Lp2
IF a = ls THEN
  ls = 0: lt = nl: GOSUB Lp1: PRINT "The "; a$(a); " goes out.": GOTO Lp4
END IF
RETURN
'
'  **** Examine command ****
'
Examine:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: IF LEFT$(s$, 4) = "room" THEN s$ = "": GOTO Look
GOSUB Asearch0
IF f = 0 THEN
  ha = -999: wh = ha: em = ha: GOSUB Asearch2: IF f = 0 THEN GOTO Examine1
END IF
'
' ** Examine artifact **
'
IF a%(a, 4) = em AND em <> -999 THEN a%(a, 4) = ro
IF a%(a, 2) = 8 THEN a%(a, 8) = 0
Examine0:
IF a > naf THEN PRINT "This is your "; a$(a); ".": GOTO Lp12
IF a%(a, 2) = 12 THEN GOSUB ItemGet3: GOTO Main
r = a + 400: GOSUB DiskRead: a%(a, 0) = 1
IF a%(a, 2) = 6 OR a%(a, 2) = 9 THEN
  PRINT "There "; MID$("are is ", ABS(a%(a, 6) = 1) * 4 + 1, 4);
  PRINT LTRIM$(RTRIM$(STR$(a%(a, 6)))); " ";
  PRINT MID$("swallowbite", ABS(a%(a, 2) = 9) * 7 + 1, 7);
  PRINT MID$("s", ABS(a%(a, 6) = 1) * 1 + 1, 1);
  PRINT " left.": GOSUB Lp4
END IF
GOTO Pfoe
'
' ** Examine monster **
'
Examine1:
GOSUB Msearch: IF f = 0 THEN PRINT "You see nothing special.": GOTO Lp12
r = m + 800: GOSUB DiskRead: df = m: d2 = 0
IF m%(m, 3) > 1 AND m%(m, 13) = 0 THEN a$ = "They are ": GOSUB Ms1: GOTO Pfoe
GOSUB Mstatus: GOTO Pfoe
'
'  **** The Get command ****
'
ItemGet:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: IF s$ = "all" THEN GOTO ItemGet2
ha = ro: wh = ha: em = ha: GOSUB Asearch2: IF f = 0 THEN s$ = "that": GOTO Err3
IF db > 0 AND a >= db AND a <= naf THEN
  PRINT "Dead bodies are best if left alone.": GOTO Main0
END IF
GOSUB ItemGet3: GOSUB Lp4: GOTO Pfoe
'
ItemGet2:
FOR a = 1 TO na
   IF a%(a, 4) = ro THEN
     IF db > 0 AND a >= db AND a <= naf THEN GOTO ItemGet2A
     IF a%(a, 3) > 900 OR a%(a, 3) = -999 THEN GOTO ItemGet2A
     GOSUB ItemGet3
   END IF
ItemGet2A:
NEXT: GOTO Pfoe
'
ItemGet3:
a2 = a%(a, 2): f = 0
IF a = 12 THEN a%(a, 4) = 0: m%(6, 5) = ro: f = 1
IF a = 18 AND d%(3) = 0 THEN m%(16, 5) = ro: d%(3) = 1: f = 1
IF a = 19 AND d%(4) = 0 THEN m%(20, 5) = ro: d%(4) = 1: f = 1
IF f = 1 THEN GOSUB EnemyCheck: RETURN
IF a2 = 12 THEN
  GOSUB Pu0: PRINT a$; "is alive!": GOSUB Lp4
  IF a%(a, 6) > 0 THEN
    FOR x = 1 TO a%(a, 7)
       r = a%(a, 6) + 1199 + x: GOSUB DiskRead
    NEXT
  END IF
  a%(a, 4) = 0: m%(a%(a, 5), 5) = ro: r3 = ro: GOTO EnemyCheck
END IF
IF a%(a, 3) > 900 THEN PRINT "Don't be absurd.": GOTO Lp4
IF a%(a, 3) = -999 THEN PRINT "You can't get that.": GOTO Lp4
GOSUB Pu0: PRINT a$;
'
'
IF wt + a%(a, 3) > 10 * m%(0, 1) THEN PRINT "is too heavy.": GOTO Lp2
IF a2 = 10 THEN PRINT "must be freed.": GOTO Lp2
'
PRINT "taken.": a%(a, 4) = -1: wt = wt + a%(a, 3)
IF m%(0, 8) < 1 AND (a2 = 2 OR a2 = 3) THEN
   m%(0, 8) = a: GOSUB Lp1: PRINT a$(a); " readied.": GOTO Lp4
END IF
GOTO Lp2
'
' **** Light command ****
'
Light:
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
IF a%(a, 2) <> 5 THEN GOTO Err3
IF a%(a, 5) = 0 THEN PRINT "It won't light.": GOTO Lp12
IF a <> ls THEN lt = 1: ls = a: PRINT "You've lit the "; a$(a); ".": GOTO Lp12
IF a = ls THEN PRINT "Extinguish the "; a$(a); "?": GOSUB Af1
IF s$ = "y" THEN ls = 0: lt = nl
GOTO Pfoe
'
' **** Open command ****
'
ItemOpen:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
m = a%(a, 2): IF a%(a, 4) = em THEN a%(a, 4) = ro
IF a = 17 OR a = 22 THEN PRINT "That would just make a mess.": GOTO Lp12
IF a = 21 THEN PRINT "Better not, he looks really hungry.": GOTO Lp12
IF m = 8 THEN GOTO DoorOpen
IF m = 12 THEN GOSUB ItemGet3: GOTO Pfoe
IF m <> 4 AND m <> 6 AND m <> 7 AND m <> 9 THEN GOTO Err3
'
k = a%(a, 5): r = a%(a, 7): IF m = 4 THEN r = a%(a, 6)
IF r = 1 THEN PRINT "It's already open.": GOTO Lp12
'
IF m = 6 OR m = 7 OR m = 9 THEN
  a%(a, 7) = 1: a$ = "You've opened the " + a$(a) + ".": GOTO Lp9
END IF
'
' ** Open container **
'
IF k > 0 AND k <= naf THEN
  IF a%(k, 2) = 11 THEN PRINT "It's locked.": GOTO Lp12
  IF a%(k, 4) <> -1 AND a%(k, 4) <> ro THEN PRINT "It's locked.": GOTO Lp12
END IF
IF a%(a, 6) > 1 THEN PRINT "It's locked.": GOTO Lp12
'
a%(a, 5) = 0: a%(a, 6) = 1
GOSUB Pu0: PRINT a$; "opened.": GOSUB Lp4: GOSUB Inv4: GOTO Pfoe
'
' ** Open doors/gates **
'
DoorOpen:
k = a%(a, 6): IF a%(a, 7) = 0 THEN PRINT "It's already open.": GOTO Lp12
'
IF k > 0 AND k <= naf THEN
  IF a%(k, 4) <> -1 AND a%(k, 4) <> ro THEN : PRINT "It's locked.": GOTO Lp12
  a$ = "You open it with the " + a$(k) + ".": GOTO DoorOpen1
END IF
'
IF a%(a, 7) > 1 THEN PRINT "You'll have to force it open.": GOTO Lp12
IF k = -1 THEN PRINT "It won't open.": GOTO Lp12
'
a$ = "You've opened the " + a$(a) + "."
DoorOpen1:
a%(a, 6) = 0: a%(a, 7) = 0: GOTO Lp9
'
' **** Put command ****
'
ItemPut:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
a$ = "Put it in what": GOSUB CheckSub2: s$ = s2$
GOSUB ItemTake: IF a%(a, 4) <> -1 THEN GOTO Main
m = a: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
IF a = m OR a%(a, 2) <> 4 THEN s$ = "anything in that": GOTO Err3
'
f = 0: IF a%(a, 6) = 0 THEN GOTO Err2
IF a%(a, 8) < 1 THEN PRINT "You don't need to.": GOTO Lp12
IF a%(a, 7) >= a%(a, 8) THEN PRINT "It's full.": GOTO Lp12
IF a%(m, 3) > a%(a, 3) THEN PRINT "It won't fit.": GOTO Lp12
FOR k = 1 TO na
   IF a%(k, 4) = 1000 + a THEN f = f + a%(k, 3)
NEXT
IF f + a%(m, 3) > a%(a, 3) THEN PRINT "It's full.": GOTO Lp12
'
GOSUB WTRem: IF m = m%(0, 8) THEN m%(0, 8) = -1
a%(m, 4) = a + 1000: a%(a, 7) = a%(a, 7) + 1
IF m = ls THEN ls = 0: lt = nl: PRINT "(The "; a$(m); " goes out.)": GOSUB Lp4
PRINT "Done.": GOTO Lp12
'
' **** Read command ****
'
ItemRead:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
IF a%(a, 4) = em THEN a%(a, 4) = ro
IF a%(a, 2) <> 7 THEN GOTO Err3
IF a%(a, 7) = 0 THEN GOTO Err2
COLOR 2
FOR x = 1 TO a%(a, 6)
   r = a%(a, 5) + 1199 + x: GOSUB DiskRead
NEXT
IF a = 54 THEN
  LINE INPUT "   Your answer? "; s$: s$ = LTRIM$(RTRIM$(LCASE$(s$))): PRINT
  l = 1
  IF s$ = "man" OR s$ = "men" OR s$ = "people" OR s$ = "humans" THEN
    PRINT "CORRECT!!": GOSUB Lp4: IF a%(24, 0) = 0 THEN a%(24, 4) = ro
    a%(54, 4) = 0: r = 12: GOSUB Effect: r%(ro, 4) = 63: GOTO Main
  END IF
  PRINT "WRONG!!": GOSUB Lp4: IF m%(31, 0) = 0 THEN m%(31, 5) = ro
  GOSUB EnemyCheck
END IF
COLOR 3: GOTO Pfoe
'
' **** Ready command ****
'
Ready:
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err1
IF a%(a, 2) <> 2 AND a%(a, 2) <> 3 THEN
  PRINT "That isn't a weapon.": GOTO Main0
END IF
GOSUB ItemTake: IF a%(a, 4) <> -1 THEN GOTO Main
m%(0, 8) = a: GOSUB Pu0: PRINT a$; "readied.": GOSUB Lp4: GOTO Pfoe
'
' **** Remove command ****
'
Remove:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: ha = -999: wh = ha: em = ha: GOSUB Asearch2
IF f = 0 THEN GOTO Remove1
'
' ** Remove armor **
'
IF a = sh THEN m%(0, 7) = m%(0, 7) - 1: sh = 0
IF a = ar THEN m%(0, 7) = m%(0, 7) - a%(a, 5) / 2: ar = 0
a%(a, 4) = -1
GOSUB Pu0: PRINT a$; "removed.": GOTO Lp12
'
' ** Remove items from a container **
'
Remove1:
IF lt = 0 THEN GOTO Main
a$ = "From what": GOSUB CheckSub2: a$ = s$: s$ = s2$
GOSUB Asearch0: IF f = 0 THEN GOTO Err1
m = a: s$ = a$: wh = a + 1000: ha = wh: em = wh: GOSUB Asearch2
IF f = 0 THEN PRINT "I don't follow you.": GOTO Main0
IF a%(m, 6) = 0 THEN GOTO Err2
GOSUB ItemTake: IF a%(a, 4) <> -1 THEN a%(a, 4) = ro
'
a%(m, 7) = a%(m, 7) - 1: IF a%(m, 7) < 0 THEN a%(m, 7) = 0
PRINT "Okay.": GOSUB Lp4
IF a%(a, 0) = 0 THEN a%(a, 0) = 1: r = a + 400: GOSUB DiskRead
GOTO Pfoe
'
' **** Use command ****
'
Use:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Asearch0
IF f = 0 OR a = 26 OR a = 27 THEN
  f = 0: ha = -999: wh = ha: em = ha: GOSUB Asearch2: IF f = 0 THEN GOTO Err1
END IF
IF a = 4 THEN s$ = "Ilgaard": GOTO Use1
IF a = 5 THEN s$ = "Xantec": GOTO Use1
IF a = 6 THEN s$ = "Twalrep": GOTO Use1
IF a = 7 THEN s$ = "Asroth": GOTO Use1
PRINT "Try another command.": GOTO Lp12
'
' USE the rings of power
'
Use1:
PRINT "(Say "; q$; s$; q$; ".)": GOSUB Lp2: GOTO Say
'
' **** Wear command ****
'
Wear:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: ha = -1: wh = ro: em = -999: GOSUB Asearch2
IF f = 0 THEN GOTO Err1
IF a = 19 AND a%(a, 4) = ro THEN PRINT "You muist first GET it.": GOTO Main0
IF a%(a, 4) = ro THEN GOSUB ItemTake: IF a%(a, 4) <> -1 THEN GOTO Main
IF a%(a, 2) <> 11 THEN GOTO Err3
IF a%(a, 4) = em THEN a$ = "it": GOTO Wear2
IF a%(a, 5) = 0 THEN GOTO Wear1
'
IF a%(a, 5) = 1 THEN
  IF sh > 0 THEN a$ = "a shield": GOTO Wear2
  sh = a: m%(0, 7) = m%(0, 7) + 1: GOTO Wear1
END IF
IF ar <> 0 THEN a$ = "armor": GOTO Wear2
ar = a: m%(0, 7) = m%(0, 7) + a%(a, 5) / 2
'
Wear1:
a%(a, 4) = -999: GOSUB Pu0: PRINT a$; "worn.": GOTO Pfoe
'
Wear2:
PRINT "You're already wearing "; a$; "!": GOTO Main0
'---------------------------------------------------------------------------
'  Interaction commands
'
'  **** Attack command ****
'
Attack:
IF m%(0, 8) < 1 THEN PRINT "You must first ready a weapon!": GOTO Main0
GOSUB CheckSub:  GOSUB Msearch: ta = 0: IF f = 0 THEN GOTO AttackItem
'
' Attack a monster
'
AttackMon:
IF m%(m, 11) > 1 THEN
  GOSUB Af: IF s$ <> "y" THEN GOTO Main
  m%(m, 11) = m%(m, 11) - 1: GOSUB EnemyCheck
  IF m%(m, 11) = 1 THEN a$ = m$(m) + " gets angry!": GOSUB Lp10
END IF
'
of = 0: df = m: up = 0: GOSUB Battle: IF die = 1 THEN GOTO EndGame
IF hit AND up THEN
  w2 = a%(m%(0, 8), 6): a$ = m$(0): m = 0: GOSUB Pu2: a$ = a$ + wp$(w2)
  a$ = a$ + " ability just increased!": wa%(w2) = wa%(w2) + 1: GOSUB Lp10
END IF
GOTO Pfoe
'
'  Attack/blast open a door or container
'
AttackItem:
IF lt = 0 THEN GOTO Main
ha = ro: GOSUB Asearch1: IF f = 0 THEN GOTO Err4
'
m = a%(a, 2): k = 6 + ABS(m = 8)
IF db > 0 AND a >= db AND a <= naf THEN
  PRINT "You hack the body to bits!": a%(a, 4) = 0: GOTO Pfoe
END IF
IF m = 12 THEN
  GOSUB ItemGet3: m = a%(a, 5): IF ta = 1 THEN GOTO Blast1
  GOTO AttackMon
END IF
IF m <> 4 AND m <> 8 THEN
  a$ = "Why would you attack a " + a$(a) + "?": GOTO Lp8
END IF
IF a%(a, k) < 100 THEN PRINT "Nothing happens.": GOTO Lp12
'
w = m%(0, 8): x = 7: k = 6: d2 = 0: IF m = 4 THEN x = 6: k = 5
d = a%(w, 7): s = a%(w, 8): IF ta = 1 THEN d = 2: s = 5
FOR a2 = 1 TO d
   d2 = d2 + INT(RND * s) + 1
NEXT
a$ = "Wham!  You " + MID$("hitblast", ta * 3 + 1, 3 + ta * 2)
a$ = a$ + " the " + a$(a) + "!": GOSUB Lp10
a%(a, x) = a%(a, x) - d2
'
IF a%(a, x) < 100 THEN
  a%(a, x) = 1 - ABS(m = 8): a%(a, k) = 0
  a$ = "The " + a$(a) + " shatters open!": GOTO Lp9
END IF
GOTO Pfoe
'
' **** Free command ****
'
Free:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Asearch0: IF f = 0 THEN GOTO Err4
IF a%(a, 2) <> 10 THEN GOTO Err3
'
m = a%(a, 5): k = a%(a, 6): x = a%(a, 7)
IF x > 0 AND x <= nm THEN
  IF m%(x, 5) = ro THEN PRINT m$(x); " won't let you!": GOTO Lp12
END IF
'
IF k > 0 AND k <= naf THEN
  x = a%(k, 4)
  IF x <> -1 AND x <> ro AND x <> -999 THEN
    PRINT "You don't have the key.": GOTO Lp12
  END IF
END IF
'
a$ = "You have freed " + m$(m)
IF k > 0 AND k <= naf THEN a$ = a$ + " with the " + a$(k)
a$ = a$ + ".": GOSUB Lp0: m%(m, 5) = ro: GOSUB WTRem: a%(a, 4) = 0
GOSUB EnemyCheck: GOTO Pfoe
'
' **** Give command ****
'
Give:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: k = ABS(INT(VAL(s$)))
IF k = 0 THEN
  GOSUB Asearch0
  IF f = 0 THEN
    ha = -999: wh = ha: em = ha: GOSUB Asearch2: IF f = 0 THEN GOTO Err1
    PRINT "You're wearing it.  "; q$; "REMOVE"; q$; " it first.": GOTO Main0
  END IF
  GOSUB ItemTake: IF a%(a, 4) <> -1 THEN GOTO Main
END IF
a$ = "To whom": GOSUB CheckSub2
s$ = s2$: GOSUB Msearch: IF f = 0 THEN GOTO Err4
IF k = 0 THEN GOTO Give1
'
' Give money
'
GiveMoney:
a$ = "Give " + LTRIM$(STR$(k)) + " gold pieces to " + m$(m) + ".": GOSUB Lp10
PRINT "Are you sure?"; : GOSUB Af1: IF s$ <> "y" THEN GOTO Main
'
IF gold < k THEN PRINT "You only have"; gold; "gold pieces.": GOTO Main0
'
gold = gold - k: a$ = m$(m) + " takes the money...": GOSUB Lp10
IF m%(m, 11) = 2 AND k >= 5000 THEN m%(m, 11) = 3: GOSUB Smile1
GOTO Give2
'
' Give an item
'
Give1:
IF (m = 16 AND a <> 20) OR (m = 20 AND a <> 21) OR m = 30 THEN
  PRINT "You can't give that to a "; m$(m); ".": GOTO Lp12
END IF
a$ = "You give the " + a$(a) + " to " + m$(m) + "...": GOSUB Lp10
x = a%(a, 2): IF a = m%(0, 8) THEN m%(0, 8) = -1
IF (x = 6 OR x = 9) AND m%(m, 13) > 0 AND a%(a, 6) > 0 THEN GOTO GiveDrink
'
GOSUB WTRem: a%(a, 4) = -m - 1
' Give bull/python salt/hamster
IF m = 16 OR m = 20 THEN
  a%(a, 4) = 0: m%(m, 11) = 3: COLOR 2: PRINT m$(m); " likes you now!"
  COLOR 3: GOSUB Lp4
END IF
IF m%(m, 8) < 0 AND (x = 2 OR x = 3) THEN
  m%(m, 8) = a: a$ = m$(m) + " readies " + a$(a) + ".": GOSUB Lp10
END IF
IF m%(m, 11) < 3 THEN m%(m, 11) = 100 + m%(m, 11) * (30 + a%(a, 1) / 100)
'
Give2:
GOSUB EnemyCheck: GOTO Pfoe
'
' Give something drinkable
'
GiveDrink:
a%(a, 6) = a%(a, 6) - 1
a$ = m$(m) + " takes a " + MID$("drinkbite", ABS(a%(a, 2) = 9) * 5 + 1, 5)
a$ = a$ + " and hands it back."
IF x = 9 AND a%(a, 6) = 0 THEN
  a$ = m$(m) + " eats it all.": GOSUB WTRem: a%(a, 4) = 0
END IF
GOSUB Lp10
'
IF m%(m, 11) < 3 THEN
  m%(m, 11) = 140 + 60 * m%(m, 13) / m%(m, 1): GOSUB EnemyCheck
  IF m%(m, 11) = 3 THEN GOSUB Smile1
END IF
m%(m, 13) = m%(m, 13) - a%(a, 5): IF m%(m, 13) < 0 THEN m%(m, 13) = 0
df = m: d2 = 0: GOSUB Mstatus: GOTO Give2
'---------------------------------------------------------------------------
' **** NEW Help command ****
'
Help:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: ha = ro: wh = ha: em = ha: GOSUB Asearch2
IF f = 0 OR a < 8 OR a > 11 THEN
  GOSUB Msearch: IF f = 0 THEN GOTO Err4
  PRINT "Try "; q$; "HEAL"; q$; ".": GOTO Lp12
END IF
IF a = 8 THEN a%(4, 4) = ro
IF a = 10 THEN a%(5, 4) = ro
a%(a, 4) = 0: r = a - 4: GOSUB Effect: d%(2) = d%(2) + 25: GOTO Pfoe
END
'
' **** Pray command ****
'
Pray:
IF ro = 68 THEN r = 18: GOSUB Effect: die = 0: GOTO EndGame
r = ro - 24: k = r + 12
IF r < 1 OR r > 4 THEN PRINT "This is not a Temple of Dharma.": GOTO Lp12
IF a%(k, 4) <> ro THEN PRINT "The god no longer inhabits this temple.": GOTO Lp12
IF r = 1 THEN r2 = 39 ELSE IF r = 2 THEN r2 = 45
IF r = 3 THEN r2 = 63 ELSE IF r = 4 THEN r2 = 52
GOTO Say1
'---------------------------------------------------------------------------
' **** Request command ****
'
Request:
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: a$ = "From whom": GOSUB CheckSub2
a$ = s$: s$ = s2$: GOSUB Msearch: IF f = 0 THEN GOTO Err4
s$ = a$: wh = -m - 1: ha = -m - 1000: em = wh: GOSUB Asearch2
IF f = 0 THEN a$ = m$(m) + " doesn't have it.": GOTO Lp8
IF m%(m, 11) < 3 THEN GOSUB Smile1: GOTO Pfoe
'
PRINT "Okay.": GOSUB Lp4: GOSUB ItemTake1: IF a%(a, 4) <> -1 THEN GOTO Main
IF a = m%(m, 8) THEN m%(m, 8) = -1
GOSUB Pu0: : PRINT a$; "taken.": GOSUB Lp4:
IF a%(a, 0) = 0 THEN a%(a, 0) = 1: GOSUB Lp1: r = a + 400: GOSUB DiskRead
IF m%(0, 8) < 1 AND a%(a, 2) = 2 OR a%(a, 2) = 3 THEN GOTO Ready
GOTO Pfoe
'
' **** Smile command ****
'
Smile:
IF lt = 0 THEN GOTO Main
FOR m = 1 TO nm
   IF m%(m, 5) = ro THEN GOSUB Smile1
NEXT: GOSUB Lp1: GOTO Pfoe
'
Smile1:
PRINT m$(m); : IF m%(m, 3) > 1 THEN PRINT "s";
PRINT " "; sm$(m%(m, 11)); : IF m%(m, 3) = 1 THEN PRINT "s";
PRINT " at you.": GOSUB Lp2: RETURN
'---------------------------------------------------------------------------
' Miscelaneous commands
'
' **** Inventory ****
'
Inventory:
IF s$ = "" THEN GOTO Inv1
IF lt = 0 THEN GOTO Main
GOSUB CheckSub: GOSUB Msearch: IF f = 0 THEN GOTO Err4
IF m = 16 OR m = 20 OR m = 30 THEN s$ = "a " + m$(m): GOTO Err3
IF m%(m, 11) = 3 THEN GOTO Inv2
GOSUB Smile1: GOTO Pfoe
'
Inv1:
m = 0: m2 = 0: PRINT m$(m); " is wearing:": GOSUB Lp4
FOR a = 1 TO na
   IF a%(a, 4) = -999 THEN
     GOSUB Pu0: PRINT " "; a$: m2 = 1: GOSUB Lp2
   END IF
NEXT
IF m2 = 0 THEN PRINT " (No armor)": GOSUB Lp2
GOSUB Lp1
'
Inv2:
f = 0: PRINT m$(m); " is carrying:": GOSUB Lp4
ha = -m - 1: wh = -m - 1000: IF m = 0 THEN wh = ha
FOR a = 1 TO na
   IF a%(a, 4) = ha OR a%(a, 4) = wh THEN
     GOSUB Pu0: PRINT " "; a$;
     IF m > 0 AND a%(a, 4) = wh THEN PRINT "  (Being worn)";
     COLOR 2: IF a = m%(m, 8) THEN PRINT "   [Ready Weapon]";
     IF a = ls THEN PRINT "   (Providing light)";
     COLOR 3: IF a%(a, 2) = 4 THEN GOSUB Inv3
     f = 1: GOSUB Lp1
   END IF
NEXT
IF f = 0 THEN PRINT " (Nothing)": GOSUB Lp4
IF m = 0 THEN PRINT LTRIM$(STR$(gold)); " gold pieces": GOSUB Lp4
df = m: d2 = 0: GOSUB Mstatus: GOTO Pfoe
'
' Show items inside of container
'
Inv3:
IF a%(a, 6) <> 1 THEN PRINT "  (Closed)"; : RETURN
GOSUB Lp1
'
Inv4:
xm = a + 1000: m2 = 0: PRINT "(This contains:)": GOSUB Lp2: of = 0
FOR a2 = 1 TO na
   IF a%(a2, 4) = xm THEN
     PRINT " --- "; UCASE$(LEFT$(a$(a2), 1)); MID$(a$(a2), 2)
     GOSUB Lp2: of = 1
   END IF
NEXT
IF of = 0 THEN PRINT " --- (Nothing)": GOSUB Lp2
RETURN

'
' **** Status command ****
'
Status:
CLS : l = 0: IF sex < 0 OR sex > 1 THEN sex = 0
PRINT "Name: "; LEFT$(m$(0), 32); : LOCATE CSRLIN, 40
PRINT "Sex: "; sex$(sex); : LOCATE CSRLIN, 54
PRINT "Damage Taken: "; LTRIM$(STR$(m%(0, 13))); "/"; LTRIM$(STR$(m%(0, 1)))
PRINT : PRINT "Hardiness:"; m%(0, 1): LOCATE 3, 20: PRINT "Agility:"; m%(0, 2)
LOCATE 3, 37: PRINT "Charisma:"; ch; " (Charm Monster: ";
a = (ch - 10) * 2: a$ = LTRIM$(STR$(a)) + "%)"
PRINT MID$("+", ABS((a < 1)) * 1 + 1, 1); a$: PRINT
'
PRINT "Weapon Abilities:"; : LOCATE 5, 41: PRINT "Spell Abilities:"
PRINT "1. Axe:  "; wa%(1); : LOCATE 6, 42: PRINT "Blast..";
a = 1: GOSUB Status1: PRINT "2. Bow:  "; wa%(2); : LOCATE 7, 42
PRINT "Heal..."; : a = 2: GOSUB Status1: PRINT "3. Mace: "; wa%(3);
LOCATE 8, 42: PRINT "Speed.."; : a = 3: GOSUB Status1
PRINT "4. Spear:"; wa%(4); : LOCATE 9, 42: PRINT "Power..";
a = 4: GOSUB Status1: PRINT "5. Sword:"; wa%(5); : LOCATE 10, 24
PRINT "Gold:"; gold: LOCATE 10, 56: PRINT "In bank:"; bank: PRINT
'
PRINT "Armor: ";
IF ar > 1 AND ar <= na THEN PRINT UCASE$(LEFT$(a$(ar), 1)); MID$(a$(ar), 2);
IF sh > 1 AND sh <= na THEN
  IF ar > 1 AND ar <= na THEN PRINT " and ";
  PRINT a$(sh);
END IF
PRINT : LOCATE 12, 41: PRINT "  Armor Expertise: "; LTRIM$(STR$(ae)); "%"
'
a = m%(0, 1) * 10: PRINT : PRINT "Weight Carryable: ";
PRINT LTRIM$(STR$(a)); " Gronds ("; LTRIM$(STR$(a * 10)); " dos)"
LOCATE 14, 43: PRINT "  Weight carried: "; LTRIM$(STR$(wt));
PRINT " Gronds": PRINT
PRINT "Karma achieved: "; : IF d%(2) < 100 THEN COLOR 2
PRINT LTRIM$(RTRIM$(STR$(d%(2)))); "%": COLOR 3
LOCATE 22: GOSUB Lp6: CLS : LOCATE 24: GOTO Main
'
Status1:
m = sa%(a): PRINT LEFT$("...", ABS(m < 1000) + ABS(m < 100) + ABS(m < 10));
IF m <> sp%(a) THEN COLOR 2
PRINT LTRIM$(STR$(sa%(a))); "%"; : COLOR 3: PRINT " / ";
PRINT LTRIM$(STR$(sp%(a))); "%": RETURN
'
'  **** Look command ****
'
Look:
IF lt = 0 THEN GOTO Main
r = ro: GOSUB DiskRead: GOTO Pfoe
'
' **** Say command ****
'
Say:
GOSUB CheckSub: s$ = LTRIM$(RTRIM$(LEFT$(s$, 60)))
s$ = UCASE$(LEFT$(s$, 1)) + LCASE$(MID$(s$, 2))
a$ = "Okay, " + q$ + LEFT$(s$, 60) + q$ + ".": GOSUB Lp10
'
' Ring of Ilgaard
'
IF s$ = "Ilgaard" THEN
  IF a%(4, 4) <> -1 AND a%(4, 4) <> -999 THEN
    PRINT "You do not possess the ring of Ilgaard.": GOTO Lp12
  END IF
  r = 8: GOSUB Effect
  IF ro = 17 THEN r2 = 23: GOTO Say1
  IF ro = 70 AND m%(15, 5) = 0 AND d%(1) = 0 THEN
    d%(1) = 1: m%(15, 5) = ro: GOSUB EnemyCheck: GOTO Main
  END IF
  IF (a%(26, 4) = ro OR a%(26, 4) = -1) AND a%(7, 0) = 0 THEN
    a%(26, 6) = 1: PRINT "The gold box popped open!": GOTO Lp12
  END IF
  IF (a%(27, 4) = ro OR a%(27, 4) = -1) AND a%(6, 0) = 0 THEN
    a%(27, 6) = 1: PRINT "The silver box popped open!": GOTO Lp12
  END IF
  PRINT "The ring of Ilgaard doesn't work here."
END IF
'
' Ring of Xantec
'
IF s$ = "Xantec" THEN
  IF a%(5, 4) <> -1 AND a%(5, 4) <> -999 THEN
    PRINT "You do not possess the ring of Xantec.": GOTO Lp12
  END IF
  r = 9: GOSUB Effect
  IF (ro > 24 AND ro < 29) OR ro = 68 THEN
     PRINT q$; "Try PRAYing."; q$: GOTO Lp12
  END IF
  IF ro = 17 AND (a%(4, 4) = -1 OR a%(4, 4) = -999) THEN
    PRINT q$; "Use the ring of Ilgaard."; q$: GOTO Lp12
  END IF
  IF ro = 22 THEN r = 19: GOSUB Effect: GOTO Pfoe
  IF ro = 4 THEN a = 45: GOTO Xantec
  IF ro = 36 THEN a = 46: GOTO Xantec
  IF ro = 38 THEN a = 47: GOTO Xantec
  IF ro = 69 THEN a = 48: GOTO Xantec
  IF ro = 43 THEN a = 49: GOTO Xantec
  IF ro = 49 THEN a = 50: GOTO Xantec
  IF ro = 50 THEN a = 51: GOTO Xantec
  IF ro = 67 THEN a = 52: GOTO Xantec
  PRINT q$; "You must think for yourself sometimes."; q$: GOTO Lp12
Xantec:
  a%(a, 4) = ro: a%(a, 8) = 0
  PRINT q$; "There is a secret passage in this room..."; q$: GOTO Lp12
END IF
'
' Ring of Twalrep
'
IF s$ = "Twalrep" THEN
  IF a%(6, 4) <> -1 AND a%(6, 4) <> -999 THEN
    PRINT "You do not possess the ring of Twalrep.": GOTO Lp12
  END IF
  r = 10: GOSUB Effect: m = 0: GOTO Heal1
END IF
'
' Ring of Asroth
'
IF s$ = "Asroth" THEN
  IF a%(7, 4) <> -1 AND a%(7, 4) <> -999 THEN
    PRINT "You do not possess the ring of Asroth.": GOTO Lp12
  END IF
  r = 11: GOSUB Effect: COLOR 2
  IF t(1) < 1 THEN PRINT "There are no enemies here.": COLOR 3: GOTO Lp12
  FOR m = 1 TO nm
     IF m%(m, 5) = ro AND m%(m, 11) = 1 THEN
       m%(m, 5) = 0
       PRINT m$(m); " is charred into a pile of ashes!": GOSUB Lp2
     END IF
  NEXT
  COLOR 3: GOSUB EnemyCheck: GOTO Pfoe
END IF
'
' Magic words
'
IF s$ = "Friend" AND ro = 62 THEN r2 = 9: GOTO Say1
IF s$ = "Agricola" AND m%(31, 5) = 0 AND m%(31, 0) = 1 THEN r2 = 63: GOTO Say1
IF s$ = "Nauta" AND ro = 65 AND a%(24, 0) = 1 THEN r2 = 63: GOTO Say1
'
' Black Wizard's name!
'
IF s$ = "Rikor" THEN
  f = 1
  FOR a = 4 TO 7
     IF a%(a, 4) <> -1 AND a%(a, 4) <> -999 THEN f = 0
  NEXT
  IF f = 0 THEN PRINT "You do not have all four rings of power.": GOTO Lp12
  IF d%(2) < 100 THEN
    PRINT "You are not worthy!": GOSUB Lp4: PRINT "Your karma level is only ";
    PRINT LTRIM$(RTRIM$(STR$(d%(2)))); "%": GOTO Lp12
  END IF
  r2 = 68: GOTO Say1
END IF
GOTO Pfoe
Say1:
r = 15: GOSUB Effect: GOTO Move2

'
' **** Blast spell ****
'
Blast:
s = 1: GOSUB SpellCast: IF suc = 0 THEN GOTO Pfoe
GOSUB CheckSub: GOSUB Msearch: ta = 1: IF f = 0 THEN GOTO AttackItem
'
Blast1:
IF m%(m, 11) <> 1 THEN
  GOSUB Af: IF s$ <> "y" THEN GOTO Main
  m%(m, 11) = m%(m, 11) - 1: GOSUB EnemyCheck
  IF m%(m, 11) = 1 THEN a$ = m$(m) + " gets angry!": GOSUB Lp10
END IF
'
PRINT "ZAP!  Direct hit!": GOSUB Lp4
s = 5: d = 2: df = m: a = 0: GOSUB Damage0: GOTO Pfoe
'
' **** Heal spell ****
'
Heal:
s = 2: GOSUB SpellCast: IF suc = 0 THEN GOTO Pfoe
m = 0: IF s$ <> "" THEN GOSUB Msearch: IF f = 0 THEN GOTO Err4
Heal1:
IF m%(m, 13) > 0 THEN
  m = m: GOSUB Pu2: a$ = a$ + "health improves!": GOSUB Lp0
  rl = 12: GOSUB RollDice2: m%(m, 13) = m%(m, 13) - rl
  IF m%(m, 13) < 0 THEN m%(m, 13) = 0
END IF
df = m: d2 = 0: GOSUB Mstatus: GOTO Pfoe
'
' **** Speed spell ****
'
Speed:
s = 3: GOSUB SpellCast: IF suc = 0 THEN GOTO Pfoe
IF Speed <> 0 THEN PRINT "Nothing happened.": GOTO Lp12
m%(0, 2) = m%(0, 2) * 2: Speed = INT(RND * 10 + 26)
PRINT "Your agility temporarily increases!": GOTO Lp12
'
' **** Power spell ****
'
Power:
s = 4: GOSUB SpellCast: IF suc = 0 THEN GOTO Pfoe
'
' Add your own power spell effects here
'
PRINT "You hear a very loud sonic boom which echoes all around you!"
GOTO Lp12
'
' **** Help command ****
'
Hints:
PRINT "Your question?": GOSUB Lp4
PRINT "   1- "; h$(1): GOSUB Lp2
a = 1: m = 1: IF nh > 1 THEN a = 16: m = 23
IF a > 1 THEN
  FOR r = a TO m
     PRINT "   "; LTRIM$(RTRIM$(STR$(r - (a - 2)))); "- "; h$(r): GOSUB Lp2
  NEXT
END IF
GOSUB Lp1: LINE INPUT "Your choice?:"; a$: l = 0: r = INT(VAL(a$))
IF r > 1 THEN r = r + (a - 2)

IF r <> 1 AND ((r > 1 AND r < a) OR r > m OR r < 1) THEN GOTO Main
'
GOSUB Lp1: COLOR 2: PRINT h$(r): COLOR 3: GOSUB Lp4
OPEN "HINTS.DSC" FOR RANDOM AS #1 LEN = 255
a = h%(r, 1) + h%(r, 2) - 1: s$ = ""
FOR m = h%(r, 1) TO a
   GET #1, m, DS: a$ = RTRIM$(DS.TEXT): GOSUB Lp10
   IF m < a THEN
     PRINT "Another? (Y/N):";
     DO
       s$ = LCASE$(INKEY$)
     LOOP UNTIL s$ = "y" OR s$ = "n"
     LOCATE CSRLIN, 1: PRINT SPC(16); : LOCATE CSRLIN, 1: l = 0
     IF s$ <> "y" THEN m = a
   END IF
NEXT
CLOSE #1: GOTO Main0
'
' **** Save game ****
'
GameSave:
OPEN "GAMEDIR.DAT" FOR INPUT AS #2: INPUT #2, a: IF a < 0 THEN a = 0
FOR m = 1 TO 5: LINE INPUT #2, gm$(m): NEXT
CLOSE #2: PRINT "Saved games:": GOSUB Lp4
FOR m = 1 TO 5
   PRINT " "; LTRIM$(RTRIM$(STR$(m))); "- "; gm$(m): GOSUB Lp2
NEXT: PRINT 6; "- (Don't save, return to game)": GOSUB Lp4
'
INPUT "Enter 1-6 for saved position:"; a$: m = INT(VAL(a$)): l = 0
IF m < 1 OR m > 6 THEN GOTO GameSave
IF m = 6 THEN GOTO Main
IF m > a + 1 THEN PRINT "Use #"; a + 1; "first.": GOSUB Lp4: GOTO GameSave
'
IF m = a + 1 THEN a = a + 1
IF gm$(m) <> "(none)" THEN
  PRINT "Enter a new description for save?"; : GOSUB Af1
  IF s$ <> "y" THEN GOTO GameSave1
END IF
PRINT "Enter new description:": GOSUB Lp4: LINE INPUT "-->"; gm$(m)
l = 1: gm$(m) = LEFT$(gm$(m), 40)
'
GameSave1:
OPEN "GAMEDIR.DAT" FOR OUTPUT AS #2: PRINT #2, a
FOR k = 1 TO 5: PRINT #2, gm$(k): NEXT: CLOSE #2
'
a$ = "GAME" + LTRIM$(RTRIM$(STR$(m))) + ".SAV"
OPEN a$ FOR OUTPUT AS #2
FOR a = 1 TO na
   FOR m = 0 TO 8: PRINT #2, a%(a, m): NEXT
NEXT
FOR m = 0 TO nm
   FOR a = 0 TO 15: PRINT #2, m%(m, a): NEXT
NEXT
FOR r = 1 TO nr
   FOR m = 0 TO 11: PRINT #2, r%(r, m): NEXT
NEXT
FOR a = 1 TO 4: PRINT #2, t(a), sa%(a), sp%(a): NEXT
FOR a = 1 TO 5: PRINT #2, wa%(a): NEXT
FOR a = 1 TO 200: PRINT #2, d%(a): NEXT
PRINT #2, ac, ae, ar, bank, ch, die, ea, gold, ls, lt, nl, r3, ro, sex, sh
PRINT #2, Speed, wt
CLOSE #2: PRINT "Game saved.": GOSUB Lp4: GOTO Main
'---------------------------------------------------------------------------
' **** Restore saved game ****
'
GameRestore:
OPEN "GAMEDIR.DAT" FOR INPUT AS #2: INPUT #2, a
FOR m = 1 TO 5: LINE INPUT #2, gm$(m): NEXT: CLOSE #2
PRINT "Saved games:": GOSUB Lp4
FOR m = 1 TO 5
   PRINT " "; LTRIM$(RTRIM$(STR$(m))); "- "; gm$(m): GOSUB Lp2
NEXT: PRINT 6; "- (Don't restore, return to game)": GOSUB Lp4
INPUT "Enter 1-6 to restore a position:"; a$: m = INT(VAL(a$)): l = 0
IF m < 1 OR m > 6 THEN GOTO GameRestore
IF m = 6 THEN
  IF die = 1 THEN GOTO Dead
  GOTO Main
END IF
IF m > a THEN : PRINT "There is no saved game there.": GOTO GameRestore
'
a$ = "GAME" + LTRIM$(RTRIM$(STR$(m))) + ".SAV"
OPEN a$ FOR INPUT AS #2
FOR a = 1 TO na
   FOR m = 0 TO 8: INPUT #2, a%(a, m): NEXT
NEXT
FOR m = 0 TO nm
   FOR a = 0 TO 15: INPUT #2, m%(m, a): NEXT
NEXT
FOR r = 1 TO nr
   FOR m = 0 TO 11: INPUT #2, r%(r, m): NEXT
NEXT
FOR a = 1 TO 4: INPUT #2, t(a), sa%(a), sp%(a): NEXT
FOR a = 1 TO 5: INPUT #2, wa%(a): NEXT
FOR a = 1 TO 200: INPUT #2, d%(a): NEXT
INPUT #2, ac, ae, ar, bank, ch, die, ea, gold, ls, lt, nl, r3, ro, sex, sh
INPUT #2, Speed, wt
CLOSE #2: cz$ = "": r2 = ro: GOTO Move2
'
' **** Quit, leave the Eamon system ****
'
Quit:
OPEN "GAMEDIR.DAT" FOR INPUT AS #2: INPUT #2, a: CLOSE #2
IF a < 1 THEN
  COLOR 2: l = 0
  a$ = "!! WARNING !!  You haven't saved a game yet, any progress that you "
  a$ = a$ + "have made will be lost and you'll have to start back at the "
  a$ = a$ + "beginning when you return.": GOSUB Lp10: COLOR 3
END IF
PRINT "Are you sure you want to quit?"; : GOSUB Af1
IF s$ <> "y" THEN GOTO Main
CLS : CHDIR "..": RUN "EAMONDX"
'---------------------------------------------------------------------------
' **** End of game routines ****
'
EndGame:
GOSUB Lp1: GOSUB Lp6
IF die = 0 THEN
  PRINT "Leave this adventure?"; : GOSUB Af1: IF s$ <> "y" THEN GOTO Main
END IF
IF die = 1 THEN
  a$ = "In the last moments of consciousness, the adventurer "
  a$ = a$ + LastWords$(INT(RND * 10) + 1) + ".": GOSUB Lp10: GOSUB Lp6
END IF
a = 0: m = 0: w = 0: IF Speed THEN m%(0, 2) = m%(0, 2) / 2
IF die > 0 THEN GOTO Dead
'
IF ar > 1 AND ar <= na THEN a%(ar, 4) = 0: a = a%(ar, 5)
IF sh > 1 AND sh <= na THEN a%(sh, 4) = 0: m = 1
IF ac < 7 THEN ac = a + m
FOR a = 1 TO na
   wp%(a) = 0
   IF a%(a, 4) = -999 THEN a%(a, 4) = -1
   IF a%(a, 4) > 1000 AND a%(a, 4) < 2001 THEN
     k = a%(a, 4) - 1000
     IF a%(k, 4) = -1 AND a%(a, 0) > 0 THEN a%(a, 4) = -1
   END IF
   IF a%(a, 4) = -1 AND (a%(a, 2) = 2 OR a%(a, 2) = 3) THEN
     w = w + 1: wp%(w) = a: a%(a, 4) = 0
   END IF
NEXT
IF w < 5 THEN GOTO EndGame1
'
s$ = "Lord William Crankhandle"
GOSUB Lp7: a$ = "As you enter the Main Hall, " + s$ + " approaches you "
a$ = a$ + "and says, " + q$ + "You have too many weapons -- 4 is the "
a$ = a$ + "legal limit." + q$: GOSUB Lp0: GOSUB Lp6
'
SellWep:
GOSUB Lp7: PRINT "Your weapons are:": GOSUB Lp4: s$ = "......................"
FOR a = 1 TO w
   m = wp%(a)
   PRINT SPC(ABS(a < 10) + ABS(a < 100) + 5); a; ": ";
   a$ = LEFT$(a$(m), 20): GOSUB Pu1: PRINT RTRIM$(a$);
   PRINT LEFT$(s$, 22 - LEN(a$)); "("; LTRIM$(RTRIM$(STR$(a%(m, 7))));
   PRINT "D"; LTRIM$(RTRIM$(STR$(a%(m, 8)))); ")": GOSUB Lp2
NEXT: GOSUB Lp1
INPUT "Enter the number of the weapon to sell:"; a$
m = INT(VAL(a$)): IF m < 1 OR m > w THEN GOTO SellWep
a%(wp%(m), 4) = -1: w = w - 1: IF m = w + 1 AND w > 4 THEN GOTO SellWep
wp%(m) = wp%(w + 1): IF w > 4 THEN GOTO SellWep
'
EndGame1:
s$ = "Sam Slicker"
GOSUB Lp7: a$ = "You deliver your goods to " + s$ + ", the local "
a$ = a$ + "buyer of treasure (under the sign of 3 balls).": GOSUB Lp10
tp = 0
FOR a = 1 TO naf
   IF a%(a, 4) = -1 THEN
     IF a%(a, 2) > 0 THEN a%(a, 1) = a%(a, 1) * (ch / 10)
     m = INT(a%(a, 1)): tp = tp + m: GOSUB Pu0: PRINT a$;
     s$ = "is": IF RIGHT$(a$(a), 1) = "s" THEN s$ = "are"
     PRINT s$; " worth "; : s$ = LTRIM$(RTRIM$(STR$(m))) + " gold pieces."
     IF m < 1 THEN s$ = "nothing."
     PRINT s$: GOSUB Lp4
   END IF
NEXT
'
GOSUB Lp1: PRINT "He pays you "; tp; " gold pieces total.": GOSUB Lp4
gold = INT(gold + tp): IF gold < 0 THEN gold = 0
GOSUB Lp6
EXIT SUB
'
' Player died
'
Dead:
CLS : PRINT "You have perished.  Now what?": PRINT "1. Restore a saved game"
PRINT "2. Start over": PRINT "3. Give up, accept death": PRINT
LINE INPUT "Your choice?"; a$: a = INT(VAL(a$))
IF a < 1 OR a > 3 THEN GOTO Dead
IF a = 3 THEN EXIT SUB
IF a = 2 THEN RUN
GOTO GameRestore
'---------------------------------------------------------------------------
'
' Most-useful routines and subroutines
'
' Read text from DESC file
'
Effect:
r = r + 1200
'
DiskRead:
IF r < 401 THEN GET #10, r + adj1, DS
IF r > 400 AND r < 801 THEN GET #11, r - 400 + adj2, DS
IF r > 800 AND r < 1201 THEN GET #12, r - 800 + adj3, DS
IF r > 1200 THEN GET #13, r - 1200 + adj4, DS
a$ = RTRIM$(DS.TEXT): GOSUB Lp0: GOTO Lp1
'
' Print a$ without wrap-around
'
Lp0:
xm = 0: a$ = LTRIM$(a$)
IF LEN(a$) <= 79 THEN PRINT a$:  GOTO Lp2
FOR k = 79 TO 1 STEP -1
   IF MID$(a$, k, 1) = " " THEN
     PRINT LEFT$(a$, k - 1): a$ = RIGHT$(a$, LEN(a$) - k)
     GOSUB Lp2: k = 1: xm = 1
   END IF
NEXT: IF xm = 1 THEN GOTO Lp0
COLOR 7: PRINT "Word to long error!": COLOR 3: GOTO Lp4
'----------------------------------------------------------------------------
' Line counter & pause routines
'
Lp1:
PRINT
'
Lp2:
l = l + 1: GOTO Lp5
'
Lp3:
l = l + 1
'
Lp4:
l = l + 2: PRINT
'
Lp5:
IF l < 20 THEN RETURN
'
Lp6:
PRINT "[MORE]"; : zz$ = INKEY$
DO
LOOP UNTIL INKEY$ > ""
LOCATE CSRLIN, 1: PRINT "      "; : LOCATE CSRLIN, 1
zz$ = INKEY$: l = 0: RETURN
'
Lp7:
  CLS : l = 0: RETURN
'
' Redundant stuff
'
Lp8:
GOSUB Lp10: GOTO Main
'
Lp9:
GOSUB Lp10: GOTO Pfoe
'
Lp10:
GOSUB Lp0: GOTO Lp1
'
Lp11:
GOSUB DiskRead: l = l - 1: LOCATE CSRLIN - 1, 1: RETURN
'
Lp12:
GOSUB Lp4: GOTO Pfoe
'----------------------------------------------------------------------------
'
' Capitalize a$
'
Pu0:
a$ = a$(a)
Pu1:
a$ = UCASE$(LEFT$(a$, 1)) + MID$(a$, 2) + " ": RETURN
'
' Make a$ possessive
'
Pu2:
a$ = m$(m) + MID$("'s'", ABS(LCASE$(RIGHT$(m$(m), 1)) = "s") * 2 + 1, 2) + " "
RETURN
'---------------------------------------------------------------------------
' Get an item before doing something with it (Ready/Wear/Etc.)
'
ItemTake:
IF a%(a, 4) = -1 THEN RETURN
PRINT "(Taking it first.)"
'
ItemTake1:
IF wt + a%(a, 3) > m%(0, 1) * 10 OR a%(a, 3) = -999 OR a%(a, 3) > 900 THEN
  PRINT "It's too heavy.": GOTO Lp4
END IF
a%(a, 4) = -1: wt = wt + a%(a, 3): RETURN
'----------------------------------------------------------------------------
' Decrement WT if artifact is carried
'
WTRem:
wt = wt - a%(a, 3) * ABS(a%(a, 4) = -1): RETURN

'----------------------------------------------------------------------------
' Player input error messages
'
Err0:
PRINT "Movement commands:"
FOR c = 1 TO nd: PRINT UCASE$(c$(c)), : NEXT
PRINT UCASE$(c$(11)): PRINT '
PRINT "Artifact manipulation:"
FOR c = 12 TO 25: PRINT UCASE$(c$(c)), : NEXT: PRINT : PRINT
PRINT "Interactive:"
FOR c = 26 TO 33: PRINT UCASE$(c$(c)), : NEXT: PRINT : PRINT
PRINT "Miscelaneous:"
FOR c = 34 TO nc - 2: PRINT UCASE$(c$(c)), : NEXT: PRINT : PRINT
COLOR 2: PRINT "New commands:  HELP, PRAY": PRINT : COLOR 12
l = 99: GOTO Main0
'
Err1:
PRINT "You don't have it and it's not here.": GOTO Main0
Err2:
PRINT "You must first open it.": GOTO Main0
Err3:
a$ = "You can't " + c$(c) + " " + s$ + ".": GOTO Lp8
Err4:
PRINT "Nobody here by that name!": GOTO Main0
'---------------------------------------------------------------------------
' Attack friend
'
Af:
PRINT "Attack non-enemy?";
Af1:
LINE INPUT "  (Y/N):"; s$: s$ = LTRIM$(RTRIM$(LCASE$(s$)))
s$ = LEFT$(s$, 1): IF s$ <> "y" AND s$ <> "n" THEN GOTO Af1
l = 0: GOTO Lp1
'---------------------------------------------------------------------------
' Synonym checker
'
Synonym:
SL = LEN(s$): sy$ = "": sy = 0
IF a%(21, 4) = -1 OR a%(21, 4) = ro THEN
  sy$ = "hamster": sy = 21: GOSUB Synonym1
END IF
GOSUB Synonym1: RETURN
Synonym1:
IF LEFT$(sy$, SL) = s$ OR RIGHT$(sy$, SL) = s$ THEN s$ = LCASE$(a$(sy))
RETURN
'----------------------------------------------------------------------------
' See who folows player
'
MoveMons:
FOR xm = 1 TO nm
   IF m%(xm, 5) = r3 THEN
     IF m%(xm, 11) > 100 THEN
       rl = m%(xm, 11) - 100 + (ch - 10) * 2
       x = 1 + ABS(rl > RND * 100) + ABS(x = 2 AND rl > RND * 200)
       m%(xm, 11) = x
     END IF
     IF m%(xm, 11) = 3 THEN m%(xm, 5) = ro
     IF m%(xm, 11) = 1 THEN
       GOSUB RollDice: IF rl <= m%(xm, 4) THEN m%(xm, 5) = ro
     END IF
   END IF
MoveMon1:
NEXT: RETURN
'
' Enemies in room?
'
EnemyCheck:
t(1) = 0: t(2) = 0: t(3) = m%(0, 1)
FOR xm = 1 TO nm
   IF m%(xm, 5) = ro THEN
     IF m%(xm, 11) > 3 THEN
       rl = m%(xm, 11) - 100 + (ch - 10) * 2
       k = 1 + ABS(rl > INT(RND * 100 + 1))
       k = k + ABS(k = 2 AND rl > INT(RND * 200 + 1)): m%(xm, 11) = k
     END IF
     t(m%(xm, 11)) = t(m%(xm, 11)) + m%(xm, 1) * m%(xm, 3)
   END IF
NEXT: RETURN
'---------------------------------------------------------------------------
' Was player's spell successful?
'
SpellCast:
suc = 0: GOSUB RollDice: rl = rl * ABS(sp%(s) > 0)
IF (rl < sa%(s) OR rl < 5) AND rl < 100 AND rl > 0 THEN suc = 1
'
IF rl = 100 THEN
  a$ = "Spell backlash!!  Your ability to cast the " + c$(c) + " spell "
  a$ = a$ + "temporarily diminishes!": sa%(s) = 5: GOTO Lp10
END IF
'
IF suc = 0 THEN PRINT "Nothing happened.": GOTO Lp2
'
GOSUB RollDice
IF rl > sp%(s) THEN
  sp%(s) = sp%(s) + 2: sa%(s) = sa%(s) + 2
  a$ = m$(0) + MID$("'s'", (LCASE$(RIGHT$(m$(0), 1)) = "s") * 2 + 1, 2)
  a$ = a$ + " ability to cast " + UCASE$(c$(c)) + " just increased by 2!"
  GOSUB Lp0: GOSUB Lp1
END IF
IF sa%(s) > 9 THEN sa%(s) = sa%(s) / 2
RETURN
'---------------------------------------------------------------------------
' Get a random roll between 1 and RL
'
RollDice:
rl = 100
RollDice2:
rl = INT(RND * rl + 1): RETURN
'---------------------------------------------------------------------------
' Check/get s$
'
CheckSub:
IF s$ <> "" THEN RETURN
CheckSub1:
PRINT UCASE$(LEFT$(c$(c), 1)); MID$(c$(c), 2);
LINE INPUT " who or what?", s$: s$ = LCASE$(LTRIM$(RTRIM$(s$)))
PRINT : l = 1: GOTO CheckSub
'---------------------------------------------------------------------------
' Check/get s2$
'
CheckSub2:
IF s2$ <> "" THEN RETURN
PRINT a$; : LINE INPUT "?"; s2$: s2$ = LTRIM$(RTRIM$(LCASE$(s2$)))
l = 1: PRINT : GOTO CheckSub2
'---------------------------------------------------------------------------
' Monster search routine
'
Msearch:
wh = ro: ha = wh
Msearch0:
f = 0: SL = LEN(s$): m = 0
FOR x = 1 TO nm
   IF s$ = LCASE$(m$(x)) THEN
     IF m%(x, 5) = wh OR m%(x, 5) = ha THEN
       m = x: f = f + 1:  x = nm:  GOTO Msearch1
     END IF
   END IF
   IF s$ = LEFT$(LCASE$(m$(x)), SL) OR s$ = RIGHT$(LCASE$(m$(x)), SL) THEN
     IF m%(x, 5) = wh OR m%(x, 5) = ha THEN
       m = x: f = f + 1
     END IF
   END IF
Msearch1:
NEXT
IF f = 0 AND RIGHT$(s$, 1) = "s" AND SL > 1 THEN
    s$ = LEFT$(s$, SL - 1): GOTO Msearch0
END IF
RETURN
'---------------------------------------------------------------------------
' Artifact search routine
'
Asearch:
  ha = -1: wh = ha: em = ha: GOTO Asearch2
Asearch0:
  ha = -1
Asearch1:
  wh = ro: em = ro + 2000
'
Asearch2:
GOSUB Synonym: f = 0
FOR x = 1 TO na
   IF s$ = LCASE$(a$(x)) THEN
     a2 = a%(x, 4)
     IF a2 = ha OR a2 = wh OR a2 = em THEN
       a = x: f = f + 1: a = x: x = na: f = 1: GOTO Asearch3
     END IF
   END IF
   IF s$ = LEFT$(LCASE$(a$(x)), SL) OR s$ = RIGHT$(LCASE$(a$(x)), SL) THEN
     a2 = a%(x, 4)
     IF a2 = ha OR a2 = wh OR a2 = em THEN
       a = x: f = f + 1: IF f = 1 THEN xm = a
     END IF
   END IF
Asearch3:
NEXT: IF f = 1 THEN s$ = a$(a)
IF f > 1 THEN
  f = 0: a$ = "(Do you mean " + q$ + a$(xm) + q$ + " or " + q$
  a$ = a$ + a$(a) + q$ + "?)": GOSUB Lp0
END IF
RETURN
'---------------------------------------------------------------------------
' Monster tries to get a weapon
'
GetWep:
IF m%(of, 6) = -2 THEN RETURN
xm = -of - 1: w = 0: IF m%(of, 8) < 0 THEN w = ABS(m%(of, 8)) - 1
IF w > 0 AND w <= na THEN
  IF a%(w, 0) = 1 AND (a%(w, 2) = 2 OR a%(w, 2) = 3) AND a%(w, 4) = ro THEN
    GOTO GetWep1
  END IF
END IF
w = 0
FOR x = 1 TO na
   IF a%(x, 4) = xm THEN
     IF (a%(x, 2) = 2 OR a%(x, 2) = 3) THEN
       IF a%(x, 7) * a%(x, 8) > a%(w, 7) * a%(w, 8) THEN w = x
     END IF
   END IF
NEXT
IF w > 0 THEN
  a$ = m$(of) + " readies " + a$(w) + ".": GOSUB Lp0
  m%(of, 8) = w: GOTO Lp4
END IF
'
FOR x = 1 TO na
   IF a%(x, 4) = ro THEN
     IF (a%(x, 2) = 2 OR a%(x, 2) = 3) THEN
       xm = a%(x, 7) * a%(x, 8)
       IF a%(x, 0) = 1 AND xm > a%(w, 7) * a%(w, 8) THEN w = x
     END IF
   END IF
NEXT
'
GetWep1:
IF w > 0 THEN
  a$ = m$(of) + " picks up " + a$(w) + ".": GOSUB Lp0
  a%(w, 4) = -of - 1: m%(of, 8) = w: GOTO Lp4
END IF
IF m%(of, 6) = -1 AND m9 = 1 THEN GOTO Battle0
RETURN
'---------------------------------------------------------------------------
'  Combat routine
'
Battle:
w = m%(of, 8): IF m%(of, 6) = -2 THEN RETURN
IF of = 0 THEN w2 = a%(m%(0, 8), 6): hit = 0: w = m%(of, 8)
IF w < 0 THEN GOTO GetWep
'
Battle0:
' Compute players armor factor
'
a3 = 0: IF ar > 1 AND ar <= na THEN a3 = a%(ar, 5)
IF sh > 1 AND sh <= na THEN a3 = a3 + 1
IF a2 > 7 THEN a3 = 7
ea = 0: IF ae < a3 * a3 THEN ea = ae - ac * ac
'
'  Compute odds to hit
'
odds = 50 + 2 * (m%(of, 2) - m%(df, 2) - m%(of, 7) + m%(df, 7))
IF w > 0 THEN odds = odds + a%(w, 5) / 2
IF of = 0 THEN odds = odds + wa%(w2) / 4 + ea
a = a%(w, 6) * ABS(w > 0)
'
a$ = m$(of) + " " + bv$(a, INT(RND * 3)) + " at " + m$(df) + "..."
GOSUB Lp0: GOSUB RollDice
IF (rl < 5 OR rl < odds) AND rl < 97 THEN hit = 1: GOTO Battle1
'
a2 = 0
IF m%(df, 8) > 0 THEN a2 = a%(m%(df, 8), 6)
IF rl < 97 OR w = 0 THEN PRINT " --- "; rb$(a2, INT(RND * 2)); "!": GOTO Lp4
'
PRINT "...A fumble!": GOSUB Lp2: r = INT(RND * 100 + 1)
IF r < 41 THEN PRINT "    Recovered.": GOTO Lp4
'
IF r < 81 THEN
  a$ = m$(of) + " drops " + a$(w) + "!": GOSUB Lp0
  GOSUB WTRem: a%(w, 4) = ro: m%(of, 8) = -w - 1: GOTO Lp1
END IF
'
IF a%(w, 2) = 3 THEN a$ = "Sparks fly from " + a$(w) + "!": GOTO Lp9
'
IF r > 95 THEN
  PRINT " Weapon hits user!": GOSUB Lp4: df = of
  ON ABS(r = 100) + 1 GOTO Battle2, Battle3
END IF
'
IF r < 91 THEN
  a%(w, 8) = a%(w, 8) - 2
  IF a%(w, 8) > 0 THEN PRINT " Weapon damaged!": GOTO Lp4
END IF
'
PRINT " Weapon broken!": GOSUB WTRem: a%(w, 4) = 0: m%(of, 8) = -1
IF RND > .5 THEN GOTO Lp4
'
PRINT " Broken weapon hits user!": GOSUB Lp4: df = of
ON ABS(r = 100) + 1 GOTO Battle2, Battle3
'
'
Battle1:
IF of = 0 THEN
  GOSUB RollDice: up = ABS(rl > odds + wa%(w2))
  IF rl < wa%(w2) THEN
    IF ABS(ea) > INT(RND * 10) + 1 AND ae < a3 * a3 AND ae < 65 THEN
      ae = ae + 2: m = 0: GOSUB Pu2:
      a$ = a$ + s$ + " armor expertise just increased!": GOSUB Lp10
    END IF
  END IF
END IF
'
Battle2:
d = m%(of, 9): s = m%(of, 10): IF w > 0 THEN d = a%(w, 7): s = a%(w, 8)
a = 1: PRINT MID$(" ***  +++ ", ABS((df > 0)) * 5 + 1, 5);
IF rl > 5 THEN PRINT "A hit!": GOSUB Lp2: GOTO Damage0
'
Battle3:
PRINT "Well struck!": GOSUB Lp2: GOSUB RollDice
IF rl < 51 THEN a = 0: GOTO Damage0
r = 1.5: IF rl > 85 THEN r = 2
IF rl > 95 THEN r = 3
IF rl = 100 THEN r = m%(df, 1)
s = r * s
'
Damage0:
d2 = 0
FOR k = 1 TO d: d2 = d2 + INT(RND * s) + 1: NEXT
d2 = INT(d2 - a * m%(df, 7))
IF d2 < 1 AND m%(df, 7) = 0 THEN PRINT "  Blow turned!": GOTO Lp4
'
Damage1:
IF d2 < 1 THEN PRINT "  Armor absorbs damage!": GOTO Lp4
'---------------------------------------------------------------------------
' Add damage/report monster's health
'
Mstatus:
a$ = "": IF m%(df, 3) > 1 THEN a$ = "One "
a$ = a$ + m$(df) + " is ": m%(df, 13) = m%(df, 13) + d2
IF m%(df, 13) >= m%(df, 1) THEN GOTO Mdead
IF m%(df, 13) = 0 THEN GOTO Ms1
xm% = m%(df, 13) * 5 / m%(df, 1) + 1
ON xm% GOTO Ms2, Ms3, Ms4, Ms5, Ms6, Ms6
PRINT "Mstatus err, "; xm%: GOTO Lp4
'
Ms1:
a$ = a$ + "in perfect health.": GOTO Lp10
Ms2:
a$ = a$ + "OK.": GOTO Lp10
Ms3:
a$ = a$ + "hurt.": GOTO Lp10
Ms4:
a$ = a$ + "badly hurt.": GOTO Lp10
Ms5:
a$ = a$ + "gravely injured.": GOTO Lp10
Ms6:
a$ = a$ + "dying.": GOTO Lp10
'---------------------------------------------------------------------------
' Monster dies
'
Mdead:
a$ = a$ + "dead!"
IF m%(df, 3) > 1 THEN m%(df, 3) = m%(df, 3) - 1: m%(df, 13) = 0: GOTO Mdead2
'
IF df = 0 THEN die = 1: GOTO Lp10
m%(df, 8) = -1 * ABS(m%(df, 8) <> 0): m%(df, 5) = 0
m%(df, 3) = m%(df, 12): m%(df, 13) = 0
FOR a2 = 1 TO na
   IF a%(a2, 4) = -df - 1 OR a%(a2, 4) = -df - 1000 THEN a%(a2, 4) = ro
NEXT
'
Mdead0:
IF db > 0 AND db + nm - 1 <= naf THEN a%(df + db - 1, 4) = ro
IF df = 6 AND m%(7, 0) = 0 THEN m%(7, 5) = ro
IF df = 7 AND m%(8, 0) = 0 THEN m%(8, 5) = ro
IF df = 6 OR df = 7 THEN GOSUB Lp10: GOTO EnemyCheck
Mdead2:
w = m%(df, 11): t(w) = t(w) - m%(df, 1): IF df <> 20 OR of <> 0 THEN GOTO Lp10
'
' Apollo's curse
'
Curse:
GOSUB Lp10: COLOR 2
PRINT "Apollo puts a curse on you for killing his sacred python!": GOSUB Lp4
sex = ABS(sex = 0): PRINT "You are now "; sex$(sex); "!": COLOR 3: GOTO Lp4

END SUB

