þþó| EIF"X;-----------------------------"X;Labyrinths: Revision 09/15/87"X;Programmed By Steven Lashower#"X;(C) 1987 Argosoft Productions("X;------------------------------€2X;-------------------7X;Page Zero Variables<X;-------------------A‚LO;;Srce Copy adrsF†DESTLO;;Dest Copy adrsK…MTEMP;;Maze locationP…YTEMP;;Y Coord TempU†COLTMP;;X Coord TempZ„XTMP;;X Coord Temp_„YTMP;;Y Coord Tempd„FLAG;;Variable FlagiƒLEN;;Maze Draw LngthnH;;Player X CoordsV;;Player Y CoordxW;;Maze width}„TEMP;;Temporary Data‚!‰DIRECTION;;Player Dirction‡…DUMMY;;Temporary DataŒ„BACK;;Behnd plyr data‘†COUNTR;;Main DLI pointr–„SEC1;;Time "h:mm:ss"›J;;Maze gen varble †VOLUM1;;Sound volume¥„TIME;;Day/Night Flagª…COLOR;;Draw/Plot Color¯ƒOFF;;Patroler Bottom´„TONE;;Tone for sound¹„HOLD;;Temp storage¾…PLOTX;;X Coord ValueÃ…PLOTY;;Y Coord ValueȆCOPCNT;;Byte copy count͆FRONT2;;Center cpy byteÒ…BACK2;;Copy of BACKׂH2;;Patrol X CoordsÜ‚V2;;Patrol Y Coordsá„DIR2;;Patrol Drectionæ†DIRTMP;;Temp. DIRECTIONë†CDTMV4;;Patrol Move Chkð†OLDSTK;;Stick 0 Copyõ„MNUM;;Patroller #úƒPAT;;Patrol Plot Varÿ†DIFLEV;;Diffculty level‡POINTER;;Title DLI pntr †CENTER ;;Center data„LEFT ;;Left side data…RIGHT ;;Right side data‡CENTER2 ;;Copy of CENTER †RTCLOK" †ROWCRST' †COLCRSU,†VDSLST1†CDTMV36†SDMCTL/;†SDLSTL0@†GPRIORoE†STICK0xJ†STRIG0„O†PCOLR0ÀT†COLOR0ÄY†COLOR2Æ^†COLOR3Çc ‚CHüh†HPOSP0Ðm†HPOSP1Ðr†SIZEP0Ðw†SIZEP1 Ð|†SIZEP2 ІSIZEP3 І†COLPM0Ћ†COLPM1ІCOLPM2Е†COLPM3К†COLPF0П†COLPF1Ф†COLPF2Щ†GRACTLЮ†CONSOLг …AUDF1Ò¸ …AUDC1Ò½†RANDOM Ò†DMACTLÔdžPMBASEÔÌ …WSYNC ÔÑ …NMIENÔÖ†SETVBV\äÛ†XITVBVbäà „DISPå†SCREENPê…TIMSC†BOTTOMRï†PRINT1„TEXTrô†PRINT2„TEXT'ù†PRINT3„TEXTBþ ƒPMGp ƒPL1ux X;-------------------X;Get things ready...X;-------------------ŠLABYRINTHSQ>;;Turn screen!P†SDMCTL;;off.& P„FLAG+Q>ÿ0 P†VOLUM15 …CLSCN;;Clear scrren.: Q>4„MAZE?P…MTEMP;;Copy mazeDQ>5„MAZE;;Addresss.I P…MTEMPN †GENMZE;;Generate Maze!SQ>Å;;Exit in lowerXP„MAZEÓ;;right corner] Q>4†BOTTOMbP…TEXTB;;Print timer &gQ>5†BOTTOM;;compass atlP…TEXTB;;screen bottom.qQ>v$>{†CLTIMEP„SEC19;;Set elapsed€2;;time to 0:00:00…(>Š H†CLTIME P†COUNTR”Q><;;Set timer for 1™P†CDTMV3;;Second.ž %>4ƒVBI£ $>5ƒVBI¨Q>;;Initialize VBI.­ †SETVBV²Q>;;Player starts·PH;;game at (1,2).¼Q>ÁPVÆQ>;;Player's facingËP‰DIRECTION;;south,ÐQ>2;;Maze Width = 50ÕPWÚ …SETUP;;Set up screen.ß!ˆMAINPROG;;Main Program.äX;----------------------éX;Display List InterruptîX;----------------------óƒDLI5;;Save Accum andøA;;X Register.ý5$†COUNTR;;Which DLI?(>  H„DLI12;;Point to next&†COUNTR;;DLI.$> „DLI0&†COLPF1;;Shade game%2;;title in 8*2;;shades of blue./P…WSYNC;;Wait for SYNC.4(> ;;Shaded yet?9H„DLI0;;Nope...>Q> ;;Set Text Luma.C P†COLPF1H!†ENDDLI;;Return from DLIM„DLI1Q> ;;Set maze wallRP†COLPF2;;colors toWQ>;;shades of grey.\ P†COLPF1a $†COUNTRf Q„TIME;ITSkR>;;Daytime?pH„DLI2;;Nope...uQ†COLORS9;;Yep! Dayglowz!„DLI3;;colors. „DLI2Q‡COLORS29;;Night colors„„DLI3P†COLPM2;;Store colors‰P†COLPM3;;in players 2&3.Ž…DLI3B2;;Point to next“&†COUNTR;;DLI...˜(>;;All colors yet?H†ENDDLI;;Nope! Exit DLI.¢Q>;;Reset pointer§P†COUNTR;;to screen top.¬Q>ø±P†COLPF0;;Set all colors¶Q> ;;for bottom»P†COLPF1;;of screen.ÀQ>Å P†COLPF2ʆENDDLI7;;Restore X reg.Ï>Ô7;;Restore Accum.Ù9ÞX;------------------------ãX;Vertical Blank InterruptèX;------------------------íƒVBI#†PCOLR0;;Increaseò#†PCOLR0;;Patroller and÷Q†PCOLR0;;player in mazeüR>ŸHƒXX1;;Make sureQ>;;player flashes P†PCOLR0;;blue.ƒXX1Q†CDTMV4;;Decrease timerR>;;if and only ifFƒXX2;;not zero. "†CDTMV4$ƒXX2Q„FLAG;;Flag set?)R>ÿ.HƒXX3;;Yep. Exit VBI!3 !†XITVBV8 ƒXX3Q†CDTMV3;;Second elapsed?=R>BH‚X1;;Nope...GQ><;;Ya! ResetLP†CDTMV3;;timer!Q#„SEC1;;Increase secondV$>;;digit.[ƒX01Q„SEC19;;Check digits`R„COMP9;;for carry.eH‚X0;;No carry.jQ>;;Carry! ZerooP„SEC19;;digit. Inc nextt#„SEC19;;digit.y‚X02~(>;;Done checking?ƒHƒX01;;Nope...ˆ‚X1$>;;Ya! print time. †PRTIMEQ„SEC19;;Load digit to’,;;print and add—O>;;ATASCII offset.œ%„YVAL9;;Add offset and¡P…TIMSC8;;print it!¦2«(>;;All printed?°H†PRTIME;;Nope...µQ†VOLUM1;;Play a sound?ºR>ÿ¿F‚X2;;Nope...Ä"†VOLUM1;;Yes! DecreaseÉ,;;volume of soundÎO„TONE;;and addÓP…AUDC1;;distortion.Ø ‚X2$>݃DI1Q‡CENTER29;;Can playerâR>E;;view patroller?çFƒDI2;;Yes...ìR> ;;Is a wall inñH„DL1A;;the way?öQ>;;If one is, thenû&†HPOSP0;;don't display!†XITVBV;;it so exit VBI. „DL1A2 (>;;All view check?HƒDI1;;Nope...ƒDI2Q…HARGO9;;Set horizontalP†HPOSP0;;position & sizeQ…SARGO9;;depending its#P†SIZEP0;;distance "X".(Q…OFARG9;;Where's its-PƒOFF;;bottom?2%>7Q>;;Erase player's<ƒVB1PƒPMG8;;bytes.A3FHƒVB1KQ…ONARG9;;Find patrollersP?;;top and putUƒVB2Q…BARGO9;;bytes intoZPƒPMG8;;PMAREA._3d)ƒOFF;;Bottom reached?iHƒVB2;;No, next byte.n!†XITVBV;;Ya, exit VBIsX;--------------------------xX;Read Surrounding Maze Data}X;--------------------------‚…STARTQ>4„MAZE;;Get maze‡P…MTEMP;;address andŒQ>5„MAZE;;copy it.‘ P…MTEMP–‚S01;;Decrease "Y"›)>;;Zero yet?  F‚S1;;Yep.¥QW;;Add maze width.ª ƒADD¯!‚S0;;Do it again.´‚S1A;;Add horizontal.¹ ƒADD¾$>ÃQ‰DIRECTION;;Facing north?ÈR>ÍH‚T1;;Nope...ÒQW;;By adding maze× ƒADD;;width, we canÜ%>;;get the spaceáQ@…MTEMP7;;in back ofæP„BACK;;player.ëQWð,;;Subtract width.õO>ú ˆSUBTRACTÿƒS45%>;;Get 8 bytesQ@…MTEMP7;;for P„LEFT9;;left3 Q@…MTEMP7P†CENTER9;;center3" Q@…MTEMP7'P…RIGHT9;;& right walls.,21QW;;Get ready6 ˆSUBTRACT;;for next.;(>;;Add 8 bytes?@HƒS45;;Nope...E:;;J‚T1Q‰DIRECTION;;Facing southOR>TH‚T2Y%>^QWc ˆSUBTRACTh Q@…MTEMP7m P„BACKrQWw;|S> ƒADD† ƒT45%>‹ Q@…MTEMP7 P…RIGHT9•3š Q@…MTEMP7Ÿ P†CENTER9¤3© Q@…MTEMP7® P„LEFT9³2¸QW½ ƒADDÂ(>ÇHƒT45Ì:Ñ‚T2Q‰DIRECTION;;Facing eastÖR>ÛH‚T3à%>å‚U1Q@…MTEMP7ê P†CENTER8ï3ô)>ùH‚U1þ%>Q> ˆSUBTRACT  Q@…MTEMP7 P„BACKQ> ƒADD!QW& ˆSUBTRACT+‚U4Q@…MTEMP70 P„LEFT853:)>?H‚U4DQWI,NOWS ƒADDX%>]‚U6Q@…MTEMP7b P…RIGHT8g3l)>qH‚U6v:{ ‚T3%>€$>…‚V1Q@…MTEMP7;;Facing WestŠ P†CENTER9Q>” ˆSUBTRACT™2ž(>£H‚V1¨Q> ­ ƒADD² Q@…MTEMP7· P„BACK¼Q>Á,ÆOWË ˆSUBTRACTÐ$>Õ‚V4Q@…MTEMP7Ú P…RIGHT9ßQ>ä ˆSUBTRACTé2î(>óH‚V4øQ>ý,OWOW  ƒADD$>‚V6Q@…MTEMP7 P„LEFT9 Q>% ˆSUBTRACT*2/(>4H‚V69:>ƒADD,;;Add AccumulatorCO…MTEMP;;to MTEMP withHP…MTEMP;;carry.M D„SUB2R #…MTEMPW:\ˆSUBTRACTP„TEMP;;Subtractsa;;;TEMP fromfQ…MTEMP;;MTEMP withkS„TEMP;;carry.p P…MTEMPu E„SUB2z "…MTEMP „SUB2:„…WCOMP  = = = † Å=ʼn„WALO == = ‹ = Ž X;---------------------------“ X;WALL DATA/VIEWING PROCESSOR˜ X;---------------------------ˆMAINPROG%V;;Get player's¢$H;;coords and pass§ …START;;to routine.¬ †COPCEN;;Copy CENTER.±%>¶ '„FLAG»„LOOPQ†CENTER8;;Get byte inÀ$>;;front of playerÅR>Å;;Is it an exit?ÊHƒLO0;;No...ÏP„FLAG;;Yes, set flagÔ!‰FRONTWALL;;and draw it!ÙƒLO0R> ;;Is it a wall?ÞH„N1A2;;No.ã!‰FRONTWALL;;Yes! Draw it!è „N1A2Cí,ò P„HOLD÷O„WALO9;;Offset for LEFTü?;;and RIGHT side. Q„LEFT8;;Get side wall. R>E;;Patrollr there? H…N1A25;;No. Q> ;;Yes...Print …N1A25&J;;passage there. R…WCOMP9 H„N1A3$ %„HOLD) &„FLAG. ˆLEFTWALL3 „N1A3$J8 2= %„HOLDB (>G H„N1A2L 3Q )>V H„LOOP[ Q>` P†COLCRSe Q>j P…DUMMYo ƒN22%…DUMMYt Q>y P„TEMP~ …PRINTƒ #…DUMMYˆ Q…DUMMY R> ’ HƒN22— %>œ Q†CENTER8¡ 3¦ R> « H‚N3° Q>µ !‚N4º ‚N3R>Å¿ HƒN3AÄ Q>É !‚N4Î ƒN3AQ>Ó ‚N4P„TEMPØ …PRINTÝ !‡LINE139â ˆLEFTWALL'…YTEMPç Q…MULTI8ì >ñ 0ö Q„FLAGû R> F‚L3 R> F‚L3 R> H‚L1 ‚L3Q>  ;# S…YTEMP( P†COLTMP- %>2 !†DOWALL7 ‚L1Q>< ,A O…YTEMPF P†COLTMPK %>P †DOWALL2U 3Z C_ ,d O>i P†ROWCRSn Q†COLTMPs P†COLCRSx Q„FLAG} R>‚ F‚D3‡ R>Œ F‚D1‘ R>– F‚D4› R>  F‚D4¥ Q>ª !‚D2¯ ‚D4Q„PASS9´ !‚D2¹ ‚D1Q„RWAL9¾ !‚D2à ‚D3Q„LWAL9È ‚D2&„XTMPÍ '„YTMPÒ P„TEMP× …PRINTÜ $„XTMPá %„YTMPæ )> ë H†DOWALLð %…YTEMPõ Q>ú P„FLAGÿ : "X;----------------------------- "X;Character bytes for left wall "X;----------------------------- „LWAL ====  =====  =====  ====  =====  ===="  =====$  ===='  =====)  ====, #X;------------------------------1 #X;Character bytes for right wall6 #X;------------------------------; „RWAL =====  =====@  =====B  ====E  =====G  ====J  =====L  ====O  =====Q  ====T $X;-------------------------------Y $X;Character bytes for passageways^ $X;-------------------------------c „PASS ====e  =====h  =====j  ====m  =====o  ====r  =====t  ====w  =====y  ====| †LENGTH  ==== …HORIZ ====† X;----------------‹ X;Day/Night Colors X;----------------• †COLORS =Ÿ==›=™–  —=•=“=‘=ð=ò—  ô=ö=ø=ú=ü˜ =š ‡COLORS2 ====›  ====œ  ====  ==Ÿ X;------------------------¤ X;Print Front Wall Routine© X;------------------------® ‰FRONTWALL1³ '…YTEMP¸ Q†LENGTH8½ PƒLEN Q…HORIZ8Ç P†COLCRSÌ Q…MULTI8Ñ >Ö 0Û P…YTEMPà $…YTEMPå %>ê ‚F1Cï P†ROWCRSô #†ROWCRSù #†ROWCRSþ 3 2 '„YTMP &„XTMP Q„FLAG R>Å HƒF1A! Q>& !ƒF1B+ ƒF1AQ„PASS90 ƒF1BP„TEMP5 %†ROWCRS: …PRINT? %„YTMPD $„XTMPI )> N H‚F1S "ƒLENX QƒLEN] F‡LINE139b #†COLCRSg $…YTEMPl %>q !‚F1v X;--------------------{ X;Main Display Routine€ X;--------------------… ‡LINE139 „MOVE;;Print Screen!Š Q†CENTER;;Copy center. P†FRONT2” Q„BACK;;Copy back.™ P…BACK2ž Q„TIME£ R>;;Is it night?¨ F‚CE;;Yes...­  ˆPOSITION;;No..Draw maze.² $>· †PL1CL1Q>;;Clear PMAREA¼ PƒPL19;;[Player MazeÁ 2;;Position]Æ H†PL1CL1Ë QH;;Add offset forÐ ,;;Gr. $E toÕ O>‘;;player horizÚ P†HPOSP1;;position!ß ,ä QV;;Add offset toé ,;;vert positionî O>J;;to plot on aó ?;;Gr. $E screen.ø Q>ý PƒPL18;;And store! ‚CE$> ƒCE1Q‡DIRCHAR9;;Let's clear ;;;the compass S>€;;arrows. %‡OFFSETT9 P…TIMSC8 2% (>* HƒCE1/ ƒCE2%‰DIRECTION;;Inverse the4 Q‡DIRCHAR8;;compass arrow9 $‡OFFSETT8;;in the dirctn> P…TIMSC9;;player's facingC Q>>H P†SDMCTL;;Turn on screen.M X;-------------------------R X;Joystick/Movement RoutineW X;-------------------------\ ‡LINE140 …MVCHK;;Patrol Move.a $H;;Get Player'sf %V;;coordinates.k …STARTp †COPCENu Q†STICK0z R> F‡LINE140„ Q†STICK0‰ R>Ž H‡LINE190“ Q†FRONT2˜ R> FˆLINE1401¢ R>E§ FˆLINE1401¬ R>ű HˆLINE140A¶ !†ESCAPE» ˆLINE140A!ˆLINE1901À ˆLINE1401$‰DIRECTIONÅ 0Ê Q…WHICH9Ï ?Ô ,Ù QH8Þ O…TABLE9ã PH8è !‡LINE275í ‡LINE190R> ò H‡LINE230÷ Q…BACK2ü R>  FˆLINE190AR>E  FˆLINE190AR>Å HˆLINE1901 !†ESCAPEˆLINE1901 …THUMP$ !‡LINE140)ˆLINE190A$‰DIRECTION.03 Q…WHICH98?=,BQH8G O†TABLE29LPH8Q !‡LINE275V‡LINE230R> [ H‡LINE250` „RAZZe#‰DIRECTIONjQ‰DIRECTIONoR>t H‡LINE275yQ>~P‰DIRECTIONƒ !‡LINE275ˆ‡LINE250R> F‡LINE260’ !‡LINE140—‡LINE260 „RAZZœˆLINE265A"‰DIRECTION¡Q‰DIRECTION¦R>« H‡LINE275°Q>µP‰DIRECTIONº !‡LINE275¿‡LINE275 …PAUSEÄ !ˆMAINPROGÉX;-------------ÎX;Delay RoutineÓX;-------------Ø…PAUSEQ>;;Zero SystemÝP†RTCLOK;;Timer.â‚P1 …MVCHK;;Check forçQ†RTCLOK;;Patrol move andì;;;wait for timerñS>;;goes past 6.öD‚P1û:;;Pause finished!X;--------------X;Set up display X;-------------- …SETUPQ>  P†COLOR3Q>;;Background'sP†COLOR2;;black.# P„MNUM(Q>- P†COLOR02Q>7P†PCOLR0<Q>;;Set P/M Prior.A P†GPRIORFQ>4…DLIST;;Tell ANTICKP†SDLSTL;;where the D/LPQ>5…DLIST;;is.UP†SDLSTLZQ>5ƒDLI;;Point system_P†VDSLST;;to my DLI.d Q>4ƒDLIi P†VDSLSTnQ>À;;Allow for DLIs.s P…NMIENxQ>;;Set players}P†SIZEP2;;2 & 3 to quad‚P†SIZEP3;;size.‡Q>h;;Set Player'sŒP†HPOSP0;;2&3 horiz‘Q>t;;position.–P†HPOSP0›$> …PL1CLQ>;;Clear and init¥PƒPMG9;;PMAREA.ª PƒPMG9¯Q>ÿ´ PƒPMG9¹ PƒPMG9¾2;;Copy 255 Bytes.à H…PL1CLÈQ>ƒPMG;;Store P/MÍP†PMBASE;;Address.ÒQ>;;Enable P/M×P†GRACTL;;GraphicsÜ:áX;----------------------æX;Main Game Display ListëX;----------------------ð…DLIST p=p=ð=Fõ ƒTOPú  = ===ü =0ÿ €=N „DISP   ===== ==Ž ===== ==Ž ===== =Ž= ====Ž= ==Ž" ==Ž==Ž=$ Ž=Ž=' =Ž==Ž==) =Ž=, ====Ž=. ==1 ===Ž==3 ==6 ===Ž==8 ==; =====Ž@ p=BE …TEXTB J ====L =AO …DLISTTX;------------------------YX;Check for patroller move^X;------------------------c…MVCHK g;;Check for move.h$>ÿmQ†DIFLEV;;Difficulty=0?rF„MV25;;Yes...wƒMV12|Q‚H29;;Check if thereRH;;are any patrols†HƒMV2;;occuping the‹Q‚V29;;same placeRV;;where the•FƒMV3;;player is.šƒMV2(†DIFLEV;;More patrols?ŸHƒMV1;;YA...¤ „MV25:©ƒMV3Q>4†CAPTXT;;Print Player®P…TEXTB;;capture text on³Q>5†CAPTXT;;screen bottom¸ P…TEXTB½Q>E;;Put patroler inÂP‡CENTER2;;front of playerÇQ>;;Zero all audio.Ì P…AUDF1Ñ!ƒEX1;;End routineÖ$X;-------------------------------Û$X;Routine to Print to Graphics $EàX;Adapted from Retrofire!å$X;-------------------------------ê…PRINTQ„YPOS8ïP‚LO;;Save Y PositionôQ>ù P‚LOþ T‚LO;;*16 U‚LO T‚LO;;*32  U‚LOQ‚LO,O>4†SCREEN;;Add Display!P†DESTLO;;Start& Q‚LO+ O>5†SCREEN0P†DESTLO5 T‚LO;;*16: U‚LO? T‚LO;;*32D U‚LOIQ‚LON,SO†DESTLO;;Get character'sXP†DESTLO;;screen address] Q‚LObO†DESTLOgP†DESTLOlQ†DESTLO;;Add X offsetq,;;for finalvO†COLCRS;;address.{O> € P†DESTLO… D†NODHINŠ#†DESTLO!†NODHIN%„TEMP;;Get offset into”Q…MULT88;;character set.™P‚LOžQ>£ P‚LO¨P†COPCNT;;Zero copy count­,²O>5‡CHARSET;;get info·P‚LO;;from char set.¼Q‚LOÁ,ÆO>4‡CHARSETËP‚LOÐ D†COPNUMÕ #‚LOÚ†COPNUM%†COPCNTßQ@‚LO7;;Get characterä%>;;image byte.éP@†DESTLO7;;To screen...î#†COPCNT;;Next char byte.óQ†COPCNT;;Are all 8 bytesøR>;;in char moved?ýF†FINISH;;Ya!Q†DESTLO;;Add 20 bytes to,;;point to next O>;;line on screen. P†DESTLO D†COPNUM#†DESTLO  H†COPNUM%†FINISH:;;All done!*„YPOS == ==, %=-=5===E- M=U/X;----------------------4X;Character Set for Maze9X;----------------------> ‡CHARSETC =====E =H ÿ=¿=ÿ=÷=ÿ=ÿJ ß=ÿM ÿ==?===O =R ÿ=þ=þ=ø=ð=àT À=€W =====?Y =ÿ\ W=ÿ=Õ=Õ=Õ=ÿ^ W=Wa €=À=à=ð=ø=üc þ=ÿf ==ã=ÿ=ÿ=Ãh =k…MULTI = ==!=,m 7=Bp…MULT8 ==== r (=0=8=@uX;--------------zX;Sound RoutinesX;--------------„…THUMPQ>F;;Pitch for THUMP‰ P…AUDF1ŽQ>;;THUMP volume.“ P†VOLUM1˜Q>;;THMP distortion P„TONE¢Q†STICK0;;Load joystick§P†OLDSTK;;and save.¬ƒTH1 …MVCHK;;Patrol move...±Q†OLDSTK;;Stick changed¶R†STICK0;;direction yet?»FƒTH1;;No, check againÀ:Å„RAZZQ>;;Pitch for TURNÊ P…AUDF1ÏQ>;;Volume for TURNÔ P†VOLUM1ÙQ> ;;TURN distortionÞ P„TONEã:è$X;-------------------------------í$X;Move newly drawn maze to screenò$X;-------------------------------÷„MOVEQ>4†SCREEN;;MOVE sourceüP‚LO Q>5†SCREEN P‚LO Q>4„DISP;;MOVE dstination P†DESTLO Q>5„DISPP†DESTLOQ‚LO$,)O>P.P‚LO3D‚MB8 #‚LO= ‚MB%>BQ>YG P„TEMPL$> Q‚M0Q@‚LO7;;Get FROM byteVP@†DESTLO7;;and MOVE it![3`)>;;Line finished?e H‚M0;;No!j%>oQ‚LO;;Point SOURCE tot,;;next line.yO>~P‚LOƒD‚M1ˆ #‚LO‚M1Q†DESTLO;;Point DEST. to’,;;next line.—O>(œ P†DESTLO¡D‚M2¦#†DESTLO« ‚M2"„TEMP°Q„TEMP;;Any lines left?µ R>;;ºH‚M0;;Yes,do it again¿:;;Nope, done!Ä X;---------------------------É X;Clear Screen/Memory RoutineÎ X;---------------------------Ó…CLSCNQ>‰;;Start clearingØP‚LO;;at $8900ÝQ>âP‚LOç ƒLX2%>ìQ>;;Erase BYTEñ ƒLX1P@‚LO7ö3û)>HƒLX1 #‚LO  Q‚LOR> ;;At $A000 yet?HƒLX2;;No,more to copy :;;Done! ˆPOSITIONQH;;Get X & Y cords#P…PLOTX;;and store them.(QV- P…PLOTY2Q>;;Dark Grey color7 P…COLOR<$>AQ>;;Store screenFP…MTEMP;;address of mazeKQ>;;in MTEMP.P P…MTEMPU%‰DIRECTIONZ ƒPO1&„XTMP_Q‰DIRECTIONdR>;;The rest ofiF…PLEFT;;this routinenR>;;draws the mazesF…PLEFT;;on the rightxA;;of the screen.},‚O> ‡>Œ…PLEFTQ„LEFT9‘R> – H„PO1A› Q†DRAW2X8 >¥ "…PLOTX9ª †PLOTCL¯ #…PLOTX9´„PO1A$„XTMP¹Q‰DIRECTION¾R>à F†PRIGHTÈR>Í F†PRIGHTÒA×,ÜO> á>æ†PRIGHTQ„LEFT9ëR> ð H„PO1Bõ Q†DRAW2X8ú>ÿ #…PLOTX9 †PLOTCL  "…PLOTX9„PO1B$„XTMP Q†CENTER9R> FƒPO2",' Q…DRAWX8,>1 Q…PLOTX96 O…DRAWY8; P…PLOTX9@ $„XTMPE2J(>OHƒPO1T:YƒPO2 †PLOTCL^:cX;-----------------------hX;Plot CalculatormX;Adapted from Retrofire!rX;-----------------------w†PLOTCL5;;Save accum.|A;;Save X register5†C;;Save Y Register‹5 Q…PLOTY•T?šP‚LOŸQ>¤U?©P‚LO;;*2®T‚LO³U‚LO;;*4¸T‚LO½Q‚LO P†DESTLOÇ U‚LOÌ Q‚LOÑP†DESTLO;;*8ÖT‚LOÛU‚LO;;*16àT‚LOåU‚LO;;*32êQ‚LOï,ô O†DESTLOùP‚LOþ Q‚LOO†DESTLO P‚LO Q…MTEMP;;Add the display,;;address to getO> ;;the actual,;;address of the!O‚LO;;byte that will&P‚LO;;be altered for+Q…MTEMP;;the plot.0 O‚LO5 P‚LO:Q…PLOTX;;Mask PLOTX for?M>;;plot index.D>IQ…PLOTX;;Get PLOTX andN V?;;divideS V?;;by 4.X,;;Add to plot]O‚LO;;address forbP‚LO;;final plotgQ‚LO;;address.lO>q P‚LOv%…COLOR;;Get color{Q†BMASK29;;and mask off€M…COLRS8;;pixel position.…P„HOLD;;Save it.ŠQ†BMASK19;;Mask off pixel%>;;of the address”M@‚LO7;;to be altered.™L„HOLD;;Set the plotžP@‚LO7;;bits and store!£7¨?;;Restore Y Reg­7²>;;Restore X Reg·7;;Restore accum¼:;;Finished!Á…COLRS =U=ª=ÿƆBMASK1 ?=Ï=ó=üˆBMASK2 À=0= =ÐX;---------------ÕX;Screen DisplaysÚX;---------------ß †BOTTOMä A”  Aæ A” Compass Aé A” |Time Elapsed| Aë A” Aî A” | 0:00:00.00 | Að A” North Aó A”  Aõ A”  Aø A” Aú A” West   East Aý A” Aÿ A”  A A” A A” South A †ESCTXT  A” CongratulationA A”s Pathfinder!! A A” A A” A A” >You have escapeA A”d the Labyrinth< A A” A A” A  A” Your time waA" A”s 0:00:00.00 A% A” A' A” A* A” Press –ÔòéççåA, A’ò to Restart A/ †CAPTXT4 A” You have beA6 A”en captured A9 A” A; A” A> A” You will be disA@ A”posed of at the AC A” next time convAE A”ienent for you AH A” Your time waAJ A”s 0:00:00.00 AM A” AO A” AR A” Press –ÔòéççåAT A”ò‚ to Restart AW‡DIRCHAR =Ü=Þ=Ý=ß\‡OFFSETT =E=l=•=naX;---------------------fX;Random Maze GeneratorkX;---------------------p †GENMZEQ…MTEMP;;This routine,uP‚LO;;taken from azQ…MTEMP;;BASIC routine,P‚LO;;generates a„$>;;maze with only‰‚L0%>;;one correctŽQ> ;;path to the“…MLOOPP@‚LO7;;exit.˜3)>1¢ H…MLOOP§Q>¬ P@‚LO7±,¶Q‚LO»O>2ÀP‚LOÅD‚L2Ê #‚LOÏ‚L22Ô(>#ÙH‚L0Þ†LINE20Q>ã P†DESTLOè†LINE30Q…MTEMPíP‚LOò Q…MTEMP÷ P‚LOü,Q‚LOO>5;; Start gen here P‚LO D†LINE50 #‚LO†LINE50%>Q>$ P@‚LO7)†LINE60Q†RANDOM.M>3PJ8QJ=;BS>G E†LINE60L †LINE70QJQ P„TEMPV†LINE80Q‚LO[ P†DESTLO` Q‚LOeP†DESTLOjQJoR>t H‡LINE801y,~ Q†DESTLOƒO>ˆ P†DESTLO D†LINE90’#†DESTLO— !†LINE90œ‡LINE801QJ¡R>¦ H‡LINE802«;° Q†DESTLOµS>dº P†DESTLO¿ E†LINE90Ä"†DESTLOÉ !†LINE90·LINE802QJÓR>Ø H‡LINE803Ý;â Q†DESTLOçS>ì P†DESTLOñ E†LINE90ö"†DESTLOû !†LINE90‡LINE803QJR>  H†LINE90, Q†DESTLOO>d P†DESTLO# D†LINE90(#†DESTLO-†LINE90%>2 Q@†DESTLO77R> < H‡LINE100AQJF,KO>P%>UR>Z H‡LINE90A_Q> d‡LINE90AP@†DESTLO7i ‡LINE200n%>sQ> x P@‚LO7} Q†DESTLO‚P‚LO‡Q†DESTLOŒ P‚LO‘ !†LINE60–‡LINE100QJ›R>  HˆLINE101A¥Q>ªPJ¯ !‡LINE110´ˆLINE101A#J¹‡LINE110QJ¾ R„TEMPà FˆLINE110AÈ !†LINE80͈LINE110A%>Ò‡LINE120Q@‚LO7×PJ܇LINE130Q> á P@‚LO7æQJë;ðS>õ E‡LINE210ú"Jÿ$J Q„NEWJ9 PJ ‡LINE200 ‡LINE200 !†LINE60‡LINE200QJ"R>' HˆLINE2001,,1Q‚LO6O>;P‚LO@ D‡LINE210E #‚LOJ !‡LINE210OˆLINE2001QJTR>Y HˆLINE2002^;cQ‚LOhS>2mP‚LOr E‡LINE210w "‚LO| !‡LINE210ˆLINE2002QJ†R>‹ HˆLINE2003;•Q‚LOšS>ŸP‚LO¤ E‡LINE210© "‚LO® !‡LINE210³ˆLINE2003QJ¸R>½ H‡LINE210Â,ÇQ‚LOÌO>2ÑP‚LOÖ D‡LINE210Û #‚LOà ‡LINE210:å†COPCEN$>ê„COP2Q†CENTER9ï P‡CENTER29ô2ù(>þ H„COP2:X;------------------------- X;Miscellaneous Data TablesX;-------------------------„NEWJ ===…TABLE ÿ=ÿ==!†TABLE2 ==ÿ=ÿ&…WHICH ===+…DRAWY =ÿ=ÿ==0…DRAWX ====5†DRAW2X ====:„YVAL ====?„COMP  == == D…HARGO n=n=n=nF z=I…SARGO ====N…BARGO ÿ=~=<==S…ONARG T=\=d=l=tX…OFARG š=’=Š=‚=z]#X;------------------------------b#X;Escape from Maze/Death Routineg#X;------------------------------l†ESCAPEQ>4†ESCTXT;;PrintqP…TEXTB;;"Escape fromvQ>5†ESCTXT;;Maze" text at{P…TEXTB;;screen bottom.€P†DESTLO…ƒEX1Q…TEXTBŠP†DESTLO Q…TEXTB”,;;Point DESTLO to™O>´;;proper place onžP†DESTLO;;screen to print£DƒEX2;;final time.¨#†DESTLO­ ƒEX2$>²Q‡CENTER2;;Check if player·R>E;;is dead.¼FƒEX3;;yep...Á„EX21Q>ÿ;;Turn of timer.Æ P„FLAGËQ>;;Quadruple PlayerÐP†SIZEP0;;Width forÕP†SIZEP1;;Players 0 & 1.Ú …PL1CLß$>¦äQ>ÿ;;Display Playersé„EX252;;on bottom 1/3rdîPƒPMG9;;of screen.ó PƒPMG9ø(>åý H„EX25Q> ;;Display playersP†HPOSP0;;in left and Q>À;;right margin ofP†HPOSP0;;the screen.$>ƒEX3Q„SEC19;;Print elapsed ,;;time, one%O>;;character at a*%„YVAL9;;time in proper/P@†DESTLO7;;space at the42;;bottom of the9(>;;screen.>HƒEX3C!ƒES1Q‡CENTER2;;Are Patroller &HR>E;;player together?MFƒES2;;YES...Captured!RQ†RANDOM;;Not Captured...WP†COLPM0;;Change PM Colors\P†COLPM1;;for victorya#„HOLD;;display.f!ƒES2Q†STRIG0;;Trigger Pressed?kR>pFƒES1;;Nope...u!i;;Yes...Restart!zƒTOP A” labyrinths A A” A„ A” The Ultimate 3-DA† A” Maze Adventure A‰ A” (C) 1987 ArgoSA‹ A”oft Productions AŽ A” A A” A“ „MAZE˜gX;--------------------------¢X;Patroller Movement Routine§X;--------------------------¬±†?BEGINQ‚CH;;[ESC] pressed?¶R>»H„BEG1;;Nope...À!i;;Yes...Restart!Å„BEG1Q†CDTMV4;;Timer countedÊR>;;down to 0 yet?ÏFƒB15;;Yes...Ô!„RET2;;Nope...ÙƒB15Q>;;Reset Timer.Þ P†CDTMV4ã $„MNUMèQ>;;Erase patrolleríP…COLOR;;position on mazeò „EDOT;;drawing.÷‚B2Q‰DIRECTION;;Save playerüP†DIRTMP;;direction.$„MNUM;;Which patroller?Q„DIR29;;Get its dirction P‰DIRECTION;;and store it!Q‚V29;;Get "Y" Coord.?;;and put it in Y.Q‚H29;;Get "X" Coord.>;;and put it in X.$Q> ;;Put "Space" in)PƒPAT;;patroller pos.. …PUTPT;;in memory maze.3$„MNUM;;Which patroller?8Q‚V29;;Transfer the=?;;"X" and "Y"BQ‚H29;;coords again.G>L …START;;Get local walls.Q$„MNUM;;Which patroller?VQ†DIRTMP;;Transfer temp.[P‰DIRECTION;;back to orig.`Q†CENTER;;Space in fronteR> ;;of patroller?jH„TURN;;Nope. Turno ‰?LINE1401;;Ya. Staight.tƒRET$„MNUM;;Get patroller #.yQ>;;White color for~P…COLOR;;plot.ƒ#„MNUM;;Point next one.ˆ%„MNUM;;Check to see if1;;all patrollers’)†DIFLEV;;have moved.—F„B15X;;Yep...œ „EDOT;;Nope. Replot.¡!ƒB15;;Next move...¦„B15XQ>;;Reset patroller«P„MNUM;;number.°„RET2Q>E;;Replot allµPƒPAT;;patrollersº$„MNUM;;in memory maze.¿(†DIFLEV;;All ploted?ÄF„RET3;;Yep...ÉQ‚V29;;Get "X" coordÎ ?;;andÓQ‚H29;;"Y" coordinateØ >;;andÝ …PUTPT;;print in maze/â #„MNUMçR†DIFLEV;;All ploted?ìH„RET2;;Nope...ñ„RET3Q>;;Reset Patroller#ö P„MNUMû:;;Back to program!!„TURNQ†RANDOM;;Get a random #., O>€;;If number>128,DƒPTR;;turn right.ƒPTLQ„LEFT;;Is there a wallR> ;;to the left?F„PTL1;;Yep. Right turn.#!…TLEFT;;Nope. Left turn.( „PTL1Q…RIGHT;;Is there a wall-R> ;;to the right?2F‡RNDTURN;;Ya. Random turn.7!†TRIGHT;;No. Right turn.<ƒPTRQ…RIGHT;;Is there a wallAR> ;;to the right?FF„PTR1;;Yep. Left turn.K!†TRIGHT;;No. Right turn.P„PTR1Q„LEFT;;Is there a wallUR> ;;to the left?ZF‡RNDTURN;;Ya. Random turn._!…TLEFT;;No. Turn left.d"‡RNDTURNQ†RANDOM;;Get Random #.i,nO>€;;If <128 thensD†TRIGHT;;turn right.x…TLEFTQ„DIR29;;Load current}?;;direction of‚Q…LTDIR8;;patroller and‡P„DIR29;;change withŒ!ƒRET;;new value.‘…LTDIR ====–†TRIGHTQ„DIR29;;Load current›?;;direction of Q…RTDIR8;;patroller and¥P„DIR29;;change withª!ƒRET;;new value.¯…RTDIR ====´„EDOTQ‚H29;;Get "X" and "Y"¹P…PLOTX;;coords from¾Q‚V29;;patroller.à P…PLOTYÈQ>;;Set MTEMP toÍP…MTEMP;;point to mazeÒQ>;;on screen× P…MTEMPÜQ„TIME;;What time is it?áR>;;Daytime?æH„ED01;;Nope...ë †PLOTCL;;Yes, plot point.ð „ED01:õ!‰?LINE1401$„MNUM;;Patroller #.úQ„DIR29;;Find directionÿ>;;its moving.0 Q†?WHICH9;;Add to Horiz,;;or vert.O„MNUM;;Offset to ?;;proper,;;patroller #."Q‚H28;;Add or Subtrct'O†?TABLE9;;from horiz or,P‚H28;;vert.1:6†?TABLE ÿ=ÿ==;†?WHICH ===@„SPOS =0=0==0B A‚ AE ="===G A‚AJ ====L A‚AO…PUTPTQ>4„MAZE;;Copy mazeTP…MTEMP;;address toYQ>5„MAZE;;MTEMP^ P…MTEMPcƒ?S01;;Decrease "Y"h)>;;until zero tomFƒ?S1;;find vert pos.rQ>2;;Add maze width.w ƒADD|!ƒ?S0ƒ?S1A;;Add horiz val.† ƒADD‹%>QƒPAT;;Store•P@…MTEMP7;;plot/eraseš :;;here.Ÿ$X;-------------------------------¤$X;Title Page and Option Selection©$X;-------------------------------®i³Q>@;;Disable DLIs.¸ P…NMIEN½Q>;;Turn off Screen P†DMACTLÇP…AUDC1;;and sounds.Ì$>Ñ&†SIZEP0;;Zero P/M sizes.Ö &†SIZEP1Û„SUB3P‡CENTER29;;Eraseà2;;CENTER2.å(>ê H„SUB3ï&†HPOSP0;;Position PM0 &ô&†HPOSP1;;PM1 off screen.ù$>þ„SUB4Q„SPOS9;;Reset P‚H29;;Patrollers' 2;;starting (>;;positions. H„SUB4 Q>ÿ;;Turn off timer. P„FLAG! Q>;;Zero Dummy and& P…DUMMY;;pointer+ P‡POINTER0 !‡?DLINIT;;Init.5 X;--------------: X;Title Page DLI? X;--------------D „?DLI5;;Save AccumulatorI AN 5;;Save X registerS CX 5;;Save Y register] Q‡POINTER;;Which DLI?b R>g H‡?DLOOP2l $>q ‡?DLOOP1&†COLPF0;;Shade linev 2;;in 16 shades{ P…WSYNC;;of blue€ (>Ÿ… H‡?DLOOP1Š !…?DRTS ‡?DLOOP2R>;;2nd DLI?” Fˆ?DLOOP25™ R>;;3rd DLI?ž H‡?DLOOP5£ ˆ?DLOOP25$>;;2nd DLI...¨ ‡?DLOOP3&†COLPF0;;Shade­ 2;;in 8 colors² 2;;of grey.· P…WSYNC¼ (>Á H‡?DLOOP3Æ !…?DRTSË !‡?DLOOP5%…DUMMY;;Change colorsÐ Q‡?COLORS8;;on bottomÕ P†COLPF2;;of titles.Ú #…DUMMYß Q…DUMMY;;All colorsä R>;;displayed?é H…?DRTS;;nope..î Q>;;Set color pntró P…DUMMY;;to start color.ø …?DRTS#‡POINTERý Q‡POINTER;;All DLIs!R> ;;done?!H„?DR1;;Nope... !Q>;;Set pointer!P‡POINTER;;to 1st DLI.!„?DR17;;Restore Y Reg!? !7;;Restore X Reg%!>*!7;;Restore A/!94!X;-------------------------9!X;Title Page Initialization>!X;-------------------------C! ‡?DLINITQ>†?DLISTÿ;;Set D/LH!P†SDLSTL;;address toM!Q>†?DLIST;;pointer.R!P†SDLSTLW!Q>„?DLIÿ;;Set DLI\!P†VDSLST;;addressa!Q>„?DLI;;to pointer.f!P†VDSLSTk!Q>À;;Enable DLIs.p! P…NMIENu!Q>z!P†COLOR2;;Black Background!Q>";;Turn on Screen„!P†SDMCTL;;Display.‰!Q„TIME;;Load time andŽ!!‚E4;;print it.“!ƒPLV%†DIFLEV;;Load dificulty˜!$>;;level.!Q…POINT8;;Get offset¢!?;;pointer.§! „PLV1Q†LEVELS8;;Get Character¬!R>[;;My EOL Char?±!FƒEND;;Ya...¶!P†PRINT19;;Nope print»!3;;character.À!2;;Inc POINTERS.Å!!„PLV1;;Print next.Ê!ƒENDQ†DIFLEVÏ!,;;Print level #Ô!O>;;in proper spotÙ!P†PRINT2;;of screen.Þ! Q†CONSOLã!R>;;SELECT pressd?è! H„END1í!Q>;;Yes...Set flagò! P„HOLD÷!!‚E3;;Beep!ü!„END1R>;;OPTION pressd?"F‚E3;;Beep!"R>;;START Pressed? "HƒEND;;nope..."Q>;;Zero last key"P‚CH;;pressed and"Q>;;flags." P„FLAG$" P„HOLD)"!x;;Main program!." ‚E3Q>03"P…AUDF1;;Frequency8"Q>;;Store volume="P†CDTMV3;;in timer.B"‚E1Q†CDTMV3;;Add an offsetG",;;to timer forL"O> ;;note volume.Q" P…AUDC1V"R> ["H‚E1`" P…AUDC1e"Q„HOLD;;SELECT pressed?j"R>o"F‚E5;;Nope...t"Q>y" P„HOLD~"#„TIME;;Toggle betweenƒ"Q„TIME;;Day and Nightˆ"R>;;TIME=0 ; Daytime"H‚E4;;TIME=1 ; Night’"Q>—" P„TIMEœ"‚E4?¡"$>¦"Q†TPOINT8;;Get offset for«"?;;Time Print°"„PLV3Q†TPRINT8;;Print untilµ"R>[;;My EOLº" H„PLV4¿"!ƒPLVÄ"„PLV4P†PRINT39É"3Î"2Ó" !„PLV3Ø"‚E5#†DIFLEV;;IncreaseÝ"Q†DIFLEV;;difficultyâ"R>;;level (0-6)ç" F„PLV5ì"!ƒPLV;;and print it.ñ" „PLV5Q>ö" P†DIFLEVû"!ƒPLV#X;-----------------------#X;Title Page Display List #X;-----------------------#†?DLIST p=p=p# B# „TEXT# =ð===ð # =€=## p==p==p=$# p=ð==‚==‚%# p=p=‚==‚=(# ‚==A-# †?DLIST2#"X;-----------------------------7#"X;Title Page and Selection Data<#"X;-----------------------------A#„TEXTF# A” ArgoSoft SoftwaAG# A”re Productions AH# A” Proudly AI# A”Presents AJ# AŒ LABYRINAK# A”THS THE ULTIMAAL# A”TE 3-D MAZE ADVEAM# A”NTURE A.NAN# A“.A.L.O.G. ComputingAP# A” PrograAR# A”mmed By Steven LashAT# A„owerAU# A” (C) 1987 ArgoSAW# A”oft Software ProductAY# A„ionsAZ# A” Number of ArgonA\# A‘ian Patrollers->0A_# A” You Will AtteAa# Ampt A Ab# A†EscapeAd# A” –Ïðôéïî‚ DifficAf# A”ulty Level - Ai# A” –Óåìåãô‚ DaytimAk# AŽe or Nightime Al# A‡Escape An# A” –Óôáòô ‚ Enter tAp# A”he Labyrinth Ar# A‚ As#‡?COLORS Â=²=¢=’u# ‚=x#†LEVELS A‘BeginnerEasy Ay# A”ModerateHard TAz# A”rivialSadisticInsaA{# A…ne A}#…POINT = ==# $=,=5‚#†TPRINT A‰DaylightA„# A‰NightimeA‡#†TPOINT = Œ#à‘# i