Source:Dungeon Edit 7.1

From Eamon Wiki
Jump to navigation Jump to search
This page is a verbatim reproduction of original source material and should not be edited except for maintenance.
Description

The Applesoft BASIC source code of the Eamon utility program Dungeon Edit 7.1, part of the Eamon Dungeon Designer.

Source

Eamon Dungeon Designer version 7.1

Date

31 January 1995

Author

Donald Brown, John Nelson, Tom Zuchowski

License

The use of this item is permitted on the grounds that it's free or in the public domain.

Other versions

Source:Dungeon Edit

 1  REM 

DUNGEON EDIT 7.1
BY TOM ZUCHOWSKI

 2  REM  

ADAPTED FROM 'DUNGEON EDIT'
BY JOHN NELSON & DON BROWN

 7  REM 1/31/95
 8  REM 

EAMON ADVENTURER'S GUILD
7625 HAWKHAVEN DR.
CLEMMONS, NC 27012


 10  PRINT  CHR$ (4);"MAXFILES 7":SL$ = "6":DR$ = "1"
 30 D$ =  CHR$ (4): HOME : VTAB 5: HTAB 11: PRINT "EAMON DUNGEON EDIT": HTAB 14: PRINT "VERSION 7.1": VTAB 10: PRINT "     INSERT DISKETTE WITH ADVENTURE": PRINT : PRINT "     PRESS ANY KEY TO CONTINUE...";: POKE  - 16368,0: GET A$: PRINT 
 40  ONERR  GOTO 55
 50  PRINT D$;"OPEN EAMON.NAME": PRINT D$;"READ EAMON.NAME": INPUT DU$: INPUT ND$: INPUT DV$: PRINT D$;"CLOSE"
 55  IF  LEFT$ (DV$,1) <  > "7" THEN  PRINT : PRINT "THIS IS NOT A VERSION 7.X EAMON. USE THEPROGRAM NAMED  'DUNGEON EDIT'  FOR THIS ADVENTURE DISK.": PRINT D$;"CLOSE": END 
 60 ND =  VAL (ND$): POKE 216,0
 65  PRINT D$;"OPEN EAMON.DESC": PRINT D$;"READ EAMON.DESC": INPUT N%(1),N%(2),N%(3),N%(4),LR,LM,LA: PRINT D$;"CLOSE"
 70  PRINT D$;"OPEN EAMON.ROOMS,L";LR: PRINT D$;"OPEN EAMON.MONSTERS,L";LM: PRINT D$;"OPEN EAMON.ARTIFACTS,L";LA: PRINT D$;"OPEN EAMON.DESC,L242"
 90  GOSUB 35000
 140  ONERR  GOTO 60000
 150  HOME : FOR T = 1 TO 4: PRINT T$(T);"-";N%(T);"  ";: NEXT : PRINT : VTAB 3: PRINT  TAB( 4);"EDITING ";: INVERSE : PRINT DU$: PRINT  MID$ ("LOCK",1,LK * 4);: NORMAL 
 155  PRINT "   ";: INVERSE : PRINT  MID$ ("CONT.ISRT",1,9 * CI): NORMAL 
 160  PRINT "YOUR CHOICES ARE--":: PRINT "  1. ADD NEW ROOM,ARTIFACT,EFFECT OR": PRINT "      MONSTER"
 170  PRINT 
 180  PRINT "  2. EDIT OLD ROOM,ARTIFACT, EFFECT": PRINT "      MONSTER"
 190  PRINT 
 200  PRINT "  3. LIST NAMES OF ROOMS, ARTIFACT,ETC"
 210  PRINT 
 220  PRINT "  4. REPLACE OLD ROOM,ARTIFACT OR": PRINT "     MONSTER (WITHOUT VIEWING OLD)"
 230  PRINT 
 240  PRINT "  5. DUPLICATE A ROOM, ARTIFACT": PRINT "     OR MONSTER"
 250  PRINT 
 260  PRINT "  6. SPECIAL FUNCTIONS"
 270  PRINT 
 280  PRINT "  7. QUIT"
 290  PRINT : PRINT "ENTER KEY FOR YOUR CHOICE (1-7) ";
 300  GET A$: IF A$ =  CHR$ (12) THEN LK =  NOT LK: GOTO 150
 305  IF A$ =  CHR$ (9) THEN CI =  NOT CI: GOTO 150
 310  IF  VAL (A$) < 1 OR  VAL (A$) > 7 THEN 300
 320 C =  VAL (A$): PRINT A$
 350  ON C GOTO 1000,2000,3000,4000,5000,6000,7000
 400  IF ND$ = "" THEN DV = 4:ND$ = "6": PRINT D$;"CLOSE": GOTO 60
 410 DV = 5: PRINT D$;"CLOSE": GOTO 60
 500  REM  >> SELECT WHAT TO WORK ON
 510  VTAB 2: CALL  - 958: PRINT "DO YOU WANT TO ";C$;" A ROOM, ARTIFACT,": PRINT "  EFFECT, OR MONSTER (HIT KEY, RAEM)  ";
 520  GET A$: FOR A = 1 TO 4: IF A$ <  >  MID$ ("RAEM",A,1) THEN  NEXT : GOTO 520
 530  PRINT A$: RETURN 
 600  REM ///ROUTINE TO INPUT I$, HAVING BEEN PASSED I2$
 601  IF  NOT TL THEN TL = 238: GOTO 605
 602  CALL  - 958: IF TL > 5 THEN  HTAB 1:V =  PEEK (37): FOR I = 1 TO TL: PRINT U$;: NEXT : PRINT : VTAB V + 1
 605 I$ = "":IS = 0
 610  PRINT I2$;: IF TL > 5 THEN  PRINT U$;: PRINT  CHR$ (8);
 612  IF  LEN (I2$) THEN  FOR A = 1 TO  LEN (I2$): PRINT  CHR$ (8);: NEXT 
 615  GET A$: IF A$ <  >  CHR$ (13) THEN 619
 616  IF I$ = "" THEN  PRINT  CHR$ (7);: GOTO 605
 617  IF A$ =  CHR$ (13) THEN  CALL  - 958: PRINT 
 618  RETURN 
 619  IF A$ =  CHR$ (17) AND LK THEN  POP : POP : GOTO 900
 620  IF (A$ >  CHR$ (31) OR A$ =  CHR$ (9) OR (A$ =  CHR$ (21) AND  NOT  LEN (I2$))) AND  LEN (I$) +  LEN (I2$) = TL THEN  PRINT  CHR$ (7);: GOTO 615
 622  IF A$ >  CHR$ (31) AND IS THEN  PRINT A$;:I$ = I$ + A$: GOTO 610
 625  IF A$ >  CHR$ (31) THEN  PRINT A$;:I$ = I$ + A$:I2$ =  MID$ (I2$,2): GOTO 615
 630  IF A$ =  CHR$ (5) THEN  PRINT I2$;:I$ = I$ + I2$:I2$ = "": GOTO 615
 635  IF A$ =  CHR$ (2) AND  LEN (I$) THEN  FOR A = 1 TO  LEN (I$): PRINT  CHR$ (8);: NEXT :I2$ = I$ + I2$:I$ = "": GOTO 615
 640  IF A$ =  CHR$ (4) THEN I2$ =  MID$ (I2$,2): GOTO 610
 642  IF A$ =  CHR$ (9) AND CI THEN IS =  NOT IS:H =  PEEK (36):V =  PEEK (37): HTAB 39: VTAB 1: INVERSE : PRINT  MID$ (" I",IS + 1,1): NORMAL : HTAB H + 1: VTAB V + 1: GOTO 615
 645  IF A$ =  CHR$ (9) THEN I2$ = " " + I2$: GOTO 610
 650  IF A$ =  CHR$ (21) AND  LEN (I2$) THEN A$ =  LEFT$ (I2$,1): GOTO 625
 655  IF A$ =  CHR$ (21) THEN A$ = " ": GOTO 625
 660  IF A$ =  CHR$ (8) AND  LEN (I$) > 1 THEN I2$ =  RIGHT$ (I$,1) + I2$:I$ =  LEFT$ (I$, LEN (I$) - 1): PRINT A$;: GOTO 615
 665  IF A$ =  CHR$ (8) AND  LEN (I$) THEN I2$ = I$ + I2$: PRINT A$;: GOTO 605
 670  IF A$ =  CHR$ (8) THEN 605
 675  IF A$ =  CHR$ (27) THEN  PRINT I2$:I$ = I$ + I2$: GOTO 616
 680  GOTO 615
 700  REM  >> GET NUMBER
 710  VTAB 6: CALL  - 958: PRINT "INPUT NUMBER OF ";T$(TY);" TO ";C$
 720  PRINT "   (1-";N%(TYPE);: INPUT ")  ";A$:NO =  VAL (A$): IF NO < 1 OR NO > N%(TYPE) + (C$ = "CREATE") OR NO <  >  INT (NO) THEN  POP : GOTO 150
 750  RETURN 
 800  REM  >> LOCKED <<
 810  HOME : ON C GOTO 1020,2020,3010,4020,5020,150,150
 890  GOTO 150
 900  REM   >> DELETE FROM LOCK
 910 LK =  NOT LK: IF C = 1 THEN N%(TYP) = N%(TYP) - 1: GOTO 150
 990  GOTO 150
 1000  REM  >> ADD ITEM
 1010 C$ = "ADD": GOSUB 500:TYPE = A
 1020  ON TYPE GOTO 1100,1200,1300,1400
 1100  REM  >> ADD ROOM
 1110 N%(1) = N%(1) + 1:NO = N%(1):REC = NO
 1120 NA$ = "":DE$ = "": FOR D = 1 TO ND:RD%(D) = DD%(D) + NO * (DD%(D) <  > 0): NEXT :LT = DL
 1130  GOSUB 11000
 1140  GOSUB 31100: GOSUB 18000: IF  NOT LK THEN 150
 1150  GOTO 800
 1200  REM  >> ADD ARTIFACT
 1210 N%(2) = N%(2) + 1:NO = N%(2):REC = NO + 200
 1220 NA$ = "":DE$ = "": FOR D = 1 TO AF:AD%(D) = DA%(D): NEXT : FOR X = 1 TO 4:AL$(X + AF) = FM$(FMP%(AD%(2)),X): NEXT 
 1230  GOSUB 12000: GOSUB 31200: GOSUB 18000: IF  NOT LK THEN  GOTO 150
 1240  GOTO 800
 1300  REM  >> ADD EFFECT
 1310 N%(3) = N%(3) + 1:NO = N%(3):REC = NO + 400
 1320 DE$ = ""
 1330  GOSUB 13000: GOSUB 18000: IF  NOT LK THEN  GOTO 150
 1340  GOTO 800
 1400  REM  >> ADD MONSTER
 1410 N%(4) = N%(4) + 1:NO = N%(4):REC = NO + 600
 1420 NA$ = "":DE$ = "": FOR D = 1 TO MF:M%(D) = DM%(D): NEXT 
 1430  GOSUB 14000: GOSUB 18000: GOSUB 31400: IF  NOT LK THEN  GOTO 150
 1440  GOTO 800
 2000  REM  >> EDIT OLD ITEM
 2010 C$ = "EDIT": GOSUB 500:TYPE = A
 2020  ON TYPE GOTO 2100,2200,2300,2400
 2100  REM  >> EDIT ROOM
 2110  GOSUB 700:REC = NO: GOSUB 21000: GOSUB 20000: GOTO 1130
 2200  REM  >> EDIT ARTIFACT
 2220  GOSUB 700:REC = NO + 200: GOSUB 20000: GOSUB 22000: FOR X = 1 TO 4:AL$(AF + X) = FML$(FMP%(AD%(2)),X): NEXT 
 2230  GOTO 1230
 2300  REM  >> EDIT EFFECT
 2310  GOSUB 700:REC = NO + 400: GOSUB 20000: GOTO 1330
 2400  REM  >> EDIT MONSTER
 2410  GOSUB 700:REC = NO + 600: GOSUB 24000: GOSUB 20000: GOTO 1430
 3000  REM  >> LIST THINGS
 3010 C$ = "LIST": GOSUB 500:TYPE = A: IF N%(TYPE) = 0 THEN  PRINT : INVERSE : PRINT "NONE OF THAT TYPE TO PRINT!": NORMAL : PRINT : PRINT "(HIT ANY KEX TO CONTINUE)  ";: GET A$: PRINT : GOTO 150
 3020  IF HC THEN  PRINT D$;"PR#1"
 3030  ON TYPE GOTO 3100,3200,3300,3400
 3100 F$ = "EAMON.ROOMS":A$ = "ROOM": GOTO 3500
 3200 F$ = "EAMON.ARTIFACTS":A$ = "ARTIFACT": GOTO 3500
 3300  TEXT : HOME :LP = 0: PRINT "LISTING ";:A$ = "EFFECT": INVERSE : PRINT A$;"S": NORMAL : PRINT : POKE 34,2: FOR A = 1 TO N%(TYPE):REC = A + 400: GOSUB 20000: PRINT A$;" #";A
 3310  IF HC THEN  FOR X = 1 TO  LEN (DE$) STEP 40: PRINT  MID$ (DE$,X,40):LP = LP + 1: NEXT 
 3320  IF  NOT HC THEN  PRINT DE$:LP = LP + 1
 3330  PRINT : PRINT :LP = LP + 1: IF LP > 12 + 35 * HC THEN  GOSUB 3600
 3370  NEXT A: PRINT D$;"PR#0"
 3380  PRINT : PRINT "(HIT ANY KEY TO RETURN TO MENU)  ";: GET A$: PRINT : TEXT : GOTO 150
 3400 F$ = "EAMON.MONSTERS":A$ = "MONSTER": GOTO 3500
 3500  REM  >> LIST STUFF
 3510  TEXT : HOME :LP = 0: PRINT "LISTING ";: INVERSE : PRINT A$;"S": NORMAL : PRINT : POKE 34,2: FOR A = 1 TO N%(TYP): PRINT D$;"READ ";F$;",R";A: INPUT NA$: PRINT D$: PRINT A$;"#";A;": ";: INVERSE : PRINT NA$: NORMAL 
 3520 LP = LP + 1: IF LP > 19 + 30 * HC THEN  GOSUB 3600
 3560  NEXT A: PRINT D$;"PR#0"
 3570  PRINT : PRINT "PRESS ANY KEY TO RETURN TO MENU";: GET A$: PRINT : TEXT : GOTO 150
 3600  REM  >> PAGE BREAK
 3610 LP = 0: IF HC THEN  PRINT  CHR$ (12);"LISTING ";A$;"S": PRINT : RETURN 
 3620  PRINT : PRINT "      (PRESS ANY KEY TO CONTINUE)     ";: POKE  - 16368,0: GET B$: PRINT : VTAB  PEEK (37) - 1: CALL  - 958
 3690  RETURN 
 4000  REM   >>  REPLACE ITEM
 4010 C$ = "REPLACE": GOSUB 500:TYPE = A
 4020  ON TYPE GOTO 4100,4200,4300,4400
 4100  REM  >> REPLACE ROOM
 4110  GOSUB 700: GOTO 1120
 4200  REM  >> REPLACE ARTIF.
 4210  GOSUB 700:REC = NO + 200: GOTO 1220
 4300  REM  >> REPLACE EFFECT
 4310  GOSUB 700:REC = NO + 400: GOTO 1320
 4400  REM  >> REPLACE MONSTER
 4410  GOSUB 700:REC = NO + 600: GOTO 1420
 5000  REM  >> DUPLICATE
 5010 C$ = "DUPLIC.": GOSUB 500:TYPE = A
 5020 C$ = "DUP. FROM": GOSUB 700:FROM = NO:C$ = "CREATE": GOSUB 700:NC = NO
 5030  IF NO > N%(TYPE) THEN  PRINT "CREATING A ";T$(TYPE);" FROM ANOTHER.":N%(TYPE) = N%(TYPE) + 1
 5040  ON TYPE GOTO 5100,5200,5300,5400
 5100  REM  >> DUP. ROOM
 5110 NO = FROM:REC = NO: GOSUB 21000: GOSUB 20000:REC = NC:NO = NC: GOTO 1130
 5200  REM  >> DUP. ART.
 5210 NO = FROM:REC = NO + 200: GOSUB 22000: GOSUB 20000:REC = NC + 200:NO = NC: GOTO 1230
 5300  REM  >> DUP. EFF.
 5310 NO = FROM:REC = NO + 400: GOSUB 20000:REC = NC + 400: GOSUB 18000
 5390  GOTO 150
 5400  REM  >> DUP. MONSTER
 5410 NO = FROM: GOSUB 24000: GOSUB 20000:REC = NC + 600:NO = NC: GOTO 1430
 6000  REM   >> SPECIAL FUNCTIONS
 6005  HOME :SF = 9: INVERSE : PRINT "   SELECT FUNCTION OR PRESS <RETURN>   ": NORMAL : PRINT 
 6010  PRINT "  1. (NOT USED)": PRINT 
 6015  PRINT "  2. DELETE LAST R,A,E,M": PRINT 
 6020  PRINT "  3. ADD TO NBR OF R,A,E,M": PRINT 
 6025  PRINT "  4. TOGGLE LOCK MODE (NOW "; MID$ ("OFFON",LK * 3 + 1,3 - LK);")"
 6030  PRINT : PRINT "  5. GENERATE DUMMY ARTIFACTS"
 6035  PRINT : PRINT "  6. TOGGLE PRINTER (NOW "; MID$ ("OFFON",HC * 3 + 1,3 - HC);")": IF SF < 7 THEN 6040
 6038  PRINT : PRINT "  7. CHANGE DEFAULTS": PRINT : PRINT "  8. CHANGE DATA ASSIGNMENTS": PRINT : PRINT "  9. LOAD/SAVE CUSTOMIZED PARAMETERS"
 6040  PRINT : PRINT "INPUT YOUR CHOICE (1-";SF;"):";
 6045  GET S$: IF S$ =  CHR$ (13) THEN  PRINT : GOTO 150
 6050  IF  VAL (S$) < 1 OR  VAL (S$) > SF THEN 6045
 6055  HOME : ON  VAL (S$) GOTO 6045,6200,6300,6400,6500,6600,6700,6800,6900
 6100  REM  >> GEN. DEAD
 6105  VTAB 6: CALL  - 958: PRINT "ALL DEAD BODIES (Y/N):";
 6110  GET A$: IF A$ <  > "Y" AND A$ <  > "N" THEN 6110
 6120  PRINT A$: IF A$ = "Y" THEN A = N%(2) + 1:M = 1:LA% = A + N%(4) - 1: GOTO 34500
 6125  INPUT "MONSTER NUMBER TO START ON:";M
 6130 A = N%(2) + 1:LA% = A + N%(4) - M
 6140  GOTO 34500
 6200  REM  >> DELETE
 6210 C$ = "DELETE": GOSUB 500:N%(A) = N%(A) - 1
 6220  GOTO 6000
 6300  REM  === INCREMENT
 6310 C$ = "INCRMNT": GOSUB 500:N%(A) = N%(A) + 1: GOTO 6000
 6400 LK =  NOT LK: GOTO 6000
 6500  REM  >> GEN. DUMMY ART.
 6510  PRINT 
 6520  INPUT "NBR ART. TO GEN:";NA
 6530  FOR A = 1 TO NA: PRINT D$"WRITE EAMON.DESC,R";N%(2) + 201: PRINT "YOU SEE ARTIFACT ";N%(2) + 1;"."
 6540  PRINT D$"WRITE EAMON.ARTIFACTS,R";N%(2) + 1: PRINT "ARTIFACT ";N%(2) + 1: FOR X = 1 TO 8: PRINT 0: NEXT :N%(2) = N%(2) + 1: NEXT 
 6560  PRINT D$: GOTO 150
 6600  REM   >> TOGGLE H/C
 6610 HC =  NOT HC: GOTO 150
 6700  REM  >> CHANGE DEFAULTS
 6710  HOME : PRINT  SPC( 12);"CHANGE DEFAULTS": VTAB 6: PRINT "SELECT DEFAULT TO CHANGE:": PRINT : PRINT "   1. ROOM VALUES": PRINT : PRINT "   2. MONSTER VALUES"
 6720  PRINT : PRINT "   3. ARTIFACT VALUES": PRINT : PRINT "   4. RETURN TO MAIN MENU": PRINT : PRINT "INPUT YOUR CHOICE (1-4):";
 6730  GET A$: IF  VAL (A$) < 1 OR  VAL (A$) > 4 THEN 6730
 6740  PRINT A$: ON  VAL (A$) GOTO 15100,15200,15300,150
 6800  REM   >> CHANGE DATA ASSIGN
 6810  HOME : PRINT  SPC( 08);"CHANGE DATA ASSIGNMENTS": VTAB 6: PRINT "SELECT DATA TYPE:": PRINT "  1. MONSTER DATA": PRINT "  2. ARTIFACT DATA": PRINT "  3. CHANGE FORMAT POINTER": PRINT "  4. CHANGE A FORMAT"
 6820  PRINT "  5. ARTIFACT TYPES": PRINT "  6. ADD A FORMAT": PRINT "  7. RETURN TO MAIN MENU": PRINT "INPUT THE NUMBER (1-7):";
 6830  GET A$: IF  VAL (A$) < 1 OR  VAL (A$) > 7 THEN 6830
 6840  PRINT A$: ON  VAL (A$) GOTO 10100,10200,10300,10400,10500,10600,140
 6900  REM  >> LOAD/SAVE PARAM.
 6910  HOME : PRINT  SPC( 10);"LOAD/SAVE PARAMETERS": VTAB 6: CALL  - 958: PRINT "SELECT LOAD/SAVE FUNCTION:": PRINT : PRINT "  1. LOAD PARAMETERS": PRINT : PRINT "  2. SAVE PARAMETERS": PRINT : PRINT "  3. RETURN"
 6920  PRINT : PRINT "INPUT NUMBER (1-3): ";
 6930  GET A$: IF A$ < "1" OR A$ > "3" THEN 6930
 6940  PRINT A$: ON  VAL (A$) GOTO 7100,7200,150
 7000  REM  >> QUIT
 7010  PRINT D$;"WRITE EAMON.DESC,R0": FOR T = 1 TO 4: PRINT N%(T): NEXT : PRINT LR: PRINT LM: PRINT LA
 7020  PRINT D$;"CLOSE"
 7030  POKE 216,0: END 
 7100  REM  >> LOAD PARAM
 7110  VTAB 6: CALL  - 958: PRINT "NAME OF PARAMETERS FILE:(? FOR CATALOG)": PRINT : INPUT "     ===> ";A$
 7120  IF  LEFT$ (A$,1) = "?" THEN  PRINT D$;"CATALOG"; MID$ (A$,2): PRINT : GET A$: PRINT : HOME : GOTO 7100
 7130  PRINT D$;"OPEN ";A$: PRINT D$"READ ";A$: INPUT AF: FOR X = 1 TO AF: INPUT AL$(X): NEXT : FOR X = 1 TO AF: INPUT DA%(X): NEXT : INPUT NF: FOR F = 1 TO NF: FOR X = 1 TO 4: INPUT FM$(F,X): NEXT : NEXT 
 7140  FOR F = 1 TO NF: FOR X = 1 TO 4: INPUT FD%(F,X): NEXT : NEXT : INPUT MF: FOR X = 1 TO MF: INPUT M$(X): NEXT : FOR X = 1 TO MF: INPUT DM%(X): NEXT : INPUT DT: FOR X = 0 TO DT: INPUT TY$(X): NEXT : PRINT D$;"CLOSE ";A$
 7190  GOTO 150
 7200  REM  >> SAVE PARAM
 7210  VTAB 6: CALL  - 958: PRINT "NAME OF PARAMETERS FILE:": PRINT : INPUT "     ===> ";A$
 7220  IF  LEFT$ (A$,1) = "?" THEN  PRINT D$;"CATALOG"; MID$ (A$,2): PRINT : GET A$: GOTO 7200
 7230  PRINT D$;"OPEN ";A$: PRINT D$"WRITE ";A$: PRINT AF: FOR X = 1 TO AF: PRINT AL$(X): NEXT : FOR X = 1 TO AF: PRINT DA%(X): NEXT : PRINT NF: FOR F = 1 TO NF: FOR X = 1 TO 4: PRINT FM$(F,X): NEXT : NEXT 
 7240  FOR F = 1 TO NF: FOR X = 1 TO 4: PRINT FD%(F,X): NEXT : NEXT : PRINT MF: FOR X = 1 TO MF: PRINT M$(X): NEXT : FOR X = 1 TO MF: PRINT DM%(X): NEXT : PRINT DT: FOR X = 0 TO DT: PRINT TY$(X): NEXT : PRINT D$;"CLOSE ";A$
 7290  GOTO 150
 10100  REM  >> MON. DATA ASSIGN
 10110  HOME : FOR X = 1 TO MF: PRINT "  ";X;". ";M$(X): NEXT : PRINT "  ";MF + 1;". NEW FIELD": PRINT "  ";MF + 2;". RETURN TO PREVIOUS MENU"
 10120  INPUT "INPUT FIELD NUMBER:";A$: IF  VAL (A$) < 1 OR  VAL (A$) > MF + 2 THEN  PRINT "TRY AGAIN, FROGFACE.": GOTO 10120
 10125  IF  VAL (A$) = MF + 2 THEN 6800
 10130 X =  VAL (A$): PRINT : INPUT "NEW LABEL:";A$: IF A$ = "" AND X = MF THEN MF = MF - 1: GOTO 10100
 10140  IF A$ = "" THEN 150
 10150 M$(X) = A$: IF X > MF THEN MF = MF + 1
 10190  GOTO 10100
 10200  REM  >> ARTIF. DATA ASSIGN
 10210  HOME : FOR X = 1 TO AF: PRINT "  ";X;". ";AL$(X): NEXT : PRINT "  ";AF + 1;". NEW FIELD": PRINT "  ";AF + 2;". RETURN TO PREVIOUS MENU"
 10220  INPUT "INPUT FIELD NUMBER:";A$: IF  VAL (A$) < 1 OR  VAL (A$) > AF + 2 THEN  PRINT "TRY AGAIN, FROGFACE.": GOTO 10220
 10225  IF  VAL (A$) = AF + 2 THEN 6800
 10230 X =  VAL (A$): PRINT : INPUT "NEW LABEL:";A$: IF A$ = "" AND X = AF THEN AF = AF - 1: GOTO 10200
 10240  IF A$ = "" THEN 150
 10250 AL$(X) = A$: IF X > AF THEN AF = AF + 1
 10290  GOTO 10200
 10300  REM   === CHANGE FPTR ===
 10310  VTAB 6: CALL  - 958: PRINT "FOR WHICH ARTIFACT TYPE:": FOR X = 0 TO DT: PRINT "   ";X;" = ";TY$(X); MID$ ("..................................",1,20 -  LEN (TY$(X)) * ( LEN (TY$(X)) < 20));FM%(X): NEXT 
 10320  PRINT "INPUT NUMBER 0 - ";DT;: INPUT ":";A$
 10330  IF  VAL (A$) > DTY OR  VAL (A$) < 0 THEN  VTAB  PEEK (37): GOTO 10320
 10335 X =  VAL (A$)
 10340  PRINT "NEW POINTER (0-";NF;: INPUT "): ";A$: IF  VAL (A$) < 0 OR  VAL (A$) > NF THEN  VTAB  PEEK (37): GOTO 10340
 10350 FMP%(X) =  VAL (A$): GOTO 6800
 10400  REM  === CHANGE FORMAT ===
 10410  VTAB 6: CALL  - 958: PRINT "INPUT FORMAT NUMBER:";
 10420  INPUT A$: IF A$ < "1" OR A$ >  STR$ (NF) THEN 10420
 10430  PRINT A$:F =  VAL (A$)
 10440  VTAB 6: CALL  - 958: FOR X = 1 TO 4: PRINT "FIELD ";AF + X;" LABEL:";:I2$ = FM$(F,X):TL = 0: GOSUB 600:FM$(F,X) = I$
 10460  PRINT "DEFAULT DATA: ";:I2$ =  STR$ (FD%(F,X)):TL = 0: GOSUB 600: IF  ABS ( VAL (A$)) < 32765 THEN FD%(F,X) =  VAL (I$)
 10480  NEXT 
 10490  GOTO 6800
 10500  REM   >> ART TYPES
 10510  HOME : FOR X = 0 TO DT: PRINT "  ";X;". ";TY$(X): NEXT : PRINT "  ";DT + 1;". NEW TYPE": PRINT "  ";DT + 2;". RETURN TO PREVIOUS MENU"
 10520  INPUT "INPUT TYPE NUMBER:";A$: IF  VAL (A$) < 0 OR  VAL (A$) > DT + 2 THEN  PRINT "TRY AGAIN, FROGFACE.": GOTO 10520
 10530 X =  VAL (A$): IF X = DT + 2 THEN 6800
 10540  PRINT : PRINT "NEW TYPE:";:I2$ = TY$(X):TL = 0: GOSUB 600: IF I$ = "" AND X = DT THEN DT = DT - 1: GOTO 10500
 10550  IF I$ = "" THEN 150
 10560  IF X = DT + 1 THEN DT = DT + 1:TY$(DT) = I$: GOTO 150
 10570 TY$(X) = I$
 10590  GOTO 10500
 10600  REM  === ADD A FORMAT ===
 10610  VTAB 6: CALL  - 958
 10620 NF = NF + 1: FOR X = 1 TO 4: PRINT "FIELD ";X + AF;" LABEL:";:I2$ = "":TL = 0: GOSUB 600:FML$(NF,X) = I$: PRINT "DEFAULT DATA:";:I2$ = "0": GOSUB 600
 10630  IF  ABS ( VAL (I$)) < 32765 THEN FD%(NF,X) =  VAL (I$)
 10640  NEXT 
 10690  GOTO 6800
 11000  REM  >> EDIT ROOM
 11010  HOME : PRINT "ENTERING ROOM ";NO: PRINT :I2$ = NA$:TL = RL: PRINT "ENTER ROOM NAME:"
 11020  GOSUB 600: IF I$ = "" THEN 11010
 11030  VTAB 3: CALL  - 958: PRINT "ROOM NAME:": PRINT " ";: INVERSE : PRINT I$: NORMAL :NA$ = I$:TL = 238: VTAB 6:I2$ = DE$
 11040  PRINT "ENTER ROOM DESCRIPTION:": GOSUB 600: VTAB 6: CALL  - 958: PRINT "ROOM DESCRIPTION:": INVERSE : PRINT I$: NORMAL :DE$ = I$: PRINT 
 11050  CALL  - 958: PRINT "FOR EACH DIRECTION ENTER THE ROOM # THATTHIS ROOM CONNECTS TO:"
 11052  PRINT "  NO CONNECTION:  0": PRINT "  EXIT TO MAIN HALL:  -99": PRINT "  DOORS:  ARTIFACT # OF DOOR + 500": PRINT "  NEGATIVE NUMBER FOR UNUSUAL THINGS"
 11055  FOR D = 1 TO ND
 11060  PRINT "MOVE ";DD$(D);"...";:I2$ =  STR$ (RD%(D)):TL = 5: GOSUB 600:RD%(D) =  VAL (I$): IF RD%(D) <  >  INT (RD%(D)) OR  STR$ (RD%(D)) <  > I$ THEN  VTAB  PEEK (37): GOTO 11060
 11080  NEXT : PRINT "LIGHT (0 = NONE; 1 = NORMAL) ";:I2$ =  STR$ (LT): GOSUB 600:LT =  VAL (I$): RETURN 
 12000  REM  >> EDIT ARTIFACT
 12010  HOME : PRINT "ENTERING ARTIFACT ";NO:I2$ = NA$:TL = AL: PRINT : PRINT "ENTER ARTIFACT NAME:"
 12020  GOSUB 600: IF I$ = "" THEN 12010
 12030  VTAB 3: CALL  - 958: PRINT "ARTIFACT NAME:": PRINT " ";: INVERSE : PRINT I$: NORMAL :NA$ = I$: VTAB 6:I2$ = DE$:TL = 238
 12040  PRINT "ARTIFACT DESCRIPTION:":I2$ = DE$: GOSUB 600: VTAB 6: CALL  - 958: PRINT "ARTIFACT DESCRIPTION:": INVERSE : PRINT I$: NORMAL :DE$ = I$: PRINT 
 12050  FOR D = 1 TO AF + 4: IF D = 2 OR (D = AF + 2 AND AD%(2) > 1 AND AD%(2) < 4) THEN  GOSUB 12200
 12052  IF D = 8 THEN  IF AD%(2) = 8 THEN  PRINT " 1 = HIDDEN DOOR"
 12055  IF D = 7 THEN  IF AD%(2) = 4 OR AD%(2) = 6 OR AD%(2) = 7 THEN  PRINT "OPEN = 1;  CLOSED = 0"
 12060  IF D = 2 THEN PT = AD%(2)
 12069  IF D = 4 THEN  PRINT "ARTIFACT# + 500....INSIDE ARTIFACT#": PRINT "ROOM# + 200........EMBEDDED IN ROOM#": PRINT "(- MONSTER# - 1)...MONSTER# CARRYING IT": PRINT "-1.................CARRIED BY PLAYER": PRINT "-999...............WORN BY PLAYER"
 12070  PRINT AL$(D);" : ";:I2$ =  STR$ (AD%(D)):TL = 5: GOSUB 600:AD%(D) =  VAL (I$)
 12075  IF D = 2 AND PT <  > AD%(2) THEN  GOSUB 12300
 12080  NEXT 
 12090  RETURN 
 12200  ON D - 1 GOTO 12250,12290,12290,12290,12260
 12210  GOTO 12290
 12250  FOR X = 0 TO DT STEP 2: PRINT "  ";X;" = ";TYP$(X);: IF X < DT THEN  PRINT  TAB( 22);X + 1;" = ";TYP$(X + 1)
 12255  NEXT : PRINT : RETURN 
 12260  PRINT "1=AXE, 2=BOW, 3=MACE, 4=SPEAR, 5=SWORD": RETURN 
 12290  RETURN 
 12300  FOR X = 1 TO 4:AL$(X + AF) = FM$(FMP%(AD%(2)),X): NEXT 
 12310  FOR X = 1 TO 4:AD%(AF + X) = FD%(FMP%(AD%(2)),X): NEXT 
 12390  RETURN 
 13000  REM  >> EDIT EFFECT
 13010  PRINT : PRINT "ENTER EFFECT #";NO:I2$ = DE$:TL = 238: GOSUB 600:DE$ = I$: PRINT : RETURN 
 14000  REM  >> EDIT MONSTER
 14010  HOME : PRINT "ENTERING MONSTER # ";NO: PRINT : PRINT "** BE SURE TO ENTER *ALL* MONSTER NAMES IN A SINGULAR FORM **": PRINT 
 14015  PRINT :I2$ = NA$:TL = ML: PRINT "ENTER NAME:": GOSUB 600: IF I$ = "" THEN 14010
 14020 NA$ = I$: PRINT : PRINT "ENTER DESC--":I2$ = DE$:TL = 238: GOSUB 600:DE$ = I$: HOME : PRINT "MONSTER # ";NO;"  ";: INVERSE : PRINT NA$: NORMAL : PRINT 
 14040  FOR M = 1 TO MF
 14100  IF M = 1 OR M = 6 THEN  PRINT "   IF GROUP MONSTER ENTER VALUE FOR JUST   ONE MEMBER OF GROUP"
 14110  IF M = 3 THEN  PRINT "   SINGLE MONSTERS - ENTER 1": PRINT "   GROUP MONSTERS - ENTER # OF MEMBERS"
 14120  IF M = 11 THEN  PRINT "   1=ENEMY   2=NEUTRAL   3=FRIEND": PRINT "   FOR RANDOM FRIENDLINESS,": PRINT "  ENTER PERCENT LIKELY FRIENDLY + 100"
 14130  IF M = 8 THEN  PRINT : PRINT "  ART.#...WEAPON #": PRINT "  0.......NATURAL WEAPONS": PRINT "  - 1.....WEAPONLESS"
 14150  PRINT "ENTER ";M$(M);": ";:I2$ =  STR$ (M%(M)):TL = 5: GOSUB 600:M%(M) =  VAL (I$): IF  STR$ (M%(M)) <  > I$ THEN  PRINT  CHR$ (7): VTAB  PEEK (37): GOTO 14150
 14160  NEXT 
 14170  RETURN 
 15100  REM  >> CHG DEF. ROOM
 15110  HOME : PRINT "INPUT DEFAULT VALUES DESIRED.": FOR D = 1 TO ND:RD%(D) = DD%(D): NEXT : GOSUB 11055
 15120  FOR D = 1 TO ND:DD%(D) = RD%(D): NEXT :DL = LT
 15130  GOTO 150
 15200  REM  >> CHG DEF. MONST.
 15210  HOME : PRINT "ENTER NEW DEFAULT VALUES FOR EACH FIELD.": FOR D = 1 TO MF:M%(D) = DM%(D): NEXT : GOSUB 14040: FOR D = 1 TO MF:DM%(D) = M%(D): NEXT 
 15290  GOTO 150
 15300  REM  >> CHG DEF. ART.
 15310  HOME : PRINT "INPUT NEW DEFAULT VALUES FOR ALL FIELDS.": FOR D = 1 TO AF:AD%(D) = DA%(D): NEXT : GOSUB 12050: FOR D = 1 TO AF:DA%(D) = AD%(D): NEXT 
 15320  GOTO 150
 18000  REM >> WRITE DESC
 18010  PRINT D$;"WRITE EAMON.DESC,R";REC: PRINT  CHR$ (34);DE$; CHR$ (34): PRINT D$: RETURN 
 20000  REM >> READ DESC
 20010  PRINT D$;"READ EAMON.DESC,R";REC: INPUT DE$: PRINT D$
 20020  RETURN 
 21000  REM  >> READ ROOM
 21010  PRINT D$;"READ EAMON.ROOMS,R";NO: INPUT NA$: FOR D = 1 TO ND: INPUT RD%(D): NEXT 
 21020  INPUT LT
 21030  PRINT D$: RETURN 
 22000  REM  >> READ ART.
 22010  PRINT D$;"READ EAMON.ARTIFACTS,R";NO: INPUT NA$: FOR X = 1 TO 8: INPUT AD%(X): NEXT 
 22020  PRINT D$: RETURN 
 24000  REM  >> READ MONSTER
 24010  PRINT D$"READ EAMON.MONSTERS,R";NO: INPUT NA$: FOR D = 1 TO MF: INPUT M%(D): NEXT 
 24090  PRINT D$: RETURN 
 31100  REM  >> WRITE ROOM
 31110  PRINT D$;"WRITE EAMON.ROOMS,R";NO: PRINT  CHR$ (34);NA$
 31120  FOR D = 1 TO ND: PRINT RD%(D): NEXT : PRINT LT: PRINT D$
 31130  RETURN 
 31200  REM  >> WRITE ART.
 31210  PRINT D$;"WRITE EAMON.ARTIFACTS,R";NO: PRINT  CHR$ (34);NA$; CHR$ (34): FOR D = 1 TO AF + 4: PRINT AD%(D): NEXT 
 31220  PRINT D$: RETURN 
 31400  REM  >> WRITE MONSTER
 31410  PRINT D$;"WRITE EAMON.MONSTERS,R";NO: PRINT  CHR$ (34);NA$; CHR$ (34): FOR M = 1 TO MF: PRINT M%(M): NEXT : PRINT D$
 31420  RETURN 
 34500  REM  === GENERATE DEAD
 34510  FOR X = A TO LA%: PRINT D$;"READ EAMON.MONSTERS,R";M: INPUT A$: FOR X2 = 1 TO 6: INPUT MD%(X2): NEXT : PRINT D$:M = M + 1
 34515  VTAB 6: CALL  - 958: PRINT "   1. THE DEAD BODY OF ";A$: PRINT : PRINT "   2. THE DEAD BODY OF THE ";A$: PRINT : PRINT "CHOOSE THE CORRECT PHRASE (1-2):";
 34518  GET X$: IF X$ < "1" OR X$ > "2" THEN 34518
 34519 THE$ =  MID$ ("THE ",1,(X$ = "2") * 4): PRINT X$
 34520 NA$ = "DEAD " + A$:DE$ = "YOU SEE THE DEAD BODY OF " + THE$ + A$ + "."
 34530  IF  LEN (DE$) > 40 THEN  IF  MID$ (DE$,41,1) <  > " " THEN DE$ =  LEFT$ (DE$,25): FOR S = 26 TO 40:DE$ = DE$ + " ": NEXT :DE$ = DE$ + THE$ + A$ + "."
 34535  FOR X2 = 1 TO AF + 4:AD%(X2) = 0: NEXT :AD%(2) = 1:AD%(3) = MD%(6)
 34540 REC = X + 200:NO = X: GOSUB 18000:N%(2) = N%(2) + 1
 34560  GOSUB 31200: NEXT 
 34590  GOTO 150
 35000  REM  === SETUP DATA 
 35005 RL = LR - 34:ML = LM - 62:AL = LA - 42:U$ =  CHR$ (95)
 35010 CX = 5: FOR T = 1 TO 4: READ T$(T): NEXT 
 35011  DATA ROOM,ART.,EFF.,MONS.
 35015  READ DT: DIM TYP$(DT + CX): FOR T = 0 TO DT: READ TYP$(T): NEXT 
 35016  DATA 11,GOLD,TREASURE,WEAPON,MAG WEAPON,CONTAINER,LIGHT,HEALING,READABLE,DOOR/GATE,KEY,BOUND MONSTER,WEARABLE
 35018 AF = 4: DIM AL$(AF + 4 + CX),AD%(AF + 4 + CX): FOR T = 1 TO AF: READ AL$(T): NEXT 
 35019  DATA VALUE,TYPE,WEIGHT,ROOM
 35020  FOR T = 1 TO AF: READ DA%(T): NEXT 
 35025  DATA 50,1,5,0: REM ART. DEFAULTS
 35030  FOR D = 1 TO 10: READ DD$(D): NEXT 
 35032  DATA  N ,S ,E ,W ,U ,D ,NE,NW,SE,SW
 35035  FOR T = 1 TO 10: READ DD%(T): NEXT : READ DL
 35040  DATA 0,0,0,0,0,0,0,0,0,0,1: REM DEFAULT ROOM #S
 35050 MF = 11: DIM M$(MF + 5),M%(MF + 5): FOR M = 1 TO MF: READ M$(M): NEXT 
 35052  DATA  HD,AG,# MEMBERS,COUR,ROOM,WEIGHT,ARMOR,WEAPON#,# DICE,# SIDES,FRIEND
 35060  DIM DM%(MF + 5): FOR M = 1 TO MF: READ DM%(M): NEXT 
 35065  DATA 16,16,1,100,0,150,0,0,1,4,3: REM  MONS. DEFAULTS
 35070  READ NF: DIM FMP%(DT + 5),FML$(DT + 5,4),FD%(DT + 5,4): FOR X = 0 TO DT: READ FMP%(X): NEXT : FOR X = 0 TO NF: FOR F = 1 TO 4: READ FML$(X,F),FD%(X,F): NEXT 
 35080  NEXT 
 35090  DATA 9
 35095  DATA 0,0,1,1,2,3,4,5,6,7,8,9: REM FORMAT POINTERS
 35330  DATA USER#5,0,USER#6,0,USER#7,0,USER#8,0
 35350  DATA  ODDS,10,W.TYPE,3,DICE,1,SIDES,4,KEY#,0,STRENGTH,100,OPEN?,0,USER #8,0
 35400  DATA COUNTER,999,USER #6,0,USER #7,0,USER #8,0,HEAL AMT,10,NBR USES,5,OPEN?,1,USER #8,0
 35450  DATA  1ST EFF.,1,#EFFECTS,1,OPEN?,1,USER #8,0,ROOM BEYOND,1,KEY#,0,STRENGTH,999,HIDDEN?,0
 35500  DATA USER #5,0,USER #6,0,USER #7,0,USER #8,0
 35550  DATA MONSTER#,0,KEY#,0,GUARD#,0,USER #8,0
 35560  DATA ARMOR CLASS,0,TYPE,0,USER#7,0,USER#8,0
 35900  RETURN 
 60000  PRINT "FOUND AN ERROR - CODE "; PEEK (222): PRINT "ON LINE # "; PEEK (218) +  PEEK (219) * 256: IF  PEEK (222) = 10 THEN  PRINT "CAN'T SAVE FILE - LOCKED.": END 
 61000 D$ =  CHR$ (4): PRINT D$"OPEN EAMON.DESC,L242": PRINT D$;"WRITE EAMON.DESC,R0": FOR T = 1 TO 4: PRINT N%(T): NEXT : PRINT LR: PRINT LM: PRINT LA