%! %%Title: ADMAP -- Adventure Map utility, v2.56 (c) Fredric Ihren %%CreationDate: Sep 24 1990 %%Creator: Fredric Ihren, fred@nada.kth.se %%EndComments % v2.56: Adjusted to run under ralpage : redefinition of token and removal % of null cvx (ADMAP v2.56\n) print flush % Initstate of dictstack /dictlevel0 countdictstack def % Synonyms for operators /+ /add load def /- /sub load def /* /mul load def /: /div load def /rl /rlineto load def /cp /currentpoint load def /m /moveto load def /rm /rmoveto load def /token { dup length 0 ne { dup 0 get 37 ne { { token } stopped { pop false } { 3 -1 roll cvlit 3 1 roll } ifelse } { pop false } ifelse } { pop false } ifelse } bind def % Simple macros % /cm { 2.54 : 72 * } def /++ { dup load 1 + store } def /setup? { /resetmatrix know not { (No SETUP) error } if } def /imatrix { resetmatrix setmatrix } def /XT { XW D + } def /YT { YW D + } def /XWM { XW SC * 0.9 * } def /UDH { D 0.35 * } def /UDB { UDH 0.5 * } def /at { YW0 D + * } def /alt { /XW ALTXW dup 0 eq { pop XW } if store /YW ALTYW dup 0 eq { pop YW } if store } def /normal { /XW XW0 store /YW YW0 store } def /dir { /DIR exch def /PP load dup 0 cp pop put 1 cp exch pop put } def /adx { ALTXW XW0 - 2 : XT : abs } def % Half the difference in width/height /ady { ALTYW YW0 - 2 : YT : abs } def % between a box and an altbox./ /set { /do exch store /go exch store } def /go {} def /do {} def /sf { dup currentfont exch scalefont setfont /FS exch FS mul store } def % Variable defaults /R# 0 def /PR# -1 def /ERR# 0 def /lin 0 def /Q true def /XMIN 999 def /XMAX -999 def /YMIN 999 def /YMAX -999 def /$L 100 string def /$N 40 string def /PP { 0 0 m } def /roomp { 0 0 } def /origop { 0 0 } def % Setup Defaults /XW 0.7 def /YW 0.5 def % Note: 0 means determine from YN /XW0 XW def /YW0 YW def /XN 12 def /YN 0 def % Note: 0 means determine from YW /ROT? false def /DBUG? true def /XOFFS 0 def /YOFFS 0 def /FS0 6 def /FS 6 def /Times-Roman findfont FS scalefont setfont /ALTXW 0 def /ALTYW 0 def % Synonyms /ALTBOXWIDTH /ALTXW cvx def /ALTBOXHEIGHT /ALTYW cvx def /BOXWIDTH /XW0 cvx def /BOXHEIGHT /YW0 cvx def % Procedures /cbox { 0 1 index rl exch 0 rl neg 0 exch rl closepath } def /crcx { dup stringwidth pop -0.5 * 0 rm } def /left { dup stringwidth pop neg 0 rm } def /know { currentdict exch known } def /autoshrink { dup stringwidth pop dup XWM le { pop } { currentfont [ XWM 3 index : 0 0 1 0 0 ] makefont setfont pop } ifelse } def /numcheck { type dup /integertype eq exch /realtype eq or not { (No number) error } if } def /cvr1d { 10 mul round 0.1 mul dup dup cvi sub 0 eq { cvi } if } def /getnum { line token not { (Number missing) error } if dup numcheck exch /line exch def } def /linenum { line cvx { exec } stopped { (Syntax) error } if count 1 ne { (One number expected) error } if dup numcheck } def /gettoken { line token not { (Name missing) error } if cvlit exch /line exch def } def % Procedures for room-definitions /rooms 300 dict def /roomdict 50 dict dup begin /n { YT + } def /e { exch XT + exch } def /s { YT - } def /w { exch XT - exch } def /ne { n e } def /nw { n w } def /sw { s w } def /se { s e } def /n# { at + } def /e# { 3 -1 roll exch XT * + exch } def /s# { neg n# } def /w# { neg e# } def /dash { [ 1 1 ] 0 setdash } def /@nw { { 0.2 FS * YW SC * FS 0.9 * - rm } {} set } def /@n { { XW SC * 0.5 * YW SC * FS 0.9 * - rm } /crcx load set } def /@ne { { XW SC * 0.2 FS * - YW SC * FS 0.9 * - rm } /left load set } def /@w { { 0.2 FS * YW SC * FS l# * + 0.5 * 0.8 FS * - rm } {} set } def /@center { { XW SC * 0.5 * YW SC * FS l# * + 0.5 * 0.8 FS * - rm } /crcx load set } def /@e { { XW SC * 0.2 FS * - YW SC * FS l# * + 0.5 * 0.8 FS * - rm } /left load set } def /@sw { { 0.2 FS * 0.2 FS * l# 1 - FS * + rm } {} set } def /@s { { XW SC * 0.5 * 0.1 FS * l# 1 - FS * + rm } /crcx load set } def /@se { { XW SC * 0.2 FS * - 0.2 FS * l# 1 - FS * + rm } /left load set } def /@NW { { 0 YW SC * 0.2 FS * + l# 1 - FS * + rm } {} set } def /@N { { XW SC * 0.5 * YW SC * FS 0.2 * + l# 1 - FS * + rm } /crcx load set } def /@NE { { XW SC * YW SC * 0.2 FS * + l# 1 - FS * + rm } /left load set } def /@SW { { 0 FS neg rm } {} set } def /@S { { XW SC * 0.5 * FS neg rm } /crcx load set } def /@SE { { XW SC * FS neg rm } /left load set } def /@EN { { XW SC * 0.2 FS * + YW SC * FS - rm } {} set } def /@E { { XW SC * 0.2 FS * + YW SC * FS l# * + 0.5 * 0.8 FS * - rm } {} set } def /@ES { { XW SC * 0.2 FS * + l# 1 - FS * rm } {} set } def /@WN { { -0.2 FS * YW SC * FS - rm } /left load set } def /@W { { -0.2 FS * YW SC * FS l# * + 0.5 * 0.8 FS * - rm } /left load set } def /@WS { { -0.2 FS * l# 1 - FS * rm } /left load set } def end def % Procedures for exit-definitions /exitdict 50 dict dup begin /n# { D * 3 1 roll YW + exch XW 0.5 * + exch m 0 dir 0 exch rl cp } def /n { 0.5 n# } def /N# { YT * 0 exch rl pop pop cp } def /N { 1 N# } def /w# { D * 3 1 roll YW 0.5 * + m 2 dir neg 0 rl cp } def /w { 0.5 w# } def /W# { neg E# } def /W { 1 W# } def /s# { D * 3 1 roll exch XW 0.5 * + exch m 4 dir 0 exch neg rl cp } def /s { 0.5 s# } def /S# { neg N# } def /S { 1 S# } def /e# { D * 3 1 roll exch XW + exch YW 0.5 * + m 6 dir 0 rl cp } def /e { 0.5 e# } def /E# { XT * 0 rl pop pop cp } def /E { 1 E# } def /nw# { dup D * neg exch D * 4 2 roll YW + m 1 dir rl cp } def /nw { 0.5 nw# } def /NW# { dup XT * neg exch YT * rl pop pop cp } def /NW { 1 NW# } def /sw# { dup D * neg exch D * neg 4 2 roll m 3 dir rl cp } def /sw { 0.5 sw# } def /SW# { neg NE# } def /SW { 1 SW# } def /se# { dup D * exch D * neg 4 2 roll exch XW + exch m 5 dir rl cp } def /se { 0.5 se# } def /SE# { dup XT * exch YT * neg rl pop pop cp } def /SE { 1 SE# } def /ne# { dup D * exch D * 4 2 roll exch XW + exch YW + m 7 dir rl cp} def /ne { 0.5 ne# } def /NE# { dup XT * exch YT * rl pop pop cp } def /NE { 1 NE# } def /NS { pop 1 index lineto cp } def /EW { exch pop 2 index exch lineto cp } def /u { gsave newpath PP DIR 45 * rotate -0.5 UDB * UDH rl UDB 0 rl closepath fill grestore } def /d { gsave newpath PP DIR 45 * rotate -0.5 UDB * 0 rl 0.5 UDB * UDH rl UDB 0.5 * UDH neg rl closepath fill grestore } def /closed { gsave cp newpath m DIR 45 * rotate -0.2 D * 0 rmoveto 0.4 D * 0 rl stroke grestore } def /oneway { gsave newpath PP DIR 45 * rotate -0.2 D * 0.3 D * rl 0.2 D * -0.3 D * rl 0.2 D * 0.3 D * rl stroke grestore } def /? { gsave imatrix DIR 0 eq DIR 1 eq DIR 7 eq or or { 0 FS 0.2 * rm } if DIR 2 eq DIR 6 eq or { 0 FS0 0.3 * neg rm } if DIR 3 eq DIR 4 eq DIR 5 eq or or { 0 FS neg rm } if DIR 1 eq DIR 2 eq DIR 3 eq or or { FS -0.6 * 0 rm } if DIR 5 ge { FS 0.1 * 0 rm } if DIR 0 eq DIR 4 eq or { (?) stringwidth pop -0.5 * 0 rm } if (?) show grestore } def /dash { [ 1 SC : dup ] 0 setdash } def end def % Command procedures /commands 25 dict dup begin /SETUP { endpage /PR# 0 def /origmatrix know { origmatrix setmatrix } { /origmatrix matrix currentmatrix def } ifelse /LLX know not { /LLX 45 def /LLY 23 def /URX 570 def /URY 757 def %/LLX 45 def /LLY 23 def /URX 570 def /URY 793 def } if % Default page area in enter-matrix coordinates ROT? { /LLX 24 def /LLY 30 def /URX 757 def /URY 540 def % 22,28 %/LLX 24 def /LLY 30 def /URX 818 def /URY 540 def % 22,28 90 rotate 0 -598 translate } if % Page area for rotated in (enter-matrix)-rot coordinates /resetmatrix matrix currentmatrix def LLX LLY translate /YH URY LLY - def /XH URX LLX - def 0 setlinewidth 0 0 m XH YH cbox clip newpath /SC XH XN : def /D 1 XW - def YN 0 eq YW 0 eq and { /YW XW def } if YN 0 eq { /YN YH SC : YT : cvi def } if YW 0 eq { /YW YH SC : YN : D - def } if /XW0 XW def /YW0 YW def SC dup scale D 2 : dup translate DBUG? { (D:) print D $N cvs print (,SC:) print SC $N cvs print (,YW:) print YW $N cvs print (,YN:) print YN $N cvs print (,XW:) print XW $N cvs print (,XN:) print XN = flush % 0 0 m XN 1 - XW + YN 1 - at YW + cbox % gsave imatrix [ 1 4 ] 0 setdash stroke grestore } if newpath XOFFS neg YOFFS neg at translate } def /ROTATE { /ROT? true def } def /WIDTH { linenum /XN exch def } def /HEIGHT { linenum /YN exch def /YW 0 def } def /OFFSET { /XOFFS getnum def /YOFFS getnum def } def /BOXWIDTH { linenum /XW exch def } def /BOXHEIGHT { linenum /YW exch def /YN 0 def } def /ALTBOXHEIGHT { linenum /ALTYW exch def } def /ALTBOXWIDTH { linenum /ALTXW exch def } def /ROOM { PR# 0 lt { commands /SETUP get exec } if /room gettoken def /fullname room $N cvs def /R# ++ rooms room /origop load put % Unsuccessfull rooms end up at origo line token { exch pop dup type /stringtype eq { /fullname exch def gettoken } if pop } { (Syntax) error } ifelse gsave place /roomp load dup 1 4 -1 roll put 0 3 -1 roll put clear roomp dup YMIN lt { dup /YMIN exch def } if dup YMAX gt { dup /YMAX exch def } if pop dup XMIN lt { dup /XMIN exch def } if dup XMAX gt { dup /XMAX exch def } if pop rooms room [ roomp ] cvx put /names [ { fullname (/) search { exch pop exch /fullname exch def } { exit } ifelse } loop ] def gsave roomp m gsave XW YW cbox gsave 1 setgray fill grestore imatrix 0.5 setlinewidth stroke grestore XW 0.5 * YW rm imatrix 0 YW SC * FS names length * - 0.5 * 0.8 FS * + neg rm names { gsave autoshrink crcx show grestore 0 FS neg rmoveto } forall grestore grestore % Test for on-page: (incomplete) roomp YT : dup YOFFS lt exch YOFFS YN + ge or exch dup XOFFS lt exch XOFFS XN + ge or or not { /PR# ++ } if } def /R /ROOM load def /EXIT { setup? gsave rooms begin exitdict begin clear line cvx { exec } stopped { grestore (Syntax) error } if end end count 4 ge { pop pop lineto } if stroke grestore } def /TEXT { setup? /keep save def /$T $L length string def roomdict /@nw get exec gsave place m clear imatrix { currentfile $T readline { /lin ++ dup token { /ENDTEXT eq { pop pop exit } if pop } if dup length string copy } { pop exit } ifelse } loop count /l# exch def /notext know { /do { pop () } def } if count -1 2 { 1 roll } for go { count 0 eq { exit } if gsave do show grestore 0 FS neg rm } loop grestore keep restore } def /INDEX { setup? gsave roomdict /@nw get exec /fullname gettoken dup type /stringtype ne { $N cvs } if def place m clear imatrix 0.67 sf /l# 1 def /notext know { /do { pop () } def } if fullname go do show grestore } def /XPS { line token { pop pop line cvx exec } { pop currentfile token { exec } if } ifelse } def /CREATOR { /creatorinfo line dup length string copy def } def /TITLE { /titleinfo line dup length string copy def } def /TIME { /timeinfo line dup length string copy def } def /FONTSIZE { /FS0 getnum def /Times-Roman findfont FS0 gsave /resetmatrix know { imatrix } if scalefont grestore setfont } def /NULL { /#copies 0 def } def /NOTEXT { /notext true def } def /END { /endexit /exit load def /Q false def stop } def /RESET { % Added, DBJ /XW 0.7 def /YW 0.5 def /XW0 XW def /YW0 YW def /XN 12 def /YN 0 def ROT? { /LLX 45 def /LLY 23 def /URX 570 def /URY 757 def /ROT? false def } if /XOFFS 0 def /YOFFS 0 def /FS0 6 def /FS 6 def /Times-Roman findfont FS scalefont setfont /ALTXW 0 def /ALTYW 0 def /LLX 45 def /LLY 23 def /URX 570 def /URY 756 def } def end def /place { rooms begin roomdict begin clear line cvx { exec } stopped { grestore (Syntax) error } if end end count 2 ne { grestore (Number missing) error } if 2 copy numcheck numcheck } def % Parser procedures /error { whaterror /Q false def stop } def /whaterror { newpath countdictstack dictlevel0 - { end } repeat /ERR# ++ dup print ( error at line ) print lin = gsave /resetmatrix know { imatrix LLX 2 + URY } { 47 790 } ifelse ERR# 1 + FS * 2 * 2 * - m 2 2 scale gsave (ADMAP v2.56. ) show show ( error at line ) show lin $N cvs show /$error where { pop $error begin newerror { ( ) show errorname $N cvs show ( : ) show /command load $N cvs show (>) print errordict /handleerror get exec } if end } if grestore 0 FS neg rm (") show oline show (") show (") print oline print ("\n) print grestore } def /process { dup dup /line exch def /oline exch def % (Received ") print oline print (": ) print token { dup commands exch known { cvlit /cmd exch def /line exch def } { pop pop /cmd /EXIT def } ifelse /FS FS0 store clear commands cmd get exec } if } def /endpage { PR# 0 gt { /endpagedict know not { /endpagedict 1 dict def } if gsave imatrix initclip /Courier-Bold findfont 7 scalefont setfont /WX (X) stringwidth pop def URX URY 4 + m -34 WX * 0 rm cp cp (Extents of map : ) show (\() show XMIN cvr1d $N cvs show (,) show YMIN YW0 D + : cvr1d $N cvs show (\) to \() show XMAX cvr1d $N cvs show (,) show YMAX YW0 D + : cvr1d $N cvs show (\)) show m 0 7 rm cp (Extents of page: ) show (\() show XOFFS cvr1d $N cvs show (,) show YOFFS $N cvs show (\) to \() show XN XOFFS + 1 - cvr1d $N cvs show (,) show YN YOFFS + 1 - cvr1d $N cvs show (\)) show DBUG? { (Extents of map : ) print (\() print XMIN cvr1d $N cvs print (,) print YMIN YW0 D + : cvr1d $N cvs print (\) to \() print XMAX cvr1d $N cvs print (,) print YMAX YW0 D + : cvr1d $N cvs print (\)\n) print (Extents of page: ) print (\() print XOFFS cvr1d $N cvs print (,) print YOFFS $N cvs print (\) to \() print XN XOFFS + 1 - cvr1d $N cvs print (,) print YN YOFFS + 1 - cvr1d $N cvs print (\)\n) print } if m 0 7 rm /timeinfo know { (Time: ) show endpagedict begin /XWM 27 WX * def gsave timeinfo autoshrink show grestore end } if m -24 WX * 0 rm cp cp (Locations on map : ) show R# $N cvs show m 0 7 rm cp (Locations on page: ) show PR# $N cvs show m 0 7 rm /creatorinfo know { (Creator: ) show endpagedict begin /XWM 12 WX * def gsave creatorinfo autoshrink show grestore end } if m /titleinfo know { endpagedict begin cp pop LLX - dup WX - /XWM exch def -0.5 * 2 rm gsave /Times-Bold findfont 20 scalefont setfont titleinfo autoshrink crcx show grestore end } if 0 setlinewidth LLX LLY m XH YH cbox stroke grestore showpage } if } def /endexit null cvx def { { { currentfile $L readline { /lin ++ process } { exit } ifelse } loop } exec false % stopped { Q { (Internal) whaterror /Q true def } if endexit } { exit } ifelse } { loop endpage (Done.\n) print } exec %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % think about: % draw dashed line to surround inside of house TITLE Dungeon Map CREATOR Darin Johnson % The House/Forest SETUP ROOM kitchen (Kitchen) 5 8 at ROOM living (Living Room) kitchen w ROOM attic (Attic) kitchen n EXIT kitchen w living e EXIT kitchen n attic s u ROOM whouse (West of/House) living w ROOM bhouse (Behind/House) kitchen e ALTBOXWIDTH 1.7 ROOM nhouse (North of House) alt living n n ROOM shouse (South of House) living s normal EXIT whouse n nhouse w EW EXIT whouse s shouse w EW EXIT alt nhouse e normal bhouse n NS EXIT alt shouse e normal bhouse s NS EXIT bhouse w kitchen e closed ROOM for1 (Forest) shouse s 0.5 w# ROOM for2 (Forest) for1 se ROOM for3 (Forest) nhouse n 3 e# ROOM for4 (Forest) for2 1.5 s# 3.5 e# ROOM for5 (Forest) for4 n ROOM clearing (Clearing) bhouse ne e EXIT whouse w for1 w oneway EW EXIT alt nhouse n normal for3 w EW EXIT alt shouse s normal for2 n NS EXIT bhouse e clearing sw NS EXIT for1 s for2 w EW EXIT for2 e clearing s NS EXIT for2 s for4 w EW EXIT for4 n for5 s EXIT for5 w for2 se oneway EXIT for3 n 5 W# 7 S# 2 E# for2 sw oneway EXIT clearing se for5 ne oneway %EXIT for1 w W 0.5 NW# %EXIT clearing w for3 s EW EXIT clearing w for3 e ROOM uptree (Up a Tree) for3 ne EXIT for3 ne uptree sw u ROOM canview (Canyon View) for5 1.5 e# 0.5 s# dash EXIT for4 e canview s EXIT for5 se canview w FONTSIZE 16 TEXT nhouse 2.5 n# w White House / Forest ENDTEXT FONTSIZE 8 TEXT nhouse n n Not all connections shown ENDTEXT % Maze %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SETUP FONTSIZE 6 ROOM mazea (Maze A) 2 14 at INDEX (troll) mazea @W INDEX (B) mazea @S INDEX (A) mazea @N INDEX (D) mazea @E ROOM mazeb (Maze B) mazea e INDEX (A) mazeb @S INDEX (D) mazeb @N INDEX (C) mazeb @E ROOM mazec (Maze C) mazeb e INDEX (B) mazec @W INDEX (D) mazec @N INDEX (E) mazec @NE INDEX (up) mazec @ne ROOM mazed (Maze D) mazec e INDEX (C) mazed @W INDEX (A) mazed @N INDEX (P) mazed @E ROOM mazee (Maze E) mazed e INDEX (Q) mazee @E INDEX (C) mazee @N INDEX (F) mazee @SW ROOM mazef (Maze F) mazea s INDEX (E) mazef @SE INDEX (down) mazef @se INDEX (G) mazef @E INDEX (F) mazef @W INDEX (I) mazef @NE INDEX (up) mazef @ne ROOM mazeg (Maze G) mazef e INDEX (N) mazeg @NW INDEX (up) mazeg @nw INDEX (F) mazeg @W INDEX (P) mazeg @NE INDEX (H) mazeg @E INDEX (O) mazeg @S ROOM mazeh (Maze H) mazeg e INDEX (G) mazeh @NE INDEX (H) mazeh @W INDEX (R) mazeh @SE ROOM mazei (Maze I) mazeh e INDEX (f) mazei @N INDEX (k) mazei @E INDEX (j) mazei @SE INDEX (down) mazei @se INDEX (M) mazei @S INDEX (L) mazei @W INDEX (I) mazei @NW ROOM mazej (Maze J) mazei e INDEX (I) mazej @E INDEX (M) mazej @W INDEX (K) mazej @NE INDEX (up) mazej @ne ROOM mazek (Maze K) mazea s s INDEX (grating) mazek @NE INDEX (J) mazek @SE INDEX (down) mazek @se INDEX (M) mazek @NW INDEX (L) mazek @SW ROOM mazel (Maze L) mazek e INDEX (E) mazel @W INDEX (K) mazel @SW INDEX (M) mazel @E INDEX (S) mazel @N INDEX (I) mazel @NE INDEX (up) mazel @ne ROOM mazem (Maze M) mazel e INDEX (I) mazem @E INDEX (J) mazem @S INDEX (K) mazem @W INDEX (L) mazem @SE INDEX (down) mazem @se ROOM mazen (Maze N) mazem e INDEX (O) mazen @W INDEX (N) mazen @NW INDEX (G) mazen @NE INDEX (G) mazen @S ROOM mazeo (Maze O) mazen e INDEX (N) mazeo @W INDEX (G) mazeo @S INDEX (cyclops) mazeo @NE ROOM deadp (Deadend P) mazea s s s INDEX (D) deadp @S ROOM deadq (Deadend Q) deadp e INDEX (E) deadq @W ROOM deadr (Deadend R) deadq e INDEX (H) deadr @N ROOM deads (Deadend S) deadr e INDEX (L) deads @S ROOM grating (Grating) deadp s s INDEX (K) grating @SW ROOM strange (Strange/Pass) grating e e ROOM cyclops (Cyclops) strange s s INDEX (O) cyclops @W EXIT cyclops n strange s EXIT strange e ROOM treasure (Treasure) cyclops ne EXIT cyclops ne treasure sw INDEX (u) cyclops @NE INDEX (d) treasure @SW ROOM square (Square Room) treasure e EXIT treasure e square w ROOM side (Side Room) square s EXIT side n square s ROOM puzzle (Puzzle) side e dash EXIT side e puzzle w closed EXIT square se puzzle nw INDEX (d) square @SE INDEX (u) puzzle @NW %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % GUE ROTATE WIDTH 20 SETUP ROOM cellar (Cellar) 4 5.5 at ROOM livingrm (Living/Room) cellar w dash EXIT cellar w oneway livingrm e INDEX (d) livingrm @e ROOM troll (Troll/Room) cellar e EXIT cellar e troll w ROOM mazea (Maze A) troll s dash EXIT troll s mazea n ROOM wchasm (West of/Chasm) cellar s s e EXIT cellar s wchasm w EW ROOM ewpass (East-West/Passage) troll ne EXIT ewpass w troll n NS ROOM round (Round Room) ewpass e e EXIT round w ewpass e EXIT round sw mazea ne oneway EXIT round n % really connects to engrcave, but that gets messy ROOM nscrawl (North-South/Crawlway) troll se s EXIT nscrawl e troll e EW EXIT nscrawl n wchasm n ROOM studio (Studio) nscrawl s s EXIT studio n nscrawl s ROOM gallery (Gallery) wchasm s EXIT wchasm s gallery n EXIT studio nw gallery s ROOM kitchen (Kitchen) studio ne dash EXIT studio ne kitchen sw oneway dash INDEX (u) studio @ne %% Bank stuff ROOM bankentry (Bank/Entrance) gallery 3 w# 2 s# EXIT bankentry s gallery w NS ROOM wteller (West Teller) bankentry nw ROOM eteller (East Teller) bankentry ne EXIT bankentry nw wteller s EXIT bankentry ne eteller s ROOM depos (Depository) bankentry 4 n# EXIT wteller w depos w EW EXIT eteller e depos e EW ROOM wview (Viewing/Room) wteller n 0.5 e# ROOM eview (Viewing/Room) eteller n 0.5 w# EXIT wteller n wview sw oneway EXIT wview s bankentry n oneway NS EXIT eteller n eview se oneway EXIT eview s bankentry n oneway NS ROOM office (Chairman's/Office) depos s EXIT office n depos s ROOM vault (Vault) office w ROOM smallrm (Small Room) office e % more gue stuff ROOM ravine (Ravine) ewpass n EXIT ewpass n ravine s ROOM rocky (Rocky Crawl) ravine 1.5 w# EXIT ravine w 0.5 S# rocky w NS ROOM dome (Dome Room) rocky 1.5 w# EXIT rocky e 0.5 N# dome e NS ROOM torch (Torch Room) dome s EXIT dome s torch n oneway INDEX (d) dome @s EXIT 0.5 sf nscrawl se oneway 0.25 E# torch se EW INDEX (d) torch @se ROOM tiny (Tiny Room) torch w EXIT tiny e torch w ROOM dreary (Dreary Room) tiny n EXIT dreary s tiny n closed ROOM egypt (Egyptian/Room) dome n n EXIT rocky nw egypt e ROOM glacier (Glacier Room) egypt w EXIT glacier e egypt w INDEX (u) egypt @w ROOM ruby (Ruby Room) glacier nw 0.5 w# EXIT ruby s glacier w EW ROOM lava (Lava Room) ruby n EXIT ruby w lava w ROOM vbot (Volcano/Bottom) ruby e EXIT lava s vbot n ROOM vol1 (Volcano/Core) vbot ne ROOM vol2 (Volcano/Core) vol1 n ROOM vol3 (Volcano/Core) vol2 n ROOM vol4 (Volcano/Core) vol3 n EXIT vbot ne vol1 sw dash EXIT vol1 n vol2 s dash EXIT vol2 n vol3 s dash EXIT vol3 n vol4 s dash EXIT vol4 n ? ROOM narrledge (Narrow/Ledge) vol2 w EXIT narrledge e vol2 w ROOM library (Library) narrledge s EXIT narrledge s library n ROOM wideledge (Wide/Ledge) vol4 w EXIT wideledge e vol4 w ROOM dusty (Dusty Room) wideledge s EXIT wideledge s dusty n ROOM volview (Volcano/View) vol3 e EXIT volview e egypt s EW %% well and stuff ROOM engrcave (Engravings/Cave) round 5 s# EXIT round s engrcave n ROOM riddle (Riddle/Room) engrcave se EXIT engrcave se riddle nw INDEX (d) riddle @nw ROOM pearl (Pearl Room) riddle e EXIT riddle e pearl w closed ROOM circroom (Circular/Room) pearl e EXIT pearl e circroom w ROOM welltop (Top of/Well) circroom e EXIT welltop w circroom e dash ROOM tea (Tea Room) welltop e EXIT tea w welltop e ROOM lowroom (Low Room) tea nw nw EXIT tea nw lowroom se NS ROOM machine2 (Machine Room) lowroom e EXIT lowroom e machine2 w ROOM closet (Dingy/Closet) machine2 s EXIT closet n machine2 s ROOM posts (Posts Room) tea e EXIT posts w tea e dash closed ROOM pool (Pool Room) posts e EXIT pool w posts e %% temple and stuff ROOM grail (Grail Room) round e e EXIT grail w round e ROOM temple (Temple) grail e 0.5 n# EXIT temple w grail ne INDEX (u) grail @ne ROOM altar (Altar) temple e EXIT altar w temple e ROOM narrcrawl (Narrow/Crawlway) grail se EXIT narrcrawl n grail e ROOM cave2 (Cave) narrcrawl s EXIT narrcrawl s cave2 n ROOM mirror2 (Mirror Room) narrcrawl sw EXIT narrcrawl sw mirror2 n EXIT mirror2 e cave2 w ROOM winding (Winding/Passage) mirror2 w EXIT mirror2 w winding e EXIT round se winding nw oneway ROOM hades (Entrance/to Hades) cave2 s EXIT cave2 s hades n INDEX (u) hades @n INDEX (d) cave2 @s ROOM landdead (Land of/the Dead) hades e EXIT landdead w hades e closed ROOM tomb (Tomb) landdead e EXIT landdead e tomb w EXIT tomb n ? ROOM annex (Annex) tomb s EXIT tomb s annex n %% loud room and stuff ROOM nspass (North-South/Passage) round ne EXIT nspass s round ne ROOM chasm (Chasm) nspass 0.5 n# w EXIT chasm e nspass n EXIT chasm s ravine e ROOM loud (Loud Room) nspass ne EXIT nspass ne loud w ROOM ancientchasm (Ancient/Chasm) loud ne e EXIT ancientchasm s loud e EW ROOM dead6 (Dead End) ancientchasm n 0.5 e# EXIT ancientchasm n dead6 sw ROOM dead7 (Dead End) ancientchasm w EXIT ancientchasm w dead7 e ROOM smallcave (Small Cave) ancientchasm 1.5 e# 0.5 s# EXIT ancientchasm e smallcave nw ROOM damp (Damp Cave) loud n EXIT damp s loud n INDEX (u) loud @n % reservoir/dam stuff ROOM ressouth (Reservoir/South) ravine n n EXIT ravine n ressouth s INDEX (u) ravine @n ROOM reservoir (Reservoir) ressouth n dash EXIT reservoir s ressouth n closed ROOM stream (Stream View) ressouth w EXIT glacier n stream n EXIT stream e ressouth w ROOM canyon (Deep Canyon) ressouth se EXIT ressouth se canyon nw EXIT round nw canyon s INDEX (u) ressouth @se ROOM dam (Dam) canyon 3 n# 3 e# EXIT dam s canyon e EXIT dam e damp e ROOM lobby (Dam Lobby) dam n EXIT dam n lobby s ROOM maint (Maintenance/Room) lobby ne EXIT lobby n maint w EXIT lobby e maint s ROOM dambase (Dam Base) dam e e e e EXIT dam ne dambase n INDEX (d) dam @ne ROOM river1 (Frigid/River) dambase se EXIT river1 nw dambase se dash ROOM river2 (Frigid/River) river1 1.5 s# EXIT river1 s river2 n oneway INDEX (d) river1 @s ROOM river3 (Frigid/River) river2 1.5 s# EXIT river2 s river3 n oneway INDEX (d) river2 @s ROOM rockyshore (Rocky Shore) river3 w EXIT rockyshore e river3 w EXIT rockyshore nw smallcave s ROOM beach1 (White Cliffs/Beach) river3 e EXIT beach1 w river3 e ROOM river4 (Frigid/River) river3 1.5 s# EXIT river3 s river4 n oneway INDEX (d) river3 @s ROOM beach2 (White Cliffs/Beach) river4 e EXIT beach2 w river4 e EXIT beach2 n beach1 s ROOM sandy (Sandy Beach) river4 w EXIT river4 w sandy e ROOM river5 (Frigid/River) river4 1.5 s# EXIT river4 s river5 n oneway INDEX (d) river4 @s EXIT river5 s ? INDEX (d) river5 @s ROOM shore (Shore) river5 w EXIT river5 w shore e EXIT sandy s shore n ROOM falls (Aragain/Falls) shore 1.5 s# EXIT falls n shore s ROOM rainbow (Rainbow/Room) falls e EXIT falls e rainbow w closed ROOM rainbowend (End of/Rainbow) rainbow e EXIT rainbow e rainbowend w closed ROOM canyonbot (Canyon/Bottom) rainbowend s 0.5 e# EXIT rainbowend se canyonbot n ROOM rockyledge (Rocky Ledge) canyonbot ne EXIT canyonbot ne rockyledge sw INDEX (u) canyonbot @ne INDEX (d) rockyledge @sw ROOM canyonview (Canyon View) rockyledge 1.5 n# EXIT canyonview se rockyledge ne INDEX (u) rockyledge @ne INDEX (d) canyonview @se ROOM forest (Forest) canyonview w dash EXIT canyonview s forest s EXIT canyonview w forest e %% title FONTSIZE 16 TEXT reservoir n n n w Great Underground Empire (south) ENDTEXT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % GUE north SETUP RESET SETUP ROOM ressouth (Reservoir/South) 6 2 at dash ROOM reservoir (Reservoir) ressouth n EXIT ressouth n reservoir s closed ROOM stream (Stream) reservoir w EXIT stream e reservoir w INDEX (u) reservoir @w INDEX (d) stream @e ROOM streamview (Stream View) stream s dash EXIT streamview n stream s closed ROOM resnorth (Reservoir/North) reservoir n EXIT resnorth s reservoir n closed ROOM atlantis (Atlantis/Room) resnorth n 0.5 w# EXIT resnorth n atlantis se ROOM cave1 (Cave) atlantis n EXIT cave1 s atlantis n INDEX (u) atlantis @n INDEX (d) cave1 @s ROOM mirror1 (Mirror Room) cave1 nw EXIT cave1 n mirror1 e EW ROOM cold (Cold/Passage) mirror1 w EXIT cold e mirror1 w ROOM slideroom (Slide Room) cold w EXIT cold w slideroom e ROOM steep (Steep Crawlway) cold ne EXIT cold n steep sw EXIT mirror1 n steep s ROOM mineentry (Mine/Entrance) slideroom n EXIT slideroom n mineentry s ROOM squeaky (Squeaky Room) mineentry n 0.5 w# EXIT mineentry nw squeaky s ROOM bat (Bat Room) squeaky w EXIT bat e squeaky w ROOM shaft (Shaft Room) mineentry 3 e# 0.5 n# EXIT shaft w mineentry ne ROOM woodtunnel (Wooden/Tunnel) shaft n EXIT shaft n woodtunnel s ROOM smelly (Smelly Room) woodtunnel w EXIT woodtunnel w smelly e ROOM gas (Gas Room) smelly w EXIT gas e smelly w INDEX (u) gas @e INDEX (d) smelly @w %% coalmine ROOM fakemine1 (Coal Mine 1) woodtunnel ne dash EXIT woodtunnel ne fakemine1 sw ROOM mine1 (Coal Mine 1) resnorth 3 e# 2 n# INDEX (Wood Tunnel) mine1 @E INDEX (4) mine1 @N INDEX (2) mine1 @SW ROOM mine2 (Coal Mine 2) mine1 sw INDEX (1) mine2 @S INDEX (5) mine2 @W INDEX (3) mine2 @N INDEX (u) mine2 @n INDEX (4) mine2 @NE ROOM mine3 (Coal Mine 3) mine2 e INDEX (2) mine3 @W INDEX (5) mine3 @NE INDEX (5) mine3 @E ROOM mine4 (Coal Mine 4) mine3 e INDEX (5) mine4 @N INDEX (u) mine4 @n INDEX (6) mine4 @NE INDEX (1) mine4 @S INDEX (2) mine4 @W ROOM mine5 (Coal Mine 5) mine2 s INDEX (7) mine5 @N INDEX (3) mine5 @S INDEX (4) mine5 @E INDEX (2) mine5 @W INDEX (3) mine5 @NE INDEX (u) mine5 @ne INDEX (6) mine5 @SE INDEX (d) mine5 @se ROOM mine6 (Coal Mine 6) mine5 e INDEX (4) mine6 @SE INDEX (7) mine6 @NW INDEX (5) mine6 @N INDEX (u) mine6 @n ROOM mine7 (Coal Mine 7) mine6 e INDEX (1) mine7 @E INDEX (5) mine7 @W INDEX (6) mine7 @S INDEX (Ladder) mine7 @SE INDEX (d) mine7 @se %% Ladder and below ROOM lowershaft (Lower Shaft) shaft e ROOM timber (Timber Room) lowershaft ne EXIT lowershaft ne timber sw dash ROOM ladderbot (Ladder/Bottom) timber n EXIT ladderbot s timber n ROOM laddertop (Ladder/Top) ladderbot n EXIT laddertop s ladderbot n INDEX (u) ladderbot @n INDEX (d) laddertop @s ROOM fakemine7 (Coal Mine 7) laddertop w dash EXIT fakemine7 e laddertop w INDEX (u) laddertop @w ROOM dead5 (Dead End) ladderbot ne EXIT dead5 s ladderbot ne ROOM machine (Machine Room) lowershaft e 0.5 s# EXIT lowershaft e machine nw %% slide ROOM slide1 (Slide) slideroom s EXIT slideroom s slide1 n closed INDEX (u) slide1 @n INDEX (d) slideroom @s ROOM slide2 (Slide) slide1 s EXIT slide1 s slide2 n INDEX (u) slide2 @n INDEX (d) slide1 @s ROOM slide3 (Slide) slide2 s EXIT slide2 s slide3 n INDEX (u) slide3 @n INDEX (d) slide2 @s ROOM cellar (Cellar) slide3 s dash EXIT slideroom sw cellar nw oneway INDEX (d) slideroom @sw EXIT slide3 s cellar n oneway INDEX (d) slide3 @s ROOM slideledge (Slide Ledge) slide3 e EXIT slide3 e slideledge w oneway EXIT slideledge nw slide2 se oneway INDEX (u) slideledge @nw EXIT slideledge sw cellar ne oneway INDEX (d) slideledge @sw ROOM sooty (Sooty Room) slideledge s EXIT slideledge s sooty n %% title FONTSIZE 16 TEXT woodtunnel 3 n# w Northern Dungeon ENDTEXT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Endgame RESET SETUP ROOM tomb (Tomb) 4 1 at dash ROOM crypt (Crypt) tomb n EXIT tomb n crypt s closed ROOM topst (Top of/Stairs) crypt n %EXIT crypt n topst s dash ROOM stone (Stone Room) topst n EXIT stone s topst n ROOM lbroom (Small Room) stone n EXIT stone n lbroom s % the hallway ROOM hall1 (Hallway) lbroom n ROOM hall2 (Hallway) hall1 YW YT : n# ROOM hall3 (Hallway) hall2 YW YT : n# ROOM hall4 (Hallway) hall3 YW YT : n# ROOM hall5 (Hallway) hall4 YW YT : n# ROOM mirror (Inside/Mirror) hall3 e dash ROOM endhall (Dungeon/Entrance) hall5 n EXIT endhall s hall5 n ROOM narrcorr (Narrow/Corridor) endhall n EXIT endhall n narrcorr s closed ROOM scorr (South/Corridor) narrcorr n EXIT narrcorr n scorr s ROOM wcorr (West/Corridor) scorr nw ROOM ecorr (East/Corridor) scorr ne EXIT wcorr s scorr w EXIT ecorr s scorr e ROOM ncorr (North/Corridor) wcorr ne EXIT wcorr n ncorr w EXIT ecorr n ncorr e ROOM parapet (Parapet) ncorr n EXIT ncorr n parapet s ROOM cell1 (Prison/Cell(s)) ncorr s EXIT cell1 n ncorr s EXIT cell1 s scorr n closed ROOM nirvana (Nirvana) parapet e dash % title FONTSIZE 16 TEXT parapet n End Game ENDTEXT