home *** CD-ROM | disk | FTP | other *** search
Wrap
From: jac@yoko.rutgers.edu (Jonathan A. Chandross) Newsgroups: comp.sources.apple2 Subject: v001SRC054: Inmate Parser -- ATN Based, Part04/05 Message-ID: <May.31.22.44.10.1991.11016@yoko.rutgers.edu> Date: 1 Jun 91 02:44:10 GMT Approved: jac@paul.rutgers.edu Submitted-by: Phil Goetz (goetz@cs.buffalo.EDU) Posting-number: Volume 1, Source:54 Archive-name: util/parser/inmate/part04 Architecture: ANY_2 Version-number: 1.00 =transit -* -SAVETRANSIT28 -OBJ .EQ 1 -DEST .EQ 2 -INSTR .EQ 3 -EXCE .EQ 4 -* TRANSITION ACTIONS -* CAN USE SUB FOR MULT IF OBJS ALSO HAVE 6 BYTES -TV LDY #0 - STY MISC+1 - STY TEMP+1 - LDA WVERB MISC,+1=WVERB*6 - STA TEMP - ASL - BCC .0 - INC TEMP+1 -.0 STA TEMP - ROL MISC+1 - ASL - ROL MISC+1 - ADC TEMP C=0 - BCC .1 - INC MISC+1 - CLC -.1 ADC #VERBS - STA MISC - LDA /VERBS - ADC MISC+1 - ADC TEMP+1 - STA MISC+1 -.2 LDA (MISC),Y - STA CASEFRAME,Y - INY - CPY #6 - BNE .2 -RESVDAT LDY #1 -.1 LDA CASEFRAME+4,Y - STA VDAT+1,Y - DEY - BPL .1 -TRTS RTS -TPLACE LDA WNOUN-1,X USED ONLY FOR NON-NOUN PLACES (NSEW..) - STA SPLACE - RTS -TPOBJ LDX NPSP - LDA #TLPOBJ - STA NPSTACK,X - INX - LDA /TLPOBJ - JMP TNP -TLPOBJ JSR COMBINE - LDA NOUNLIST+1 - BNE .2 >1 PLACE - LDA NOUNLIST - BNE .1 - JMP DNS 0 PLACE -.1 CMP #LP+1 - BCS NAP NOT A PLACE - STA SDEST - LDA #7 - JMP OUTOFNP -.4 .US /GIVE ONLY ONE PLACE.@=/ -.2 LDY /.4 - LDA #.4 - JMP PS -NAP LDY /.6 - LDA #.6 - BCS NAP-3 ALWAYS -.6 .US /THAT'S NOT A PLACE!@=/ -* TADV, T9.10, T9.E UNUSED -TADV LDA WNOUN-1,X - STA SADV - RTS -T9.10 JSR LOADNUM - STA SPT - STY SPT+1 - RTS -T9.E JSR LOADNUM - STA STIME - STY STIME+1 - RTS -TEXC LDA #EXCE - STA NTYPE - LDX NPSP - LDA #TLEXC - STA NPSTACK,X - INX - LDA /TLEXC - JMP TNP - RTS -TLEXC JSR EXCL - LDA #5 - JMP OUTOFNP -EXCL LDY #0 -.1 LDA NOUNLIST,Y - BEQ .3 NO MORE - JSR RFO - INY - CPY #20 - BNE .1 -.3 RTS -* REMOVE A FROM OBJLIST -* FIND & ZERO IT IN OBJLIST -RFO LDX #21 -.1 DEX - BEQ .3 - CMP OBJLIST-1,X - BNE .1 - LDA #0 - STA OBJLIST-1,X - STX TEMP -* MOVE LAST OBJ INTO EMPTY SPACE - LDX #21 -.2 DEX - CPX TEMP - BCC .3 LAST OBJ WAS ZEROED - LDA OBJLIST-1,X SEARCH FOR LAST OBJ - BEQ .2 - PHA - LDA #0 - STA OBJLIST-1,X REMOVE FROM END - PLA - LDX TEMP - STA OBJLIST-1,X & PUT IT IN PLACE OF REMOVED OBJ -.3 RTS -* VERB PART:GET NEW VERB#,DELETE VERB PART,JMP ATN -TPRT STX TEMP - LDA #$D0 BNE - JSR SKP2 POINT TO VERB PARTS - LDX TEMP -.1 JSR VDAT - TAY - BEQ BEJF PART NOT FOUND - CMP WVERB-1,X PART# - PHP - JSR VDAT NEW VERB# - PLP - BNE .1 - STA WVERB - STA PFND - TXA - TAY - DEX -.2 JSR TMOVE - INX - INY - CPY WORDS - BCC .2 - DEC WORDS - PLA - PLA - JMP ATN -PFND .BS 1 >0=PART FOUND -TPM LDA CASEFRAME+1 DEST ALLOWED WI THIS VERB? - AND #2 -BEJF BEQ JMPFAIL NO - LDA WNOUN-1,X - TAX - JSR CLCPNT REVERSE - STA SPM - RTS -T6.7 LDA #DEST - STA NTYPE - LDX NPSP - LDA #TLDEST - STA NPSTACK,X - INX - LDA /TLDEST - JMP TNP -TLDEST JSR COMBINE - LDA NOUNLIST+1 - BNE .4 >1 DEST - LDA NOUNLIST - BEQ .0 - STA SDEST - JSR CHECKLOC - BCC .1 -.0 JMP DNS -*.1 LDX WTFIN VERB -* CPX #VP -* BNE .2 -* CMP #LP+1 -* BCS NAP NOT A PLACE -.1 LDA #7 - JMP OUTOFNP -.4 JMP OD -T7.8 LDA CASEFRAME+1 INSTR ALLOWED? - AND #8 - BEQ JMPFAIL NO - JSR LOADNUM - STA SPI - STY SPI+1 -T7RTS RTS -*-------------------------------- -* JUMPED TO IF A JUMP TRANSITION'S REQUIREMENTS AREN'T MET -JMPFAIL PLA - PLA - LDX CURWORD - JMP A4 -*-------------------------------- -LOADNUM DEX - LDA WLO,X - LDY WHI,X - RTS -*-------------------------------- -* ON ENTERING NP: -* STORE ADDRESS OF LEAVE ROUTINE ON NPSTACK -* ZERO SPN -* INC WORDS -* ZERO ADJLIST -* ON EXITING: -* DEC WORDS -TNUM LDA SPN - BNE JMPFAIL NUM CAN'T BE USED FOR SOURCE OR DEST - LDA WLO-1,X - CMP #ALLNUM MAKE ALL=0 - BNE .1 - LDA WHI-1,X CONT CMP ALLNUM - BEQ .2 -.1 LDA WNOUN-1,X GET VALUE -.2 STA SNUM - RTS -TPRN LDA CNTOBJ - BNE TN2 - LDA LSTOBJ - BNE TN2 - PLA - PLA - LDY /.1 - LDA #.1 - JMP PS -.1 .US /I DON'T KNOW WHAT YOU MEAN BY "IT".@=/ -CNTOBJ .BS 1 CONTEXT OBJ -TADJ LDA WNOUN-1,X GET ADJ# - LDY #$FF -.1 INY - LDX ADJLIST,Y - BNE .1 - STA ADJLIST,Y -TARTS RTS -TNOUN LDA WNOUN-1,X -TN2 PHA - JSR COMBINE - STA UALL -.0 STA LNL,Y ERASE LNL - STA SOURCELIST,Y AND SOURCELIST - DEY - BPL .0 - PLA - STA TEMP3 -* SEE IF OBJ HAS SUBOBJS, I.E. "DOOR" CAN REFER TO MANY DOORS -* ENTER WI OBJ IN A -* ON EXIT, X=#SUBOBJS,WHICH ARE ON STACK -* NO MORE THAN 256 BYTES IN SUBTAB DATA - LDY #0 -.1 LDX SUBTAB,Y - BEQ TN1 NOT FOUND - CMP SUBTAB,Y - BNE .3 - LDX #0 -.2 INY - LDA SUBTAB,Y - BEQ TN1 END OF LIST - PHA - INX - BNE .2 ALWAYS -.3 INY - LDX SUBTAB,Y - BNE .3 FIND END OF THIS LIST - INY - BNE .1 ALWAYS -TN1 TXA - BNE .1 - LDA TEMP3 - JSR CHECKADJ - BCS TARTS ELIMINATED BY ADJ - STA SOURCELIST - CMP #ALL - BEQ .0 - JMP .3 -.0 DEC UALL FF FOR BIT - LDX #HOLDS - BIT CASEFRAME - BVC .12 OBJS IN LOC FORBIDDEN - LDA LIGHT - BEQ .12 USES OBJS IN ME IF NO LIGHT - LDA LOC - JSR GETOBJ NOTE THAT THIS DOESN'T INCLUDE LOC WITH OBJS IN LOC - JMP .1 -.12 LDA #ME OBJS IN ME - JSR GETOBJ -.1 LDY #0 - STY INLOC NO OBJS YET IN LOC - STY TEMP+3 SUB POINTER -.2 DEX - BMI .26 - PLA - JSR CHECKADJ - BCS .2 - JSR CHECKLOC WHEN DEALING WI SUBSETS,ONLY INCLUDE OBJS IN LOC - STY TEMP+2 - LDY TEMP+3 - STA LNL,Y SAVE IN CASE WE MUST RESTORE - INC TEMP+3 - LDY TEMP+2 - BCS .2 NOT LOC - INC INLOC 1 OBJ IN LOC -.23 JSR FF4A - LDA $45 - JSR PNTOBJ - LDY #5 - LDA (MISC),Y - PHP - JSR FF3F - PLP - BPL .25 - BIT UALL INVISIBLE^(0/FF) - BNE .2 DON'T INCLUDE INVISIBLE IN ALL -.25 STA SOURCELIST,Y - INY - BNE .2 ALWAYS -*IF NO OBJ IS IN LOC & ABS OBJS ALLOWED,RESTORE OBJS NOT IN LOC -.26 LDY TEMP+3 - LDA INLOC - BNE .28 AT LEAST 1 WAS IN LOC - BIT CASEFRAME - BPL .28 -.27 DEY - BMI .99 - LDA LNL,Y - STA SOURCELIST,Y - JMP .27 -.99 LDY TEMP+3 -.28 LDA #0 -.29 DEY - BMI .3 - STA LNL,Y CLEAR FOR SOURCES - BPL .29 -* NOUNS IN SOURCELIST, LAST IN NL, LNL EMPTY -.3 LDX SPN - BNE .6 PRECEDING PREP - LDY #19 1ST NOUN -.4 LDA SOURCELIST,Y MOVE SOURCELIST INTO NL & LNL - STA NOUNLIST,Y FOR POSSIBLE COMBINE AFTER PREP NOUN - STA LNL,Y - DEY - BPL .4 -.45 RTS -.6 CPX #NOTIN - BCS .8 SPECIAL PN - LDY #0 - STY TEMPIND - STY TEMPIND+1 -.65 LDY TEMPIND - LDA SOURCELIST,Y - BEQ .45 NONE LEFT - INC TEMPIND - LDX SPN - JSR GETOBJ A=OBJ,X=EDGE WE'RE LOOKING FOR - LDY TEMPIND+1 -.7 DEX - BMI .65 - PLA - STA LNL,Y - INY - INC TEMPIND+1 - BNE .7 ALWAYS -.8 -TNRTS RTS IMPLEMENT .8 LATER -TEMP3 .BS 3 -TEMPIND .BS 2 -UALL .BS 1 1=OBJ IS ALL -INLOC .BS 1 -TPN LDA WTYPE-1,X USED IN TNOUN TO SEE IF THIS PN CAN BE A PM -*THUS PM MUST BE 1ST TYPE - STA PTYPE - LDA WNOUN-1,X -TP2 JMP CLRADJ NEXT LINE STA SPN -PTYPE .BS 1 -TCONJ LDA NTYPE - CMP #INSTR - BNE .1 - PLA - PLA - JMP POI -.1 CMP #DEST - BNE .2 - PLA - PLA - JMP OD -.2 CMP #EXCE - BNE .3 - JSR EXCL - JMP .4 -.3 LDA #$FF - STA UCONJ MARK CONJ USED - STA JUCONJ JUST USED CONJ - JSR COMBINE - JSR CHECKOBJ - JSR NL.OL -.4 LDA #0 - BEQ TP2 -UCONJ .BS 1 1=CONJ USED -JUCONJ .BS 1 -TOBJ LDA #OBJ - STA NTYPE - LDX NPSP - LDA #TLOBJ - STA NPSTACK,X - INX - LDA /TLOBJ - JMP TNP -TLOBJ JSR CHECKOBJ - JSR NL.OL - JSR COMBINE - STA JUCONJ -* IF NOTHING LEFT AND A PN WAS GIVEN,LNL -> DEST IF ALLOWED - LDA NOUNLIST - BNE .9 - LDA SPN - BNE .2 IF THERE WERE NO PN,COULDN'T BE A DEST -.9 LDX TEMP3+1 - LDA #0 -.0 STA OBJLIST,X DELETE LAST NL.OL RESULTS - INX - CPX #20 - BNE .0 - JSR NL.OL - LDA OBJLIST - BEQ .24 RTS -.1 LDA #3 JMP TO NODE 3 - JMP OUTOFNP -.2 LDA CASEFRAME+1 SEE IF DEST ALLOWED - AND #2 - BEQ .23 NO - LDA SOURCELIST+1 - BNE OD MORE THAN 1 DEST - LDA OBJLIST - BNE .25 OBJLIST NOT EMPTY -.23 LDA OBJS WERE ALL OBJS ELIMINATED BEFORE COMBINE? -.24 BEQ CARTS YES,NO MORE MSG - LDY /NOBJ - LDA #NOBJ - JMP PS -.25 LDA SOURCELIST - BEQ .5 - JSR CHECKLOC - BCS .5 - LDX PTYPE SAVED BY TPN - CPX #PM - BNE .6 PN CAN'T BE PM - STA SDEST MAKE LAST SOURCE THE DEST - LDX SPN - JSR CLCPNT DEST POINTER IS OPPOSITE OF SOURCE POINTER - STA SPM - JMP .1 -.5 JMP DNS -.6 JMP SENTFAIL -OD LDY /ODEST >1 DEST - LDA #ODEST - JMP PS -TINSTR LDA #INSTR - STA NTYPE - LDX NPSP - LDA #TLINSTR - STA NPSTACK,X - INX - LDA /TLINSTR -TNP STA NPSTACK,X - INX - STX NPSP - LDX #39 - LDA #0 -.2 STA NOUNLIST,X CLEAR NL & LNL - DEX - BPL .2 - INC WORDS MAKE SURE ATN COMES OUT OF NP -CLRADJ STA SPN - LDA #0 - STA SNUM - LDX #7 -.1 STA ADJLIST,X ERASE OLD ADJS - DEX - BPL .1 -CARTS RTS -TLEAVENP PLA - PLA -TLNP2 LDX NPSP USED FROM ATN - DEX - LDA NPSTACK,X - STA .1+2 - DEX - LDA NPSTACK,X - STA .1+1 - STX NPSP - DEC WORDS MAKE UP FOR INC ON WAY IN -.1 JMP 0 JMP TO PROPER EXIT ROUTINE -NTYPE .BS 1 -TLINSTR JSR COMBINE - LDA NOUNLIST SHOULD BE 1 INSTR - BEQ PALI - STA SINSTR - LDY NOUNLIST+1 - BNE POI BUT ONLY ONE - JSR CHECKLOC - BCC .3 - LDA #.1 - LDY /.1 - BNE PPS -.1 .US /I DON'T SEE ANY+/ - .DA PRINS - .US / HERE!@=/ -.3 LDA #9 JMP TO NODE 9 -OUTOFNP LDX CURWORD - STA WORDNODE,X JUMPING TO NODE Z, SO RETURN TO Z RATHER THAN NODE JUST LEFT (F) - JSR GETNODE - JMP A8 -PALI LDA #PA2 - LDY /PA2 -PPS JMP PS -PA2 .DA #"$,PLSP - .US /AN INSTRUMENT.@=/ -POI LDA #.1 - LDY /.1 - BNE PPS -.1 .DA #"$,PLSP - .US /ONLY ONE INSTRUMENT.@=/ -ODEST .US /YOU CAN ONLY$/ - .DA SP - .US /ONE DESTINATION.@=/ -NOBJ .US /I SEE NO SUCH OBJECT.@=/ -SP .US / SPECIFY =/ -PLSP .US /PLEASE$/ - .DA SP,#"= =tsub -* -SAVETSUB16,S6,D1 -* TRANSITION SUBS -* SEE IF ADJS ELIMINATE ANY NOUNS -CHECKADJ STX TEMP3+2 - CLC IN CASE OF IMMEDIATE EXIT - LDX ADJLIST - BEQ .4 - STY TEMP3 - STA TEMP3+1 - LDX #ADJEC - JSR GETOBJ FIND ADJS - LDY #7 -.7 LDA ADJLIST,Y - BEQ .8 - ORA #$80 SET HIBIT TO MARK AS UNMATCHED - STA ADJLIST,Y -.8 DEY - BPL .7 -.0 DEX - BMI .3 - PLA - ORA #$80 - LDY #8 -.1 DEY - BMI .0 - CMP ADJLIST,Y - BNE .1 - AND #$7F MARK AS MATCHED - STA ADJLIST,Y - JMP .0 -.3 LDY #8 -.35 DEY - BMI .38 ALL ADJS DELETED, NONE ELIMINATED NOUN - LDA ADJLIST,Y NO ADJS SHOULD BE LEFT UNLESS NOT ATTACHED TO NOUN - BPL .35 MATCHED - SEC NOUN ELIMINATED - .HS 90 BCC -.38 CLC - LDY TEMP3 - LDA TEMP3+1 -.4 LDX TEMP3+2 - RTS -*ELIMINATE SUBSET OBJS NOT IN ROOM -*ENDLESS LOOP IF A IS IN B IS IN A -* USED BY TRANSIT & CNDACT -CHECKLOC STX TEMP3+1 - STY TEMP3 - PHA SAVE OBJ -.1 CMP ACLOC - BEQ .2 - LDX #IN - JSR GETOBJ - DEX - BMI .3 NOT IN LOC - PLA OBJ LAST OBJ IS IN - JMP .1 FIND OBJ THIS ONE IS IN -.2 STA ILOC LOC OBJ IS IN - CLC - .HS B0 BCS -.3 SEC NOT HERE,ELIM - PLA - LDX TEMP3+1 - LDY TEMP3 - RTS -ILOC .BS 1 -*------------------------------- -* NL -> OBJLIST -* WITHOUT ERASING OR DUPLICATING WHAT'S THERE -NL.OL LDY #0 - LDX #$FF -.1 INX - LDA OBJLIST,X SEARCH FOR 1ST OPEN BYTE - BNE .1 - STX TEMP3 INDEX TO NEXT FREE BYTE IN OBJLIST - STX TEMP3+1 IN CASE WE NEED TO DELETE NEW ADDITIONS -* BECAUSE A COMBINE IN TLOBJ ELIMINATES THEM -.2 LDA NOUNLIST,Y - BEQ .6 DONE - LDX TEMP3 - BEQ .4 NO OBJS IN OBJLIST YET - DEX -.3 CMP OBJLIST,X - BEQ .5 SKIP IF ALREADY IN OBJLIST - DEX - BPL .3 - LDX TEMP3 -.4 STA OBJLIST,X - INC TEMP3 -.5 INY - CPY #20 - BNE .2 -.6 RTS -*------------------------------- -* COMBINE NOUNLIST & LNL INTO NOUNLIST -* DELETING OBJS NOT IN BOTH -* USED TO ELIMINATE OBJS NOT IN SOURCE -* ON EXIT A=0 -COMBINE LDA #2 2 PASSES - STA PASS -.1 LDY #0 -.2 LDX LNL,Y - BNE .3 OBJECT FOUND -.25 INY SKIP BLANK - CPY #20 - BNE .2 - LDY #19 - LDA #0 - DEC PASS - BEQ CORTS -.26 STA NOUNLIST,Y ZERO NL TO MOVE LNL INTO IT - DEY - BPL .26 - BMI .1 -.3 LDA PASS - LSR LOW BIT -> C - TXA - BCS .5 2ND PASS - LDX #19 1ST PASS -.4 CMP NOUNLIST,X - BEQ .25 LEAVE IT ALONE CAUSE IT'S IN BOTH LISTS - DEX - BPL .4 - LDA #0 - STA LNL,Y DELETE - BEQ .25 ALWAYS -.5 LDX #$FF - PHA -.6 INX - LDA NOUNLIST,X - BNE .6 - PLA - STA NOUNLIST,X - BNE .25 ALWAYS -CORTS RTS -PASS .BS 1 -*-------------------------------- -* CHECK OBJS FOR LOC & NUM -* HAVE ALREADY BEEN CHECKED WI SOURCE -* ELIMINATE UNQUALIFIED WI MESSAGE -*SEE IF 0,1,OR MORE OBJS -CHECKOBJ TSX - STX STEMP - LDA NOUNLIST - BNE CH2 - LDA JUCONJ DON'T PRINT ERRMSG TILL LAST CHECK OF NOUNLIST - ORA OBJLIST OBJ LEFT FROM BEFORE CONJ? - BNE CORTS -PLADNS PLA - PLA -DNS LDY /DONSEE - LDA #DONSEE - BIT CASEFRAME - BVS .53 OBJS IN ROOM PRMITTED? - LDY /NOTCAR OBJS NOT IN ROOM,BUT SINCE VERB DOESN'T PERMIT - LDA #NOTCAR OBJS IN ROOM,PRINT NOTCAR -.53 JMP PS -CH2 LDA NOUNLIST+1 - ORA UCONJ 2 OBJS IF 2 IN NL OR ANOTHER TO COME AFT CONJ - STA TWOOBJ - JSR STNL - LDY #20 - LDA #0 -.05 STA LOCLIST-1,Y - DEY - BNE .05 -* FOR EACH OBJ,RECURSIVELY FIND OBJ WHICH IT'S IN -.10 STY NOTDONE -.15 STY TEMPIND - LDA (TEMP+2),Y - BEQ .25 - CMP ACLOC DOESN'T MATTER IF LOC I'M IN IS IN SOMETHING ELSE - BEQ .20 - CMP ACTOR STOP RECURSION AT ME,THO ME IS IN (LOC) - BNE .19 - LDA NOUNLIST,Y - CMP ACTOR IS IT ME? - BEQ .16 - LDA ACTOR NO,LOC IS ME - BNE .20 -.16 LDA ACLOC YES,LOC IS (LOC) - JMP .20 -.19 LDX #IN - JSR GETOBJ FIND WHAT CURRENT OBJ IS IN - LDY TEMPIND - DEX - BMI .22 OBJ ISN'T IN ANYTHING - PLA - INC NOTDONE FLAG:FOUND A PAPA OBJ -.20 STA LOCLIST,Y REP OBJ WITH OBJ IT'S IN -.22 INY - CPY #20 - BNE .15 -.25 LDA NOTDONE - BEQ CH30 - LDA #LOCLIST - STA TEMP+2 ALL SUBSEQUENT TIMES THRU,READ FROM LOCLIST INSTEAD - LDA /LOCLIST - STA TEMP+3 - LDY #0 - BEQ .10 -*ELIMINATE OBJS NOT IN ALLOWED LOCATIONS (ABSENT,LOC, OR ACTOR) -CH30 STY OBJS #OBJS - DEY HIGHEST INDEXED OBJ - STY TEMPIND - LDA CASEFRAME - BMI .60 ABSENT OBJS ALLOWED - LDA #9 - STA ERRMSG BLANK - LDA #0 -.35 LDX LOCLIST,Y - CPX ACLOC IN LOC? - BEQ .40 - CPX ACTOR IN ME? - BEQ .40 - JSR ELIM -.37 STA NOUNLIST,Y DELETE -.40 DEY - BPL .35 - LDA UALL - BEQ .60 - LDX OBJS - DEX - BNE .60 - LDA UCONJ - STA TWOOBJ CHANGE IF OBJS FROM ALL HAVE BEEN ELIMINATED -.60 BIT CASEFRAME - BVS .65 OBJS IN ROOM ALLOWED - LDA ACLOC - STA TEMPIND+1 SEE IF OBJS ARE IN (LOC) - LDA #1 NOTCAR - STA ERRMSG - JSR CLOC -.65 LDA CASEFRAME - AND #$20 - BNE .70 OBJS IN ME ALLOWED - LDA ACTOR - STA TEMPIND+1 SEE IF OBJS ARE IN ACTOR - LDA #0 CARR - STA ERRMSG - JSR CLOC -.70 JSR COMP - LDY SNUM - BEQ CHL - CPY #21 MAX+1 - BCC .83 -.95 LDY /NSM - LDA #NSM - JMP PS -.83 DEY INDEX STARTS AT 0 - JSR STNL - LDA (TEMP+2),Y - BEQ .95 ?"I DON'T SEE THAT MANY" & CONT - LDA #0 -.85 INY - CPY #20 - BCS CHL - STA (TEMP+2),Y - BCC .85 ALWAYS:FILLS IN REST OF NOUNLIST WI 00s - LDY #0 -CHL LDA NOUNLIST,Y - BEQ COMP - JSR CHPROP - INY - CPY #20 - BNE CHL -*COMPRESS NOUNLIST:REMOVE 0'S -COMP LDY #0 - LDX #0 -.1 LDA NOUNLIST,Y - STA NOUNLIST,X - BEQ .2 IF BLANK,DON'T INX,THUS REMOVING BYTE - INX -.2 INY - CPY #20 - BNE .1 -.3 INX - STA NOUNLIST,X - CPX #19 - BNE .3 - RTS -* CHECK PROPERTIES OF 1 OBJ AGAINST VERB'S REQUIREMENTS -CHPROP STY TEMP+3 - STA TEMP+2 - JSR PNTOBJ - JSR RESVDAT RESET POINTER TO VERB DATA - LDA #2 - STA ERRMSG - LDA CASEFRAME - ASL - ASL - ASL - ASL BIT 4 -> C - BCC .10 NO LIST OF ALLOWED OBJS - PHA -.3 JSR VDAT - TAY - BEQ .64 CAME TO END OF LIST WIOUT FINDINT IT - CMP TEMP+2 - BNE .3 -.7 JSR VDAT - TAY - BNE .7 MOVE POINTER TO NEXT ITEM - PLA -.10 ASL - BCC .20 NO LIST OF FORBIDDEN OBJS - PHA -.13 JSR VDAT - CMP TEMP+2 - BEQ .64 FORBIDDEN OBJ - TAY - BNE .13 NOT EOL - PLA -.20 INC ERRMSG - ASL - BCS .30 HUMAN OBJ ALLOWED - PHA - LDY #5 PROP3 - LDA (MISC),Y - AND #8 - BNE .64 HUMAN,FORBIDDEN - PLA -.30 INC ERRMSG - ASL - BCS .40 ANIMATE OBJ ALLOWED - PHA - LDY #5 - LDA (MISC),Y - AND #$10 - BNE .64 ANIMATE,FORBIDDEN - PLA -.40 INC ERRMSG - ASL - BCS .50 INANIMATE OBJ ALLOWED - PHA - LDY #5 - LDA (MISC),Y - AND #$10 - BEQ .64 INANIMATE,FORBIDDEN - PLA -.50 INC ERRMSG - LDA CASEFRAME+1 - ASL - BCC .60 - PHA - JSR VDAT X - LDY #0 SIZE - CMP (MISC),Y - BCC .64 SIZE>X - PLA -.60 INC ERRMSG - ASL - BCC .70 - PHA - JSR VDAT Y - LDY #0 - CMP (MISC),Y - BCC .67 -.64 PLA A WAS SAVED -.65 JMP PELIM -.67 PLA -.70 ASL - BCC .80 - PHA - JSR TBIT - BNE .64 - PLA -.80 ASL - BCS .90 BURNT/BROKEN PERMITTED - LDA #8 - STA ERRMSG - LDY #5 - LDA (MISC),Y - AND #$60 - BNE .65 -.90 LDY TEMP+3 - RTS -* TEST BIT: ON EXIT Z=1 IFF ANY OF BITS ARE SET -TBIT LDY #2 - STY ERRMSG -.1 INY - JSR VDAT - TAX - BEQ .2 - AND (MISC),Y - BNE .4 OR:SUCCESS IF ANY OF BITS IS SET -.2 CPY #5 - BNE .1 - INY Z<=0:3 BYTES WIOUT MATCHED PROP. FAILURE IF 3 00s. - RTS -.3 INY - JSR VDAT ADVANCE VDAT -.4 CPY #5 - BNE .3 - RTS Z=1 -*GET VERB DATA -VDAT LDA $FFFF VERB DATA - INC VDAT+1 - BNE .1 - INC VDAT+2 -.1 RTS -STNL LDA #NOUNLIST - STA TEMP+2 - LDX /NOUNLIST - STX TEMP+3 - RTS -* DELETE OBJS IN FORBIDDEN LOCS -CLOC LDY TEMPIND - LDA #0 -.1 LDX LOCLIST,Y - CPX TEMPIND+1 FORBIDDEN LOC? - BNE .2 - JSR ELIM ? MESSAGE -.2 DEY - BPL .1 - RTS -NOTDONE .BS 1 1=STILL FINDING PAPA OBJECTS -TWOOBJ .BS 1 0=1 OBJ IN NL -OBJS .BS 1 #OBJS -DONSEE .US /I DON'T SEE ANY HERE.@=/ -NSM .US /YOU DON'T SEE THAT MANY.@=/ -STEMP .BS 1 TEMP STORAGE FOR STACK POINTER -* SKIP OBJ DATA -* 0-7F SKIP THAT MANY BYTES -* 80+ LIST -SKPOBJ LDA #$10 BPL -SKP2 STA .7 - JSR RESVDAT - LDY #18 19 BITS - LDA CASEFRAME+2 - STA TEMP+3 - LDA CASEFRAME+1 - STA TEMP+2 - LDA CASEFRAME -.1 ASL TEMP+3 - ROL TEMP+2 - ROL - BCC .2 - LDX SKPTAB,Y - BEQ .2 NO DATA - PHA - BMI .15 -.12 JSR VDAT - DEX - BNE .12 - JMP .17 -.15 JSR VDAT LIST - TAX - BNE .15 -.17 PLA -.2 DEY -.7 BPL .1 BNE POINTS VDAT AT VERB PARTS - RTS -SKPTAB .HS FFFFFF000000FF00030101000000FFFF000000 -* ELIMINATE A NOUN FROM NLIST -* IF MORE THAN 1 NOUN OR BEFORE CONJ,PRINT NAME OF NOUN BEFORE MESSAGE -* & GO BACK FOR MORE. ELSE PRINT & QUIT. -* ON ENTRY: Y POINTS TO OBJ IN NOUNLIST -* SAVES Y,SCRAMBLES A&X -PELIM LDY TEMP+3 CALLED FROM CHPROP -ELIM STY TEMP+3 - DEC OBJS 1 MORE GONE - LDA NMSG - BNE .17 - LDA TWOOBJ - BEQ .1 - LDA UALL - BEQ .12 - LDA OBJS - BNE .17 ONLY PRINT LAST REJECT IN CASE OF ALL - BEQ .1 -.12 LDA NOUNLIST,Y CAN'T LOAD FROM TEMP+2 SINCE CH30 CALLS ELIM - JSR OBJCOL -.1 LDX ERRMSG - CPX #9 - BNE .15 - JSR DNS - JMP .17 -.15 LDY MSGS+9,X - LDA MSGS,X - JSR PS -* WOULD SAVE BYTES HERE BY PRINTING CR, BUT NOTCAR IS USED BY ANOTHER -.17 LDA OBJS ANY LEFT? - ORA JUCONJ MORE COMING? - BNE .3 - LDX STEMP ONLY 1 OBJ & IT WAS BLOWN. BACK TO CALLER. - TXS -.3 LDY TEMP+3 MULT OBJS,RTS - LDA #0 - STA NOUNLIST,Y DELETE OBJ -ELRTS RTS -ERRMSG .BS 1 MSG# -NMSG .BS 1 0=PRINT MSG -* CHANGE MSGS+9 IF YOU CHANGE # MSGS -MSGS .DA #CAR,#NOTCAR,#.3,#.4,#.5,#.6,#.7,#.8,#IR - .DA /CAR,/NOTCAR,/.3,/.4,/.5,/.6,/.7,/.8,/IR -.3 .DA #"$,.10,#"+,.9 - .US /<.@=/ SKIPPED IF UALL -.4 .DA #"$,.10 - .US /A PERSON!@=/ -.5 .DA #"$,.10 - .US /AN ANIMAL!@=/ -.6 .DA #"$,.10 - .US /SOMETHING THAT'S NOT ALIVE!@=/ -.7 .DA #"$,.11 - .US /BIG!@=/ -.8 .DA #"$,.11 - .US /SMALL.@=/ -.9 LDA UALL - BEQ .20 - LDA #.12-1 FOR ALL,DON'T PRINT LAST OBJ - LDX /.12-1 - JMP SWPR -.20 LDX TEMP+3 - LDA NOUNLIST,X - STA $10 - RTS -.10 .US /YOU CAN'T +/ - .DA PRVERB,#" ,#"= -.11 .US /IT'S TOO =/ -.12 .US /ANYTHING HERE.@=/ -IR .US /YOU CAN'T. IT'S RUINED.@=/ -CAR .US /YOU'RE$/ - .DA CI,#"= -NOTCAR .US /YOU'RE NOT$/ - .DA CI,#"= -CI .US / CARRYING IT.@=/ -*-------------------------------- -CHKLST LDY #40 NL & LNL - LDA #0 -.1 STA NOUNLIST-1,Y - DEY - BNE .1 -.2 JSR VDAT - TAX - BEQ .3 EOL - STA LNL,Y PUT PERMITTED LIST IN LNL - INY - BNE .2 ALWAYS -.3 RTS -*CHECK SENT FOR REQRD PARTS -CHECKSENT LDA CASEFRAME+1 - LSR DEST REQD? - BCC .1 NO - LDY SDEST GIVEN? - BNE .1 YES - LDA #74 GIVE DEST! - JMP PMSG -.1 AND #2 (4 BEFORE LSR) INSTR REQD? - ORA SINSTR GIVEN? - BNE .8 YES - JMP CDEST -.8 JSR CHKLST - LDA SINSTR - BEQ .40 -* CHECK INSTR - STA NOUNLIST - STA $10 - JSR COMBINE - LDA NOUNLIST - BNE .32 - LDY /.30 - LDA #.30 - JMP PS -.32 JSR CINME - BEQ .55 IN ME - LDA SINSTR - JSR PNTOBJ INEFFICIENT - LDY #3 - LDA (MISC),Y - AND #$20 - BNE .55 CAN'T CARRY LIQUID - LDA SINSTR - LDX #PARTOF - JSR GETOBJ - PLA - DEX - BPL .55 CAN USE INSTR WHICH IS PART WIOUT CARRYING IT -* IE HANDS,HOSE,TEETH -* USED TO PICK UP INSTRUMENT. BUT THIS CAUSED PROBLEMS WITH -* RESTRICTIONS (IE OWNERSHIP). - PHA - LDA #131 YOU DON'T HAVE > - JMP PMSG -* INSTR REQD, NOT GIVEN -* PUT OBJS IN ME IN NL & INSTRLIST IN LNL, THEN COMBINE -.40 LDA #ME - LDX #HOLDS - JSR GETOBJ -.45 DEX - BMI .50 - PLA - STA NOUNLIST,X - BNE .45 ALWAYS -.50 JSR COMBINE - LDA NOUNLIST+1 - BEQ .51 -.60 LDA #73 WITH WHAT? - JMP PMSG -.51 LDA NOUNLIST - BEQ .60 - STA SINSTR - LDY /.70 - LDA #.70 -.54 JSR PRINT -.55 LDA SINSTR - JSR PNTOBJ - LDY #5 - LDA (MISC),Y - AND #$60 BURNT OR BROKEN? -.58 BEQ CDEST - LDA #IR - LDY /IR - JMP PS -.30 .US /YOU CAN'T +/ - .DA PRVERB - .US / WITH <!@=/ -.70 .US /(WITH+/ - .DA PRINS,#"),#"@,#"= -PRINS LDA SINSTR -PIT PHA - STY $24 - LDA #$A0 - JSR FDF0 SPACE LEFT OUT OF STRING SO A COULD BE IN ANYTHING - LDA $1A - STA $50 - LDA $1B - STA $51 - PLA - JSR PROBJ - LDA $50 - LDX $51 -SWPR STA $1A - STX $1B - RTS -CDEST LDA CASEFRAME+2 - BPL .10 NO DESTLIST - JSR CHKLST ADVANCE VDAT - LDA SDEST - BEQ .10 NO DEST - STA NOUNLIST - JSR COMBINE - LDA NOUNLIST DEST IN DESTLIST? - BNE .10 Y - LDA #108 USE A DIFFERENT DEST -.8 JMP PMSG -.10 LDA CASEFRAME+2 - ASL - BPL .20 NO PREPLIST - JSR CHKLST - LDA SPM - BEQ .20 NO PREP (UNLIKELY) - STA NOUNLIST - JSR COMBINE - LDA #109 TRY A DIF PREP - LDX NOUNLIST PREP IN PREPLIST? - BEQ .8 N -.20 LDA CASEFRAME+2 - AND #$10 - BEQ HANDLER VERB PART N/R - LDA #113 THAT VERB NEEDS TWO PARTS - LDX PFND - BEQ .8 -* FALL THRU TO HANDLER =verbs -* -SAVEVERBS33.1,S6,D2 -TATT .DA FBULB,CAMERA,TO,#FBULB,#ON,#CAMERA -TBRE .DA #71,#$80,0,#BAR,#GUN,#HANDS,#HOSE,TEETH,#OBJIS,#BULB1,#$80,#OBJIS,#BULB2,#AMSG,#147,#SKIP,#$80,#JSR+$40,.1,#AMSG,#94,#SKIP,#$80,#NULL,#AZBIT,#VOBJ,#$FF,$FFBF,#0,#VOBJ,#ADJEC,#BROKEN,0,#$40 -.1 LDA SINSTR - STA $10 - JSR PNTOBJ - LDY #0 SIZE - LDA (MISC),Y - PHA - LDA CUROBJ - JSR PNTOBJ - LDY #0 SIZE - PLA - LSR DIV BY 2 - CMP (MISC),Y - TYA Z=1 - BCS .2 INSTRSIZE/2>=OBJSIZE - DEY -.2 RTS -TBRU .DA #TEETH,CAV,TBRUSH,#ZERO,CAVFORM,#0,#ZERO,CAVFORM+1,#AMSG,#19,#ELSE,#POKE,CAVFORM+1,/18*60,#UPSCR,#2,#AMSG,20 -TBUR .DA #$40,0,TC,#VOBJ,#ADJEC,#BURNT,0,#$20 WAS MATCHES -TCHEC .DA #BOOK1,#BOOK2,#BOOK3,BOOK4,#OUT,CHEOUT -TCHEOUT .DA #BOOK1,#BOOK2,#BOOK3,BOOK4,#BITSET,VOBJ,$40,#AMSG,#79,#SKIP,#$80,#LOCIS+$40,#LIBR1,#AMSG,#95,#SKIP,#$80,#PEEK,BCNT,#2,#AMSG,#80,#SKIP,#ELSE,#AINC,BCNT,#$80,#OBJIS,#BOOK2,#AMSG,81,#0,$40 -TCHEW .DA #$10,0,#PRIMED,#AMSG,#6,#$80,#NULL,#AMSG,22 -TCLE .DA #CLOTH,#HANDS,ME,#71,#SOAP1,#SOAP2,#WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#VOBJ,#ADJEC,#CLEAN -TCLI .DA #IN,ON,#SLOTIS,#VDEST,#SHELF,#UPSCR,3,#VACT,#IN,#VDEST -TCLOS .DA #4,0,OC,$DFFF,#$FF -TCLOT .DA CLOTH,#OBJIS,#ME,#DO,#ME,#WEA,#VINSTR,0,0,#ELSE,#AMSG,76 -TCOM .DA COMB,#OBJIS,#VACT,#AMSG,#36,#ELSE,#AMSG,76 -TCUT .DA ID,TC,#VOBJ,#ADJEC,#BROKEN,0,#$40 LEFTOVER -TD .DA HD -TDAM .DA ME,#NULL,#AMSG,#250,#AINC,.2,#$80,#PEEK,.2,#3,#AINC,GAMOVR,#AJSR,.5,#0 -.2 .BS 1 # OF CUSSES (NOT SAVED) -* SCARE FOUL-MOUTHED PLAYER -.5 LDY #0 - STY .2 - STY BUF - STY MISC - STY CMND SEEK - STY SECT - LDA #2 - STA BUF+1 -.7 LDA .10,Y - STA TRACK - JSR RWTS - INC MISC - LDY MISC - CPY #6 - BCC .7 - RTS -.10 .DA #0,#15,#30,#10,#11,#12 -TDEB .DA HDEB -TDEV .DA FILM,#NULL,#AMSG,23 -TDIE .DA #NULL,#AMSG,24 -TDRIB .DA BALL -TDRI .DA #$20,0,#BITSET,#VOBJ,#$10,0,#GOTO,TEA2 -TDR2 .DA #$80,#PRIMED,#AMSG,#6,#POKE,POISON,#7,#$80,#OBJIS+$40,#RUM,#GOTO,.2,#$80,ACTME,#ZERO+$40,AD,#AMSG,#2,#GOTO,SLP,#ELSE,#AMSG,#137,#POKE,FLACT,#VACT,#POKE,FL,#14,#AREP,#VACT,#ADJEC,#DRUNK,#AZBIT,#VACT,$FFFF,#$FE -.2 .DA #0,HSWA -TDRO .DA #NULL,#AREP,#VOBJ,#IN,#VLOC,#$80,#ZERO+$40,SDEST,#DO,#VACT,#PUT,#VOBJ,#VPM,#VDEST,0,#$80,#OBJIS,#BALL,#ASBIT,#BALL,0,1 -TDRY .DA #WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#90,TOWEL,#ISEDG+$40,#VOBJ,#ADJEC,#WET,#AMSG,25,#VOBJ,#ADJEC,#WET -TDUM .DA #MGET+1,#BITSET,#VOBJ,4,0,#BITSET+$40,VOBJ,$20,#AMSG,#1,#SKIP,#$80,#ISEDG+$40,#VOBJ,#HOLDS,#VX,#AMSG,#92,#SKIP -.1 .DA #$80,#BITSET,#VX,$20,#0,#POKE,$10,#VX,#AMSG,#105,#DELIT,#VX,#ELSE,#AREP,#VX,#IN,#VLOC,#$80,#ISEDG,#VX,#IN,#VOBJ,#SKIP,#ELSE,#UNBIND,#$80,#ISEDG,#VOBJ,#HOLDS,#VX,#GOTO,.1,#0 -TDUN .DA BALL,#14,#HOOP1,HOOP2,IN,#LOCIS,#GYM1,#$80,#LOCIS,#GYM2,#AMSG,#27,#ELSE,#AMSG,26 -TE .DA HE -* PRIMED=POISON -TEAT .DA #$10,0,#NULL,#NOTH -TEA2 .DA #$80,#PRIMED,#AMSG,#6,#POKE,POISON,#7,#$80,#OBJIS,#POWDER,#GOTO,.1,#$80,#OBJIS+$40,#FOOD2,#GOTO,.2,#$80,#PEEK,INP,#SALT,#AMSG,#144,#SKIP,#$80,#PEEK,INP,#SUGAR,#AMSG,#145,#ELSE -.1 .DA #POKE,TIRED,#7,#POKE,TIRED+1,#0,#AINC,AD -.2 .DA #0,HEAT -TELL .DA #NULL,#POKE,ELOP,$EA -TEND .DA GAME,#NULL,#AINC,GAMOVR,#0 -TERA .DA ARR,#NULL,#DELIT,ARR -TEXA .DA #BITSET,VOBJ,$800,#DO,#VOBJ,IV,0,0,#$80,#OBJIS,#FBULB,#AJSR,.1,#$80,#OBJIS,PAN1,#BITSET,#PAN1,0,#$80,#AMSG,#28,#$80,#OBJIS,TC,#BITSET,TC,$20,#AMSG,218,HEXA -.1 LDA #FBULB - JSR PNTOBJ - LDY #4 - LDA (MISC),Y - AND #7 - STA $50 - LDA #0 - STA $51 - RTS MSG PRINTED BY HEXA -TEXI .DA HEXI -TEXT .DA #WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#BITSET,#VOBJ,0,#$20,#AMSG,#19,#ELSE,#AMSG,33 -* JSR GTIME 2* AS OFTEN -TFAS .DA .1 -.1 ASL TR TR=TR*2 - BNE .2 - ROR TR DON'T SHIFT 1 BIT OUT & GET 0 -.2 RTS -TFIL .DA #0,8,#WATER,#WATER+1,#WATER+2,#WATER+3,WATER+4,#VINSTR,#IN,#VOBJ -* CAN'T USE BIT REP SINCE ME MUST THEN PICK LIQUID UP -TFIN .DA #INME,#VOBJ,#AMSG,#124,#SKIP,#$80,#INROOM,#VOBJ,#AMSG,#125,#ELSE,#AMSG,126 -TFLU .DA #TOILET1,TOILET2,#NULL,#AMSG,#110 -.1 .DA #UNBIND,#$80,#ISEDG,#VOBJ,#HOLDS,#VX,#DELIT,#VX,#GOTO,.1,#0,#$FF,$FFBF -TFOL .DA #ACTME,#AMSG,#185,#SKIP,#$80,#OBJIS+$40,#ME,#$80,#SLOTIS,#VACT,#LIB,#$80,#SLOTIS,#VACT,#MARK,#POKE,$10,#VACT,#AMSG,#154,#SKIP - .DA #$80,#ZERO+$40,SCRIM,#GOTO,.5,#$80,#SLOTIS,#VACT,#PROF,#$80,#SLOTIS,#VACT,#PRIS1,#AMSG,#188,#ELSE -.5 .DA #POKE,SFL,#2,#SPAWN,#VACT,#PFOL,VOBJ -MGET .EQ 22 -TGET .DA #MGET,#OFF,REM,#OBJWASIN,#VACT,#AMSG,#124,#$80,#ACTME+$40,#ADEL,#VACT,#OWNS,#VOBJ,#AMAK,#VACT,#OWNS,#VOBJ,#$80,#ISEDG,#VACT,#ON,#VOBJ,#AMSG,#35,#AREP,#VOBJ,#IN,#VLOC,SKIP,$FFFF,#$FE ASSUMES OBJ YOU'RE SITTING IN WAS IN ROOM -* SIMULATES REJECTION FOR CARRYING OBJ -* SEPARATE HANDLING BECAUSE YOU CAN GET AN OBJ IN AN OBJ IN ME -TGIV .DA #MGET,TO,#VACT,#OWNS,#VOBJ,#VOBJ,#IN,#VDEST -TGO .DA #71,IN,HGO,#VACT,#IN,#VDEST -THEA .DA #OBJIS,#TAPE1,#$80,#OBJIS,#TAPE2,#GOTO,.1,#0,.2 -.1 .DA #$80,#OBJIN+$40,#RECOR,#AMSG,#63,#SKIP,#$80,#BITSET+$40,#VOBJ,#0,$40,#AMSG,#37,#SKIP,#ELSE,#AZBIT,#VOBJ,#$FF,$FFBF,#$80,#OBJIS,#TAPE1,#AMSG,#38,#$80,#OBJIS,#TAPE2,#UPSCR,#7,#AMSG,39,TRTS -.3 .US /I'LL TELL YOU IF IT SAYS ANYTHING.@=/ -.2 LDY /.3 - LDA #.3 -PSNOK JSR PS - JMP NOK -THEL .DA ME,#POWDER,TAPE2,.1 -.1 LDA SCORE - BNE .3 - LDA #.2 - LDY /.2 - BNE PSNOK -.2 .US /TALK TO %MARK. HE WANTS TO HELP YOU.@=/ -.3 LDA HOUR - CMP #9+12 - BNE .5 - LDA #.4 - LDY /.4 - JSR PS -.5 LDA DAY - CMP #21 - BEQ .6 - LDA KSC+4 PUSHED PANEL? - BNE .6 YES - LDA #.7 - LDY /.7 - JSR PS -.6 JSR INLINE - .DA TRTS,#SLOTIS,#VINSTR,#POWDER,#AMSG,#173,#$80,#SLOTIS,#VINSTR,#TAPE2,#AMSG,#63,#$80,#LOCIS,#SHELF,#AMSG,#174,#$80,#LOCIS,#CRAWL1,#AMSG,#175,#$80,#LOCIS,#BATH1,#$80,#LOCIS,#BATH2,#AMSG,#181,#SKIP - .DA #$80,#INME,BOARD,#ISEDG,#MAG,#PARTOF,#BOARD,#AMSG,#219,#$80,#LOCIS,STAIR4,#ISEDG+$40,#MAG,#ON,#TC,#AMSG,#217,#$80,#LOCIS,#OPER,#AMSG,#182,#$80,#LOCIS,#RECR,#AMSG,#210,#$80,#LOCIS,MACH,#ZERO+$40,SCREAM,#AMSG,#176 - .DA #$80,#LOCIS,OFFI,#ZERO+$40,KSC+6,#AMSG,#177,#$80,#LOCIS+$40,#CELL,#AMSG,#180,#SKIP,#$80,#INROOM,#GUN,#AMSG,#178,#ELSE,#AMSG,179 -.4 .US /YOU'D BETTER GET TO BED.@=/ -.7 .US /YOU'D BEST START LOOKING HIGH AND LOW FOR A WAY OUT.@=/ -THIT .DA #BAR,#GUN,#HOSE,HANDS,#BITSET,#VOBJ,0,#$10,#DO,#VACT,#KIL,#VOBJ,0,VINSTR,#ELSE,#DO,#VACT,#BRE,#VOBJ,0,VINSTR,#0 -TI .DA HI -TJUM .DA #LOCIS,#STAIR1,#$80,#LOCIS,#STAIR2,#$80,#LOCIS,#STAIR4,#AMSG,#43,#AINC,GAMOVR,#ELSE,#AMSG,120 -TKIL .DA #BAR,#GUN,#HOSE,#HANDS -.1 .DA #0,#SLOTIS,#VINSTR,#GUN,#DO,#VACT,#SHOO,#VOBJ,0,VINSTR,#GOTO,.1,#$80,#OBJIS,#PRIS1,#$80,#OBJIS,#PRIS2,#$80,#OBJIS,#PRIS3,#$80,#OBJIS,#PROF,#DESTR,#VOBJ,#AMSG,#46,#SKIP - .DA #$80,#JSR,IMP,#AMSG,#204,#SKIP,#$80,#LOCIS+$40,#OFFI,#AMSG,#44,#GOTO,NABBED,#ELSE,#AMSG,#162 -SLP .DA #POKE,TIRED,#0,#POKE,TIRED+1,#0,#SPAWN,#ME,PDRM,#DO,#ME,SLE,0,0,#POKE,TREP,1 CLOCK CAN'T REACH 10 BEFORE DO IS EXECUTED - .DA HSWA SO TEA2 CAN GOTO SLP -NABBED .DA #$80,#ZERO+$40,SINSTR,#0,#SLOTIS+$40,#VINSTR,#HANDS,#AREP,#VINSTR,#IN,#GUARD,#$80,#LOCIS+$40,#OFFI,#MOVETO,#OFFI,#AREP,#MARK,#IN,OFFI -TLIG .DA #8,0,#BITSET,VOBJ,$20,#AMSG,#47,#SKIP,#$80,#ITIN+$40,#BATT1,FLASH,#ITIN+$40,#BATT2,#FLASH,#AMSG,#100,#SKIP,#$80,#ISEDG,#FLASH,#HOLDS,VX,#BITSET+$40,VX,$40,#AMSG,#101,SKIP,#VOBJ,#ADJEC,#LIT,#0,$40 -TLOA .DA GAME,HLOA -TLOC .DA #BOTT,#BOX,#CAMERA,#FAUC1,#FAUC2,#FAUC3,#FLASH,#TOILET1,TOILET2,#4,0,#KEY1,#KEY2,KEY3,#BITSET,#VOBJ,#0,$20,#AJSR,.1,#AZBIT,#VOBJ,$DFFF,#$FF,#$80,#ISEDG+$40,#VINSTR,#UNLOCKS,#VOBJ,#AMSG,#48,SKIP,$EFFF,#$FF -.1 LDA #12 (CLOSED) - JMP PADJ -TLOO .DA #IN,#ON,#UNDER,THRU,.1 -.1 JSR NOK -.12 LDA LIGHT - BNE .15 - JMP PLOC IT'S DARK! -.15 LDA WTFIN CAN'T DO THIS IN SPCACT SINCE PRLOC USES VDAT - CMP #VI - BNE .2 - JMP PRLOC -.2 LDX SPM - BNE .21 - LDA #61 HUH? (LOOK N) - JMP PMSG -.21 LDA SDEST - CMP LOC ONLY I LOOK - BEQ .25 CAN SEE IN LOC EVEN IF CLOSED (IE CLOSET) - CPX #IN - BNE .23 - PHA - JSR PNTOBJ - LDY #3 - LDA (MISC),Y - AND #4 OPENABLE? - BEQ .24 NO - INY - LDA (MISC),Y - BMI .24 TRANSPARENT - AND #$20 - BNE .24 OPEN - PLA - JMP IC -.24 PLA -.23 PHA - JSR FINDO - PLA - BCC .25 CAN REACH IT - RTS -.25 LDX SPM - CPX #THRU - BEQ .8 - PHA - JSR CLCPNT INVERT PREP - TAX - PLA - JSR GETOBJ - DEX - BPL .4 -.3 LDX SPM - CPX #IN - BNE .37 - LDA SDEST - CMP #TOILET1 - BEQ .34 - CMP #TOILET2 - BNE .37 -.34 JSR PNTOBJ - LDY #4 - LDA (MISC),Y - AND #$40 - BEQ .37 - LDA #111 IT'S BEEN USED. - .HS 2C BIT -.37 LDA #92 THERE'S NOTHING THERE - JMP PMSG -.4 LDA #0 - STA TEMP+2 - STX TEMP+1 PROBJ USES TEMP -.5 PLA - STA $10 - LDY SPM - CPY #IN - BNE .55 ONLY IN CAN'T DISPLAY INVISIBLE OBJS - JSR PNTOBJ - LDY #5 - LDA (MISC),Y - BMI .7 INVISIBLE -.55 CLC - LDA TEMP+2 0 OR 1 - BNE .6 - INC TEMP+2 -.6 ADC #29 YOU SEE A,AND A - JSR PADJ -.7 DEC TEMP+1 - BPL .5 - LDA TEMP+2 - BEQ .3 ALL INVISIBLE - JMP PR .<CR> -*8 CMP #WINDOW -* BNE .9 -.8 LDA #93 YOU CAN'T LOOK THRU THAT! (NOTHING IN INMATE) - JMP PMSG -TLOW .DA #NULL,#ADEC,LWC,#0 -TMOV .DA #MPUS,#ZERO+$40,SDEST,#0,#ZERO,OBJLIST+1,#DO,#VACT,#PUT,#VOBJ,#SPM,#SDEST,0,#$80,#ITIN,#VOBJ,#VX,#AREP,#VOBJ,#IN,#GYM1,#AREP,#VOBJ,#IN,#VX,#$80 - .DA #OBJIS,PAN1,#ZERO,SC,#UPSCR,#4,#AMSG,#49,#MAKVIS,#PAN1,#CHMAP,#SHELF,#UP,#CRAWL1,#AREP,#PAN1,#IN,#CRAWL1,#$80,#OBJIS,#BAR,#AINC,BARREM,#UPSCR,5 -TN .DA HN -TNOD .DA HNOD -TNOE .DA #NULL,#POKE,ELOP,$88 DEY -TOPE .DA #4,0,#KEY1,#KEY2,KEY3,#ZERO+$40,SINSTR,#0,#ISEDG,#VINSTR,#UNLOCKS,#VOBJ,#ASBIT,#VOBJ,#0,$10,#$80,#BITSET+$40,#VOBJ,#0,$10,#AMSG,#50,#SKIP - .DA #$80,#OBJIS,DOOR1,#ZERO,BARREM,#AMSG,#91,#SKIP,#$80,#OBJIS,#DOOR1,#UPSCR,#5,#$80,#OBJIS,#FLASH,#DO,#VACT,#UNLI,FLASH,0,#0 - .DA #$80,#OBJIS+$40,#TC,#GOTO,.0,#$80,#ISEDG,#MAG,#ON,#TC,#UPSCR,#18,#ELSE,#AMSG,#216,#POKE,MT,#3 -.0 .DA #0,.1,$2000,#0 -* OBJS WHICH CONNECT LOCS WHEN OPEN -.1 LDA #$FF OPEN - .HS 2C BIT -OC LDA #0 CLOSE - STA .7 -* CHECK TIME DOORS LEFT OPEN - LDY #3 - LDA CUROBJ -.12 DEY - BMI .18 -.15 CMP .8,Y - BNE .12 - TYA - ASL 2 BYTES/TIMER - TAY - LDA .7 - BEQ .16 CLOSE - LDA #30 -.16 STA DT,Y -.18 LDY #6 #"DOORS"-1 - LDA CUROBJ -.2 CMP .5,Y - BEQ .3 - DEY - BPL .2 - RTS -.3 TYA - ASL - ASL - TAY - LDA .6+3,Y - PHA - AND .7 0 IF CLOSING - TAX - LDA .6+2,Y DIR FOR NEXT CHM - PHA - LDA .6,Y - PHA - LDA .6+1,Y - TAY - PLA - PHA - JSR CHM - PLA - AND .7 - TAX - PLA - TAY - PLA - JMP CHM -.7 .BS 1 0=CLOSE,FF=OPEN -.8 .DA #DOOR3,#DOOR5,#DOOR6 -.5 .DA #CLOSET,#DOOR1,#DOOR2,#DOOR3,#DOOR5,#DOOR6,#DOOR7 DOOR4 CAN ONLY BE BROKEN -.6 .DA #CLOSET,#EAST,#WEST,#RECR,#STAIR1,#UP,#DOWN,#STAIR3,#HALL2,#WEST,#EAST,#HALL4,#HALL2,#SOUTH,#NORTH,#STAIR4,#CAFE,#NORTH,#SOUTH,#KITCH,#STAIR3,#NORTH,#SOUTH,#FR,#CELL,#SOUTH,#NORTH,#HALL12 -TPHO .DA CAMERA,#ISEDG+$40,#FBULB,#ON,#CAMERA,#$80,#BITSET,#FBULB,0,#$40,#AMSG,#89,#SKIP,#$80,#CZ,#FBULB,#AMSG,#90,#SKIP,#$80 - .DA #ZERO,LIGHT,#ASBIT,#FBULB,#8,$40,#AJSR,DISPLAY,#AZBIT,#FBULB,#$F7,$FFBF,#$80,#NULL,#DECC,#FBULB,#$80,#BITSET,#VOBJ,0,#$10,#AMSG,#128,#POKE,FLACT,#VOBJ,#POKE,FL,#5,#$80,#OBJIS,#MARK,#UPSCR,6 -TPIC .DA #UV,GET -TPLA .DA #TAPE1,#TAPE2,#BALL,PONG,#RECOR,#ED,MRS,RECOR,IN,#OBJIS,#TAPE1,#$80,#OBJIS,#TAPE2,#AJSR,NOK,#DO,#VACT,#HEA,#VOBJ,0,0 - .DA #$80,#OBJIS,BALL,#LOCIS+$40,GYM1,#LOCIS+$40,#GYM2,#AJSR,CVH,#$80,#OBJIS,#BALL,#AMSG,#51,#$80,#OBJIS,PONG,#ZERO+$40,SINSTR,#AMSG,52 -CVH LDY /.1 - LDA #.1 - JMP PSNOK -.1 .US /YOU CAN'T +/ - .DA PRVERB - .US / HERE!@=/ -TPOK .DA HANDS,#OBJIS+$40,#ME,#AJSR,.1,#0 -.1 LDY /.2 - LDA #.2 - JMP PS -.2 .DA #">,#" ,#"+,PRVERB - .US /S YOU BACK.@=/ -TPOU .DA $20,#0,#IN,ON,#ZERO,SDEST,#AMSG,#105,#DELIT,#VOBJ,#SKIP,#ELSE,#AREP,#VOBJ,#VPM,VDEST -TPRY .DA MAG,#COMB,#KEY1,SCREW,#OFF,#PRY,#OUT,PRY,#VOBJ,PARTOF,$FFFF,#$7F -MPUS .EQ 25 -TPUS .DA #MPUS,#OBJIS,#PAN1,#$80,#OBJIS,#RUG,#DO,#VACT,#MOV,#VOBJ,0,0,#$80,#OBJIS,#DBUT,#ASBIT,DOOR1,$10,#AMSG,#53,#$80,#OBJIS,#WBUT,#AJSR,.5,#$80,#BITSET,VOBJ,$40,#AMSG,76 -.5 LDA WB - EOR #$FF - STA WB - RTS -TPUT .DA #MPUS,#DV,#DRO,#OUT,UNLI,#SLOTIS+$40,#VDEST,VENT1,#SLOTIS+$40,#VDEST,#VENT2,#NOTH,#ELSE,#DO,#VACT,#PV,#VOBJ,#VPM,VDEST,0,#VOBJ,#VPM,#VDEST -TPV .DA #SLOTIS+$40,#VPM,#IN,#SKIP,#$80,#ISEDG,#VDEST,#PART,VX,#JSR+$40,.1,#AMSG,#104,#AREP,#VOBJ,#IN,#ME,#SKIP,#$80,#SLOTIS,#VDEST,#VENT2,#GOTO,.0 - .DA #$80,#OBJIS,#TOWEL,#$80,#ITIN,#TOWEL,#VENT2,#AREP,#VOBJ,#IN,#VENT2,#AMSG,#214,#UPSCR,#19,#ELSE,#AMSG,#103,#DELIT,#VOBJ,#AINC,GT -.0 .DA #0 -.1 LDA CUROBJ - JSR PNTOBJ - LDY #0 SIZE - LDA (MISC),Y - TAY - DEY -TPRTS RTS Z=1 IF SIZE=1 -TREA .DA #2,0,#JSR,.30,#SKIP,#$80,#OBJIS,#CLOCK,#AJSR,.1,#SKIP,#$80,#OBJIS,#WATCH,#AJSR,.0,#ELSE,#AJSR,.50,#$80,#OBJIS,ID,#INROOM,#PRIS1,#UPSCR,#10,#AMSG,#85,#ADEL,#PRIS1,#ADJEC,#OLD,#ASWI,#PRIS1,PROF -.30 JSR NOK - LDA LIGHT - BNE .40 - JSR PLOC IT'S DARK - LDA #0 SUCCEED (TO FAIL) -.40 RTS -.50 LDY #$FF -.55 INY - LDA .80,Y OBJ - BEQ TPRTS NO MSG FOR OBJ - CMP CUROBJ - BNE .55 - LDA .90,Y MSG# - BNE PMNOK ALWAYS -.80 .DA #BOOK1,#BOOK2,#BOOK3,#BOOK4,#DB,#FILE1,#FILE2,#FILE3,#FILE4,#GRAF,ID -.90 .DA #57,#58,#59,#60,#87,#164,#165,#166,#167,#252,#84 -.0 LDA WB - BNE PDAT -.1 LDA #27 - JSR PADJ THE - LDA CUROBJ - JSR POBJ - LDA #0 - STA $51 - LDA HOUR - BNE .2 - LDA #12 0=AFTER MIDNIGHT -.2 CMP #13 - BCC .3 - SBC #12 -.3 STA $50 - LDA #0 SAYS IT IS /: - JSR POBJ NO CAPS - LDA MINUTE - STA $50 - CMP #10 - BCS WP35 - LDA #"0 - JSR COUT - INC $24 -WP35 LDA #54 -PMNOK JSR PMSG - JMP NOK -PDAT LDA #0 - STA $51 - LDA MONTH - STA $50 - LDA #28 THE WATCH SAYS / - JSR PADJ - LDA DAY - STA $50 - BNE WP35 ALWAYS -TREC .DA #TAPE1,TAPE2,ON,#NULL,#AMSG,62 -TREM .DA #MGET,#ISEDG+$40,#VOBJ,#ON,VACT,#ITIN,#VOBJ,VX,#ITIN,#VX,#VY,#AREP,#VOBJ,#IN,#VY,SKIP,#VOBJ,#IN,#VACT -* NOTE REMOVE PUTS OBJS IN ROOM IN ME - THAT'S NOT A BUG, IT'S A FEATURE! -TRET .DA #BOOK1,#BOOK2,#BOOK3,BOOK4,#LOCIS+$40,#LIBR1,#AMSG,#95,#SKIP,#ELSE,#AMSG,#98,#$80,#BITSET,#VOBJ,#0,$40,#ADEC,BCNT,#$80,#OBJIS,#BOOK2,#DELIT,#BOOK2,#ELSE,#AREP,#VOBJ,#IN,SHELF,#$FF,$FFBF -TREW .DA #TAPE1,TAPE2,RECOR,#ISEDG+$40,#VOBJ,#IN,#RECOR,#AMSG,#63,SKIP,#0,$40 -TRIP .DA #FILE1,#FILE2,#FILE3,FILE4,#UV,RIP,#VOBJ,IN + END OF ARCHIVE