jac@yoko.rutgers.edu (Jonathan A. Chandross) (06/01/91)
Submitted-by: Phil Goetz (goetz@cs.buffalo.EDU) Posting-number: Volume 1, Source:52 Archive-name: util/parser/inmate/part02 Architecture: ANY_2 Version-number: 1.00 =display30 -* -SAVE DISPLAY30,S6,D1 -DISPLAY LDA WTOP - STA WBOT - LDA #0 - STA WTOP - STA LIGHT - JSR FC58 - LDA #$18 - STA WBOT - JSR PNTLOC -.4 LDY #6 DEFAULT LIGHT - LDA (TEMP),Y - AND #7 - BEQ .20 ALWAYS LIGHT - LSR - BEQ .8 ALWAYS DARK - LSR - BEQ .6 INHERITED -* TIME-DEPENDENT - LDA (TEMP),Y - AND #3 - TAY - LDA HOUR - CMP LIGBEG,Y - BCC .8 NOT YET LIGHT - CMP LIGEND,Y - BCS .8 - BCC .20 -* INHERITED LIGHT -.6 LDA LOC - LDX #IN - JSR GETOBJ - LDA LOC - JSR PNTOBJ MUST PNTOBJ BEFORE PNTLOC BECAUSE PNTOBJ USES TEMP,+1 - PLA - JSR PNTALOC - LDY #3 - LDA (MISC),Y - AND #4 OPENABLE? - BEQ .4 NO - INY - LDA (MISC),Y - AND #$20 OPEN? - BNE .4 YES -.8 LDA LOC - LDX #HOLDS - JSR GETOBJ LIT OBJ? - STX TEMP+1 - LDA #ME - LDX #HOLDS - JSR GETOBJ - TXA - CLC - ADC TEMP+1 - TAX -.10 DEX - BMI .15 - PLA - JSR PNTOBJ - LDY #3 - LDA (MISC),Y - AND #8 LIGHT? - BEQ .10 NO - INY - LDA (MISC),Y - AND #$40 PRIMED? - BEQ .10 NO - INC LIGHT LIT OBJ - BNE .10 -.15 LDA LIGHT - BNE .20 LIT OBJ - JSR PLOC A=0:IT'S DARK! - JSR PNTLOC - JMP D60 -.20 INC LIGHT - LDA LOC - PHA - LDX #2 - STX SHIFT CAP 1ST CHAR - JSR PROBJ PRINT LOCATION - JSR FD8E - JSR FD8E - LDY /VIS - LDA #VIS - JSR PS - JSR CHKEY - PLA OBJECT I'M IN - JSR PRCONT - LDA NONE ANY ITEMS? - BNE .25 YES - JSR FC1A MOVE CURSOR UP 1 LINE TO OVERWRITE "ITEMS" - JSR FC1A - LDA #0 - STA $24 - BEQ .30 -.25 LDY #0 - JSR BLANK -.30 JSR PNTLOC - LDY #$FF - STY NONE - INY - STY MISC -D40 LDA (TEMP),Y - BEQ .50 - INC NONE - BNE .45 - JSR FD8E - LDY /OE - LDA #OE - JSR PS - LDY MISC -.45 LDA #$A0 - JSR FDF0 - LDA DA,Y - PHA - LDA DA+6,Y - TAY - PLA - JSR PS -.50 INC MISC - LDY MISC - CPY #6 - BNE D40 - LDA NONE - BMI D60 - LDY $24 - JSR BLANK - JSR FD8E -D60 LDY #39 - LDA #"- -.65 STA ($28),Y - DEY - BPL .65 - LDY $25 - INY SKIP A LINE FOR ---s - STY WTOP - LDA #23 - STA $25 - JSR FC22 - LDY #6 - LDA (TEMP),Y - BPL DPLOC - LDX LOC - CPX LSTLOC - BEQ .67 - PHA - JSR RAND - CMP #$40 - PLA - LDY #6 - BCC DPLOC PRINT LOC EVERY SO OFTEN -.67 RTS ALREADY PRINTED -VIS .US /VISIBLE ITEMS: =/ -OE .US /OBVIOUS EXITS:=/ -DA .DA #.70,#.75,#.80,#.85,#.90,#.95 - .DA /.70,/.75,/.80,/.85,/.90,/.95 -.70 .US /NORTH=/ -.75 .US /WEST=/ -.80 .US /SOUTH=/ -.85 .US /EAST=/ -.90 .US /UP=/ -.95 .US /DOWN=/ -ALOC .BS 1 A LOC -ACLOC .BS 1 ACTOR LOC -LIGHT .BS 1 >0=ROOM LIT -LIGBEG .DA #7 BEGINNING HOUR FOR LIGHT IN TIME-DEP LOCS (0-3) -LIGEND .DA #22 -DPLOC LDX LIGHT - BNE .1 - LDA LOC - CMP .0 ALREADY PRINTED "IT'S DARK" HERE? - BEQ .9 YES - STA .0 - TXA - JMP PLOC IT'S DARK! -.9 RTS COULD USE NEXT RTS, BUT LABEL TROUBLE -.0 .HS FF -.1 ORA #$80 - STA (TEMP),Y NOW PRINTED -PRLOC LDA LOC - JSR PLOC - >PSHW VDAT+1,VSTK,VPNT - LDY #$FF -.1 INY - LDA .10,Y - BEQ .5 - CMP LOC - BNE .1 - TYA - ASL - TAY - LDA .15,Y - STA VDAT+1 - LDA .15+1,Y - STA VDAT+2 - JSR SPCACT -.5 >PLLW VDAT+1,VSTK,VPNT - RTS -.10 .DA #OFFI,#STAIR1,#LIBR2,LOU2 -.15 .DA .20,.25,.30,.35 -.20 .DA #INROOM,#ED,#POKE,$10,#ED,#AMSG,#151,#$80,#INROOM,#MRS,#POKE,$10,#MRS,#AMSG,151 -.25 .DA #ZERO,BARREM,#AMSG,152 -.30 .DA #ITIN,#BOOK4,#SHELF,#AMSG,195 -.35 .DA #ITIN,#PLANT,#LOU2,#AMSG,211 -*-------------------------------- -* POINT TO OBJECT'S MAP -PNTLOC LDA LOC -PNTALOC STA ALOC - LDX #0 - STX TEMP+1 - LDX #3 -.60 ASL A=A*8 - ROL TEMP+1 - DEX - BNE .60 - SEC - SBC ALOC - BCS .70 - DEC TEMP+1 -.70 CLC - ADC #MAP - STA TEMP - LDA TEMP+1 - ADC /MAP - STA TEMP+1 - RTS -*-------------------------------- -PRCONT DEC LSTCOL DON'T PRINT IN LAST COLUMN CAUSE WE'LL PRINT , AFTER - INC C1 ->1:DON'T PRINT IN 1ST COLUMN - LDX #HOLDS - JSR GETOBJ FIND OBJS INSIDE THIS OBJ - STX TEMP+1 - LDA #0 - STA NONE -.1 DEC TEMP+1 - BMI .3 - PLA - TAX - JSR PNTOBJ - LDY #5 - LDA (MISC),Y - BMI .1 "INVISIBLE" OBJECT (IE TEETH) - TXA - JSR PROBJ - INC NONE AT LEAST 1 OBJ - LDA #", - JSR FDF0 - JMP .1 -.3 INC LSTCOL RESTORE TO #$28 - DEC C1 ->0 - LDY $24 - DEY - BPL .4 - JSR FC1A LAST , WAS IN LAST COLUMN, GO BACK 1 LINE TO ERASE - LDY #$27 -.4 JSR FC9E CLEAR TO END OF LINE - JMP FD8E -NONE .BS 1 0=NO OBJS -*-------------------------------- -PROBJ PHA - LDX #ADJEC - JSR GETOBJ 1ST PRINT ADJS - STX TEMP -.1 DEC TEMP - BMI .2 - PLA ADJ - JSR PADJ - LDA #$A0 - JSR FDF0 - JMP .1 -.2 PLA - JMP POBJ -*-------------------------------- -* POINT TO OBJ DATA -* ON ENTRY A=OBJ# -PNTOBJ LDY #0 - STY MISC+1 - STY .2 -* A=A*6 - STA TEMP - ASL - BCC .0 - INC .2 -.0 STA TEMP - ROL MISC+1 - ASL - ROL MISC+1 - ADC TEMP C=0 - BCC .1 - INC MISC+1 - CLC -.1 ADC #OBJECTS - STA MISC - LDA /OBJECTS - ADC MISC+1 - ADC .2 - STA MISC+1 - RTS -.2 .BS 1 -*-------------------------------- -* FIND WORD #Y,A IN LEX -* CALLED BY PRWRD AND CONOUT -FIRL .BS 1 -FWILEX STY WNUM+1 - INY CPY #$FF:UNKNOWN # - BNE .0 - PLA - PLA - LDA #"X - JMP FDF0 OK SINCE ONLY PRWRD AND CONOUT CAL FWILEX -.0 STA WNUM - LDY #$FF -.1 INY - LDA WNUM - CMP NUMTAB,Y - INY - LDA WNUM+1 - SBC NUMTAB,Y SBC SO C COUNTS - BCS .1 - TYA - LSR A=A/2,C=1 - ADC #"A"-2 - STA FIRL 1ST LETTER - LDA WNUM - SEC - SBC NUMTAB-3,Y - PHP - STA WNUM -* WON'T WORK IF WORD IS 256TH WORD OR LATER BEGINNING WI THAT LETTER - LDA TABFL-3,Y - STA MISC - LDA TABFL-2,Y - STA MISC+1 - LDY #0 - LDA (MISC),Y FOR Z=1 - PLP - BEQ .6 - BNE .35 -.3 JSR INY -.35 LDA (MISC),Y - BMI .3 SCAN PAST LETTERS - BEQ .5 0 HAS NO PARM -.4 CMP #SYN3+1 PARTS <= SYN HAVE 1 PARAM - BCS .5 - JSR INY -.5 JSR INY - LDA (MISC),Y - BPL .4 - DEC WNUM - BNE .3 -.6 RTS -*-------------------------------- -* PRINT WORD# Y,A -* WON'T RETURN FOR X WORDS -PRWRD JSR FWILEX - PHA - LDA FIRL - JSR FDF0 - PLA -.6 JSR FDF0 - JSR INY - LDA (MISC),Y - BMI .6 - RTS -*-------------------------------- -* PRINT VERB,WHICH IS 1ST WORD IN BUFFER -PRVERB LDX #0 - STY $24 -.1 LDA INSTRING,X - CMP #$A0 - BEQ .3 - LDY LWC - BEQ .2 - ORA #$E0 =>LOWERCASE -.2 JSR FDF0 - INX - BNE .1 -.3 LDY $24 - RTS =edges -* -SAVEEDGES27,S6,D1 -JG JSR GETEDG MAY PLA PLA RTS - RTS OR RTS -RE0 LDY /CD - LDA #CD -OMSG SEC FAILURE - STY RESHI+1 - STA RESLO+1 - RTS -CD .US /YOU CAN'T DO THAT!@=/ -* REPLACE EDGE A X _ _ WI A X x Y -* ON EXIT, C=0 IF SUCCESS -REPEDG STA EDGCMP+1 - JSR FF4A SAVE REGS - CPY $45 A=Y? - BEQ RE0 - LDX #0 - STX GCALLD - STX TEMP3+1 CAP FILLED - LDA $46 - TAX - LSR - BCC .1 EDGE IN RIGHT DIRECTION - LDA $45 - STY $45 - STA $47 - JSR CLCPNT - STX $46 -.1 CPX #BY - BNE .13 - JMP ABYY -.13 JSR CLCPNT - STA TEMP+1 x - JSR FF3F - JSR JG JSR GETEDG;STRANGE CONDITIONAL RETURN - BCC .15 EDGE FOUND - PHA - PHA - PHA - PHA - JSR MAKEDG ALLOCATE SPACE - JSR EREDG - JMP RE3 DON'T CHECK "OLD EDGE" -.15 LDY #0 - LDA (EDGE),Y - CMP $45 A:OLD EDGE IN SAME DIRECTION AS NEW? - BNE .2 - LDY #3 - LDA (EDGE),Y -.2 STA OLDTAIL USED BY GETTER IN DOOBJ - CMP $47 Y:EDGE ALREADY THERE? - BNE RE3 - JMP RE6 -* SAVE EDGE LOST BY NEXT GETOBJ -RE3 LDY EDGE - STY $1A - LDY EDGE+1 - STY $1B - LDX $46 X - CPX #ON - BNE .4 - LDA $47 Y - JSR PNTOBJ - LDY #2 SUPPORTING CAPACITY - LDA (MISC),Y - BNE .33 - JMP RE75 -.33 LDX #UNDER - JSR CHKROOM - JSR FINDO CAN WE REACH DEST? - JMP .6 -.4 CPX #IN - BNE .8 -* SEE IF A CAN BE PUT IN Y -* CHECK CAPACITY, OBJS IN Y,&Y OPEN/CLOSED - LDA $47 Y - JSR PNTOBJ - LDY #4 - LDA (MISC),Y WATERTIGHT? - STA TEMP3+2 - LDY #1 CAPACITY - LDA (MISC),Y - BNE .5 - JMP RE7 NO CAPACITY -.5 LDX #HOLDS - JSR CHKROOM - JSR FINDD CAN WE REACH INSIDE DEST? -.6 BCC .7 - RTS NO -.7 LDA ONOB - BNE .8 - LDA $45 A - LDX #PARTOF - JSR GETOBJ - DEX - BMI .8 - PLA - JMP PO -.8 LDY #0 - STY TEMP3+1 IN CASE OF ON - LDA $45 A - STA ($1A),Y - INY - LDA $46 X - PHA - STA ($1A),Y - INY - LDA TEMP+1 - STA ($1A),Y - INY - LDA $47 - STA ($1A),Y - JSR CHKEY - PLA X - CMP #ON - BNE CIN -* IF A ON Y, PUT A IN OBJ HOLDING Y -* IF Y NOT HELD, PUT A IN Y & DELETE A ON Y -ABYY DEC DDON - LDA $47 - LDX #IN - STX ALGOK - JSR GETOBJ - LDY $47 - DEX - BMI .1 - PLA - TAY -.1 LDA $45 - LDX #IN - JSR REPEDG - INC DDON ->0 - RTS -CIN CMP #IN - BEQ .0 - JMP RSUC -.0 LDA $45 - CMP #ME - BNE .1 - JSR MACT -* IF MOVING OBJ, MOVE ALL OBJS ON IT -* NOTE POSSIBLE RECURSION -* A ON Y: -* DELETE A ON Y -* IF Y=ME THEN MAKVIS A -* ELSE MAKVIS Y -* UNLESS DDON>0 -* IF MOVING OBJ, MOVE ALL OBJS ON IT -.1 LDA DDON - BNE .3 - LDA $45 - LDX #ON - JSR GETOBJ -.2 DEX - BMI .3 - STX CURWORD - PLA - PHA - CMP #ME - BNE .23 - LDA $45 MAKE OBJ THAT WAS ON ME VISIBLE, NOT ME -.23 STA $10 - JSR PNTOBJ - LDY #5 - LDA (MISC),Y - BPL .25 VISIBLE - AND #$7F - STA (MISC),Y MAKVIS - PLA - PHA - CMP #ME - BEQ .25 NO MSG FOR ITEMS THAT WERE ON ME - LDA #99 - JSR PMNOK -.25 PLA - TAY - LDA $45 - PHA - LDA #ON - PHA - TYA - PHA - JSR DELEDG - LDX CURWORD - BNE .2 -.3 LDA $45 - PHA - LDX #UNDER - JSR GETOBJ - DEC DDON - INC ONOB -.4 DEX - BMI .5 - PLA - TAY - TXA - PHA - TYA - LDX #IN - LDY $47 - JSR REPEDG - PLA - TAX - BNE .4 -.5 INC DDON ->0 IF PRIMARY OBJ - DEC ONOB ->0 IF PRIMARY OBJ -* MOVE OBJS WHICH ARE PART OF THIS OBJ - PLA - LDX #PART - JSR GETOBJ - STX NONE -CI6 DEC NONE - BPL CI7 -RSUC CLC - RTS -CI7 PLA - STA CURWORD - LDX #IN - JSR GETOBJ -* LEAVE OBJ PART IS IN ON STACK - LDA #HOLDS - PHA - LDA CURWORD - PHA - JSR DELEDG - LDA CURWORD - PHA - LDA #IN - PHA - LDA #HOLDS - PHA - LDA $47 Y - PHA - JSR MAKEDG - LDA CURWORD - LDX #PART - JSR GETOBJ DOES PART HAVE PART? - TXA - CLC - ADC NONE - STA NONE PARTS OF PART GO TO SAME PLACE AS PART - JMP CI6 -RE6 LDA ALGOK - BNE RSUC - LDY /.7 - LDA #.7 - JMP OMSG -.7 .US /YOU'VE ALREADY DONE THAT.@=/ -RE7 LDY /YCPI - LDA #YCPI -RE72 LDX $47 - STX $10 FOR PA - JMP OMSG -YCPI .DA #"$,YC - .US /IN <.@=/ -RE75 LDY /.1 - LDA #.1 - JMP RE72 -.1 .DA #"$,YC - .US /ON <.@=/ -YC .US /YOU CAN'T PUT THINGS =/ -* NO ROOM FOR A IN/ON Y -* IF NR FOR A IN Y, AND A ON Z AND Z IN Y, DEL A ON Z. SHAVES STACK TOP. -* WHEN ASKED "PUT A ON B" & THERE'S NO ROOM FOR A,? NO ROOM -* WHEN ASKED "PUT A ON B" & C IS ON A & THERE'S NO ROOM FOR C, ? NOTHING -NR LDA $46 X - CMP #IN - BNE .3 - LDA $45 A - LDX #ON - JSR GETOBJ - DEX - BMI .3 - STX CURWORD -.1 PLA Z - STA NONE - LDX #IN - JSR GETOBJ - PLA - CMP $47 Y - BNE .15 - LDA $45 A - PHA - LDA #ON - PHA - LDA NONE Z - PHA - JSR DELEDG -.15 DEC CURWORD ON ANY MORE OBJS? - BPL .1 YES - LDA $45 A - CMP CUROBJ - BEQ .3 MESSAGE IF A IS CUROBJ -.2 CLC FOR TRYCUR -.25 RTS -.3 LDA TRYCUR - BEQ .4 - LDA CASEFRAME+2 - LSR - BCS .4 FAILURE IF NOT GOTTEN - LDA CUROBJ - JSR PNTOBJ - LDY #0 - LDA (MISC),Y SIZE - CMP #10 ARBITRARY # - BCS .25 MAKE NO NOISE BUT SET CARRY -.4 LDY /.6 - LDA #.6 - LDX $47 Y - CPX #ME - BNE .5 - LDY /.7 - LDA #.7 -.5 JMP OMSG -.6 .US /THERE'S NO ROOM.@=/ -.7 .US /YOU CAN'T CARRY THAT MUCH MORE.@=/ -TRYCUR .BS 1 >0=OK IF NOT GOTTEN IF BIG -PO STA $10 - LDY /.1 - LDA #.1 - JMP OMSG -.1 .US /IT'S PART OF >.@=/ -ALGOK .HS 00 ALREADY GOTTEN OK. -DDON .HS 00 FF=DON'T DELETE A ON B WHEN PUTTING A IN Y -ONOB .HS 00 >0=A MOVED SINCE IT WAS STACKED ON ORIG A,NO PART CHECK -OLDTAIL .BS 1 -CHKROOM STA TEMP3 - LDA #0 - STA .61 - LDA $47 Y - JSR GETOBJ -.1 DEX - BMI .3 - PLA - PHA - JSR PNTOBJ - LDY #3 - LDA (MISC),Y - LDY #0 FOR LATER - AND #$20 LIQUID IN DEST? - BEQ .2 NO - PLA - STA .61 ONLY 1 LIQUID - LDA (MISC),Y SIZE OF LIQ - STA .64 - PHA -.2 PLA - LDA (MISC),Y SIZE - CLC - ADC TEMP3+1 - STA TEMP3+1 SUM OF SIZES OF CONTENTS - JMP .1 -.3 LDA $45 - JSR PNTOBJ - LDY #3 - LDA (MISC),Y - AND #$20 LIQUID? - BEQ .7 NO - LDA $46 X - CMP #IN - BNE .5 CAN ONLY PUT LIQUIDS IN THINGS - LDA TEMP3+2 BESIDES, TEMP3+2 ONLY STORED FOR "IN" - AND #8 WATERTIGHT? - BNE .6 Y - LDX #106 NOT WATERTIGHT - LDA $47 Y - STA $10 -.4 PLA - PLA - TXA - JMP PMNOK -.5 LDA $45 - STA $10 - LDX #IN - JSR DELAX ERASE EDGE - LDX #105 EVAPORATES - BNE .4 -* PUTTING LIQUID IN CONTAINER: -* 1. CAN'T IF OTHER LIQUID IS PRESENT (.61=$20) -* 2. IF NOT ENUF ROOM, CREATE SMALLER LIQUID OBJ & PUT IT IN -* (WE KNOW OBJ HAS >0 CAPAC) -.6 LDX #116 THERE'S ANOTHER LIQUID IN IT - .HS A9 LDA -.61 .BS 1 # OF LIQ IN DEST, ELSE 0 - BEQ .67 NO - SEC - SBC $45 - CLC - ADC #5 - CMP #10 IF <5 APART, COMBINE 2 LIQUIDS - BCS .4 -* COMBINE LIQUID IN DEST & OBJ LIQUID BY DELETING DEST LIQ, -* ADDING ITS SIZE TO OBJ, & SBCing DEST LIQ'S SIZE FROM CONTENTS SIZE - LDA TEMP3+1 - CMP TEMP3 - BEQ .73 NO ROOM: CAP IS FULL - SEC - SBC .64 SIZE OF LIQ IN DEST - STA TEMP3+1 - LDY #0 - CLC - LDA (MISC),Y - .HS 69 ADC -.64 .BS 1 SIZE OF LIQ IN DEST - STA (MISC),Y - LDA .61 - LDX #IN - STY .61 - JSR DELAX - LDA $45 - JSR PNTOBJ WIPED BY DELAX -.67 INC .61 <=1:MARK LIQUID -.7 CLC - LDY #0 - LDA TEMP3+1 MUST RELOAD IN CASE NO OBJS IN DEST - ADC (MISC),Y A=SIZE [(OBJS IN Y)+A]+1 - BCC .71 =<$FF - SBC TEMP3 CAPACITY - JMP .72 -.71 SEC - SBC TEMP3 CAPACITY - BCC CR9 - BEQ CR9 -.72 DEC .61 LIQUID? - BEQ .75 YES -.73 PLA - PLA - JMP NR NO ROOM -.75 STA (MISC),Y SIZE ORIG LIQUID=SIZE0-CAP+[TEMP3+1] -* ORIG LIQ STAYS WHERE IT IS - LDA $45 - STA .90+1 SAVE THIS OBJ# -.8 DEC $45 A:SEARCH FOR NEW, UNUSED OBJ OF SAME TYPE - LDA $45 - STA .61 TEMP STORAGE - JSR PNTOBJ - LDY #3 - LDA (MISC),Y - AND #$20 LIQUID? - BNE .8 YES,CONT -* .61: LAST OBJ BEFORE 1ST LIQUID -* NOTE:ASSUMES NO 2 LIQUID TYPES ARE SEQUENTIAL -.85 INC $45 - LDA $45 - SEC - SBC .61 - CMP #NLIQ+1 #OBJS OF EACH LIQUID TYPE - BCS C95 NO LIQUID OBJS LEFT: ERROR, NO NEW EDGE - LDA $45 - LDX #IN - JSR GETOBJ - PLA - DEX OBJ IN SOMETHING? - BEQ .85 YES - PHA - LDA $45 -.90 CMP #0 SAME AS ORIG. OBJ? - BEQ .85 YES - JSR PNTOBJ - SEC - LDA TEMP3 - SBC TEMP3+1 A<=SIZE OF NEW OBJ - LDY #0 - STA (MISC),Y SIZE - LDX #IN - LDY $47 - PLA - PLA - LDA $45 - JMP REPEDG -CR9 LDA #0 - STA TEMP3+1 - LDA $47 Y -C95 RTS -EREDG LDY #3 - LDA #0 -.8 STA (EDGE),Y DELETE EDGE - DEY - BPL .8 - RTS -* CALC 2ND POINTER IN EDGE FROM 1ST POINTER -* x=X+1 IF X IS ODD -* X-1 IF X IS EVEN -* NOTE THAT 1-WAY EDGES (I.E. BY) MUST HAVE 1 UNUSED ADJACENT NUMBER -* SO REPLACING DOESN'T CREATE A FALSE EDGE -CLCPNT CPX #BY - BCS .2 - TXA - INX - LSR - BCC .0 - DEX - DEX -.0 TXA -.2 RTS -*-------------------------------- -* MAKE AN EDGE BETWEEN OBJECTS -* BEFORE CALLING, PUSH OBJ,POINTER,POINTER,OBJ ON STACK -MAKEDG PLA - TAY - PLA - STA MISC+1 - INY - BNE .0 - INC MISC+1 -.0 STY MISC - LDA FRFLG DO WE KNOW LOC OF AN EMPTY EDGE? - BEQ .3 NO - LDA FREE - STA EDGE - LDA FREE+1 - STA EDGE+1 - INC FRFLG - BEQ .2 ALWAYS -.3 STA EDGOFFSET+1 - STA EDGCMP+1 - JSR FINEDG FIND EMPTY EDGE SLOT - BCC .2 - LDA EDGEND - ADC #3 CARRY SET - STA EDGEND - BCC .2 - INC EDGEND+1 -.2 LDY #3 -.1 PLA - STA (EDGE),Y - DEY - BPL .1 - BMI DELEND RTS -* SAVES EDGES IN ORDER PUSHED -*-------------------------------- -* DELETE AN EDGE -* BEFORE CALLING, PUSH OBJ1,POINTER1->2,AND OBJ2 ON STACK -DELEDG PLA - TAY - PLA - STA MISC+1 - INY - BNE .0 - INC MISC+1 -.0 STY MISC - LDA #3 - STA EDGOFFSET+1 - PLA OBJECT POINTED TO - STA EDGCMP+1 - PLA POINTER - STA TEMP - JSR FINEDG -.1 BCS .3 TRY LOOKING FOR 'BACKWARD' EDGE - LDY #1 POINTER TO OBJECT FOUND - LDA TEMP POINTER PASSED - CMP (EDGE),Y - BEQ .2 -.15 JSR TRYAGN - JMP .1 -.2 LDY #0 OBJECT POINTING - PLA - CMP (EDGE),Y - BEQ DELEXT - PHA - JMP .15 -.3 LDA #0 - STA EDGOFFSET+1 - JSR FINEDG -.4 BCS DELFAL DOESN'T EXIST - LDY #2 POINTER TO OBJECT FOUND - LDA TEMP POINTER PASSED - CMP (EDGE),Y - BEQ .5 -.45 JSR TRYAGN - JMP .4 -.5 LDY #3 OBJECT POINTING - PLA - CMP (EDGE),Y - BEQ DELEXT - PHA - JMP .45 -DELEXT JSR EREDG - LDY #1 -.9 LDA EDGE,Y COPY LOC OF FREE EDGE - STA FREE,Y - DEY - BPL .9 - STY FRFLG - CLC - .HS B0 BCS -DELFAL PLA -DELEND JMP (MISC) RTS -*-------------------------------- -* GET ALL VALUES POINTED TO -* ON CALLING, A=OBJ X=POINTER -* AFTER RETURN, X=# OF OBJECTS ON STACK -GETOBJ STA EDGCMP+1 - PLA - TAY - PLA - STA MISC+1 - STA GCALLD EXIT THRU DELEND - INY - BNE .0 - INC MISC+1 -.0 STY MISC - JSR GETEDG -.1 LDA (EDGE),Y - PHA - INX - DEY TEST WHICH PLACE TO CALL - BMI .2 - JSR G2 - JMP .1 -.2 JSR G4 - JMP .1 -*-------------------------------- -* ON EXIT C=0 IF SUCCESS -GETEDG STX TEMP - CPX #BY - TXA - LDX #0 INIT COUNT - BCS .0 SEARCH BOTH WAYS FOR BY - LSR - BCS G25 ODD POINTERS ARE 2ND POINTER -.0 STX EDGOFFSET+1 0 - JSR FINEDG - BCS G22 -G1 LDY #1 - LDA (EDGE),Y POINTER - CMP TEMP - BEQ G6 -G2 JSR TRYAGN - BCC G1 -G22 LDA #BY - CMP TEMP - BCS G5 -G25 LDA #3 - STA EDGOFFSET+1 - JSR FINEDG - BCS G5 -G3 LDY #2 - LDA (EDGE),Y POINTER - CMP TEMP - BEQ G7 -G4 JSR TRYAGN - BCC G3 -G5 PLA - PLA - LDA GCALLD - BNE DELEND - RTS TO CALLER OF CALLER, C=1 -G6 LDY #3 FOR GETOBJ - .HS 2C BIT -G7 LDY #0 - CLC - RTS -GCALLD .BS 1 0=RTS WHEN NOT FOUND -*-------------------------------- -* LOCATE AN EDGE OR EMPTY EDGE -FINEDG LDA #EDGES - STA EDGE - LDA /EDGES - STA EDGE+1 -EDGOFFSET LDY #0 - LDA (EDGE),Y -EDGCMP CMP #0 - BEQ FINEND -TRYAGN LDA EDGE - CLC - ADC #4 - STA EDGE - LDA EDGE+1 - ADC #0 - STA EDGE+1 - CMP EDGEND+1 - BNE EDGOFFSET - LDA EDGE - CMP EDGEND - BNE EDGOFFSET - SEC FAILURE - .HS 90 BCC -FINEND CLC - RTS -*-------------------------------- -WNUM .BS 2 WORD# -CURWORD .BS 1 -*[MOVE]SPECACTS -MACT LDY $47 - STY LOC - LDA ACTOR - CMP #ME - BNE .1 - STY ACLOC -.1 LDY #$FF -.0 INY - LDA .9,Y - BEQ .6 NO ACT - CMP $47 - BNE .0 - LDA VDAT+1 - PHA - LDA VDAT+2 - PHA - LDX #3 -.2 LDA $45,X - STA .7,X - DEX - BPL .2 - TYA - ASL - TAY - LDA MTAB,Y - STA VDAT+1 - LDA MTAB+1,Y - STA VDAT+2 - JSR SPCACT - PLA - STA VDAT+2 - PLA - STA VDAT+1 - LDY #3 -.5 LDA .7,Y - STA $45,Y - DEY - BPL .5 -.6 RTS -.7 .BS 4 TEMP $45-48 -.9 .DA #STAIR1,#STAIR3,#HALL4,#HALL2,#STAIR4,#CAFE,#KITCH,#FR,#CRAWL2,#CELL,#HALL12,#HALL10,#HALL11,HALL13 -MTAB .DA .15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65,.70,.70,.70 -.15 .DA #NULL,#ADEL,#RUG,#ON,#DOOR1,#AREP,#DOOR1,#IN,#STAIR1,#MAKVIS,DOOR1 -.20 .DA #NULL,#AREP,#DOOR1,#IN,#STAIR3,#AREP,#DOOR6,#IN,#STAIR3,#AREP,#DOOR6,#ADJEC,#NERN,#$80,#BITSET,#DBUT,0,#$80,#ADEL,#RUG,#ON,#DOOR1,#ASBIT,#DOOR1,0,#$80,#AJSR,.21,#0 -.21 LDA #RUG - PHA - LDA #ON - PHA - LDA #UNDER - PHA - LDA #DOOR1 - PHA - JSR MAKEDG - RTS -.25 .DA #NULL,#AREP,#DOOR2,#IN,HALL4 -.30 .DA #NULL,#AREP,#DOOR2,#IN,#HALL2,#AREP,#DOOR3,#IN,HALL2 -.35 .DA #NULL,#AREP,#DOOR3,#IN,STAIR4 -.40 .DA #NULL,#AREP,#DOOR5,#IN,CAFE -.45 .DA #NULL,#AREP,#DOOR5,#IN,KITCH -.50 .DA #NULL,#AREP,#DOOR6,#IN,#FR,#AREP,#DOOR6,#ADJEC,SERN -.55 .DA #ZERO,CVIS,#AINC,CVIS,#AMSG,#121,#MOVETO,MACH WOULD HAVE TO DISPLAY IF CRAWL WEREN'T DARK -.60 .DA #NULL,#AREP,#DOOR7,#IN,#CELL,#AREP,#DOOR7,#ADJEC,SERN -.65 .DA #NULL,#AREP,#DOOR7,#IN,#HALL12,#AREP,#DOOR7,#ADJEC,#NERN,#MAKVIS,#BULB2,#GOTO,.71 -.70 .DA #NULL,#AREP,#DOOR8,#IN,#VLOC,#AREP,#DOOR9,#IN,#VLOC,#ASBIT,BULB2,$8000 -.71 .DA #ADEL,#BULB2,PARTOF,#AREP,#BULB2,#IN,#VLOC,#AREP,#BULB2,#PARTOF,VLOC =gennum -* -SAVEGENNUM3 -* GENERATE NUMTAB -CNT .EQ TEMP -INDEX .EQ TEMP+2 -GNM LDA #11 1ST WORD# - STA NUMTAB - STA CNT - LDA #0 - STA NUMTAB+1 - STA CNT+1 - LDA #2 - STA INDEX - LDA #A - STA MISC - LDA /A - STA MISC+1 - LDY #0 - BEQ .22 -.2 JSR INY -.22 LDA (MISC),Y SEARCH FOR END OF STRING - BMI .3 CHAR OR EOL -.23 BEQ .25 NULL WORD - CMP #SYN3+1 - BCS .25 - JSR INY PARTS <= SYN HAVE 1 PARAM -.25 JSR INY SEARCH FOR NEXT STRING - LDA (MISC),Y - BPL .23 ANOTHER TYPE - INC CNT - BNE .3 - INC CNT+1 -.3 CMP #EOL - BNE .2 -.4 LDA CNT - LDX INDEX - STA NUMTAB,X - STA $50 - INX - LDA CNT+1 - STA NUMTAB,X - STA $51 - INX - STX INDEX - JSR $FF4A - LDA #$A0 - JSR $FDED - JSR PD - JSR $FF3F - CPX #26*2 - BCC .2 -* PRINT NUMS & WORDS -PNW LDA #11 - STA CNT2 - LDA #0 - STA CNT2+1 -.1 JSR $FD8E - LDX CNT2 - LDA CNT2+1 - JSR PDEC - LDA #$A0 - JSR $FDED - LDA #$A0 - JSR $FDED - LDY CNT2+1 - LDA CNT2 - JSR PRWRD - INC CNT2 - BNE .2 - INC CNT2+1 -.2 LDA CNT2 - CMP CNT - LDA CNT2+1 - SBC CNT+1 - BCC .1 - RTS -CNT2 .BS 2 -PD LDA $51 - LDX $50 -PDEC LDY $C081 - JMP $ED24 =handler -* -SAVEHANDLER41,S6,D1 -HANDLER JSR CHKEY - BIT DBGFLG - BPL H10 - JSR FD8E - LDY /AC - LDA #AC - JSR PS - LDA ACTOR - JSR PROBJ - JSR FD8E - LDA WTFIN - CMP #VT - BNE .3 NO OBJS - LDY /OL - LDA #OL - JSR PS - LDX OBJLIST - BEQ .2 NO OBJS - DEC LSTCOL DON'T PRINT IN LAST COLUMN - LDY #0 -.0 TXA - STY TNPNT - JSR PROBJ - LDY TNPNT - INY - LDX OBJLIST,Y - BEQ .1 - LDA #", - JSR FDF0 - CPY #20 - BNE .0 -.1 INC LSTCOL -.2 JSR FD8E -.3 LDY #1 -.4 LDA SDEST,Y - BEQ .5 - PHA - STY TNPNT - LDA SLO,Y - PHA - LDA SHI,Y - TAY - PLA - JSR PS - PLA - JSR PROBJ - JSR FD8E - LDY TNPNT -.5 DEY - BPL .4 -H10 LDA ACTOR - STA $10 IN CASE > REFUSES - CMP #PROF PROF OR PRISONER WILL ALWAYS DO WHAT YOU SAY - BCC .7 NO - CMP #PRIS3+1 - BCC .8 YES -.7 EOR #ME I'LL DO WHATEVER I SAY - BEQ .9 - LDA CASEFRAME+2 - AND #8 WILL CHAR DO IT? - BNE .8 YES - LDA DQ - BEQ .9 CHAR DOES IT OF HIS OWN VOLITION - LDA #251 - JMP PMSG BUZZ OFF -.8 LDA #0 -.9 STA CNTOBJ - STA AFTMSG - JSR SKPOBJ - LDA WTFIN VERB - CMP #VT - BEQ .15 - JSR DOOBJ HAVE SAME STACK POINTER AS VT - JMP DOIT -.15 LDY #2 -.11 LDA VDAT,Y - STA VTEMP-1,Y - DEY - BNE .11 NOT VDAT -*FOR VT,LOOP ONCE FOR EACH OBJ - LDY #0 -.12 LDA OBJLIST,Y - BEQ .20 - STA CUROBJ - STA $10 FOR ANY PRINTING - STY TEMPIND - LDY TWOOBJ - BEQ .13 - JSR OBJCOL -.13 JSR DOOBJ - LDY TEMPIND - INY - BNE .12 -.20 DEY - BNE .25 >1 OBJ,A=0 - LDA OBJLIST -.25 STA LSTOBJ -* _ DO _ _ _ _ _ _ -* ACTUALLY, NO MULTIPLE-OBJECT COMMAND WILL EVER BE "DO"ed -* BUT WHAT THE HECK -DOIT LDA DOPNT EXEC ANOTHER COMMAND? - BNE .31 - RTS -.31 LDX #7 -.35 LDA .38-1,X - STA .37+1 - LDA .39-1,X - STA .37+2 - >PLA DOSTK,DOPNT WIPES Y -.37 STA $FFF - DEX - BNE .35 - STX TWOOBJ 1 OBJ - STX OBJLIST+1 1 OBJ - TXA -.40 INX - STA NOUNLIST,X 0 - CPX #20 - BNE .40 - JSR GAL GET ACLOC - JSR TV - JSR NOK - LDA #VT 3 - STA WTFIN - LDA OBJLIST - BEQ .42 VI,VP - STA NOUNLIST - JSR CHECKOBJ - LDA NOUNLIST - BEQ DOIT NOUN ELIMINATED -.41 LDA ACTOR - CMP #ME - BEQ .44 - LDA ACLOC - CMP LOC - BNE .44 - JSR PRDO PRINT WHAT CHARS IN ROOM DO (CHARS) -.44 JMP HANDLER -.42 DEC WTFIN 2=VI - LDA SPLACE - BEQ .41 - DEC WTFIN 1=VP - BNE .41 -.38 .DA #ACTOR,#WVERB,#OBJLIST,#SPM,#SDEST,#SINSTR,#SPLACE -.39 .DA /ACTOR,/WVERB,/OBJLIST,/SPM,/SDEST,/SINSTR,/SPLACE -CUROBJ .BS 1 CURRENT OBJ -SIZE .BS 1 -LSTOBJ .BS 1 USED BY PRONOUN "IT" -VTEMP .BS 2 VDAT TEMP -OKS .US /O%K.@=/ -INSOM .BS 1 INCed BY FINDO IF OBJ IS IN SOMETHING -DOOBJ JSR CHKEY - LDA DOPNT - BNE .0 - LDY /OKS - STY RESHI+1 - LDY #OKS - STY RESLO+1 -.0 LDA WTFIN - CMP #VT - BEQ H1 - JMP G85 ONLY VT GETS OBJ -H1 LDA #0 - STA TEMP3+1 FOR FINDO - STA INSOM FOR FINDO - STA .77 - LDA CASEFRAME - BMI .0 OBJ MAY BE ABSENT - LDA CUROBJ - CMP ACLOC - BEQ .0 CAN ALWAYS REACH LOC - JSR FINDO SEE IF YOU CAN REACH OBJ - BCS .1 NO -* HERE WE EXIT IF OBJ DOESN'T EXIST. -* THIS IS USUALLY THE BUSINESS OF CHECKOBJ, -* BUT A LIQUID OBJ MAY BE DELETED AFTER CHECKOBJ. - LDA INSOM OBJ EXISTS? - BEQ .1 NO -.0 LDA CASEFRAME+3 GET OBJ? - BMI .3 YES -.2 JMP G81 -.1 JMP .10 -.3 LDA CUROBJ - JSR PNTOBJ - LDY #0 - LDA (MISC),Y - STA SIZE - LDY #3 - LDA (MISC),Y - AND #$20 LIQUID? - BEQ .5 NO - LDA CUROBJ - LDX #IN - JSR GETOBJ - PLA - STA OLDLOC FOR OBJWASIN (MAYBE SHOULD DELETE THESE LINES) - LDA WVERB - CMP #GET - BNE .2 DON'T TRY TO GET LIQUID - LDA #107 TELL ME WHERE TO PUT IT. - JMP PMSG -.5 LDY #$FF -.6 INY - LDA .20,Y - BEQ .7 - CMP CUROBJ - BNE .6 - LDX .21,Y - STX .77 - TYA - ASL - TAY - LDA .23,Y - STA VDAT+1 - LDA .23+1,Y - STA VDAT+2 - TXA - BNE .7 SPCACT IF GOTTEN - JSR SPCACT -.7 LDA WVERB - CMP #REM REMOVE DOESN'T TAKE, JUST CHECKS FOR SPCACT - BEQ .80 - INC ALGOK - INC TRYCUR - LDA CUROBJ - LDX #IN - LDY ACTOR - JSR REPEDG - DEC TRYCUR - DEC ALGOK - LDA OLDTAIL - STA OLDLOC USED BY TEST AS TO WHERE OBJ WAS - BCC .79 - LDA CASEFRAME+2 - LSR - BCC .80 OK IF OBJ NOT GOTTEN - LDA SIZE - BEQ .80 SIZE=0:STEAM,GRAFFITI,ETC. - CMP #MGET-1 - BCS .80 OK IF NOT GOTTEN SINCE TOO BIG -.10 JMP RES -.20 .DA #BAR,BOOK4 -.21 .DA #1,#1 0=SPCACT ON ATTEMPT,1=ONLY SPCACT IF GOTTEN -.23 .DA .35,.40 -.35 .DA #NULL,#POKE,BARREM,1 UNBAR TRAPDOOR -.40 .DA #ZERO,AFND,#AINC,AFND,#AREP,#ARR,#IN,#SHELF,#AREP,#ARR,#PARTOF,#SHELF,#AMSG,66 MSG IF BOOK IS REMOVED -.77 .BS 1 -.79 CMP ACTOR - BEQ .80 ALREADY HAD IT - LDA WVERB - CMP #GET - BEQ .80 GET ALWAYS GETS - LDA #191 (TAKEN) - JSR PMSG -.80 LDA .77 - BEQ G81 SPCACT DONE BEFORE GETTING - JSR SPCACT -G81 LDY #2 -.83 LDA VTEMP-1,Y POINT VDAT TO START OF ACTION DATA - STA VDAT,Y - DEY - BNE .83 -G85 LDA CASEFRAME+3 - ASL SPECIAL ACTIONS? - BPL .90 - JSR SPCACT - LDA CASEFRAME+3 DON'T SAVE ON STACK IN CASE SUB PLA PLA RTS's - ASL -.90 ASL JSR? - BPL EDGACT - JSR VDAT - STA .95+1 - JSR VDAT - STA .95+2 -.95 JSR 0 - LDA CASEFRAME+3 - ASL - ASL -EDGACT ASL ADD EDGE? - BPL .40 - PHA - JSR GEDGE - PHA - JSR GEDGE - PHA - TAX - JSR CLCPNT - PHA - JSR GEDGE - PHA - JSR MAKEDG - PLA -.40 ASL DELETE EDGE? - BPL .50 - PHA - JSR DEL - PLA -.50 ASL REPLACE EDGE? - BPL .60 - PHA - LDA WVERB - PHA - CMP #PUT - BNE .55 - INC ALGOK PUT IN ME ALREADY DONE, PUT IN OTHER CAN'T BE AL GOT -.55 JSR DOREP - PLA - CMP #PUT - BNE .57 - DEC ALGOK -.57 PLA -.60 ASL ZERO BITS? - BPL .70 - PHA - LDA CUROBJ - JSR ZBIT - PLA -.70 ASL SET BITS? - BPL RES - LDA CUROBJ - JSR SBIT -RES LDA ACTOR - CMP #ME - BNE RERTS NO MSG FOR ACTIONS BY OTHERS -RESHI LDY /OKS MESSAGE MAY BE CHANGED BY ATTEMPT -RESLO LDA #OKS - JSR PS - LDA AFTMSG - BEQ RERTS - JMP PMSG -RERTS RTS -AFTMSG .BS 1 -ZBIT JSR PNTOBJ - LDY #3 -.1 JSR VDAT - STA TEMP FOR BITAAA - AND (MISC),Y ZERO BIT - JSR BITAAA - INY - CPY #6 - BNE .1 - RTS -SBIT JSR PNTOBJ - LDY #3 -.1 JSR VDAT - STA TEMP FOR BITAAA - ORA (MISC),Y SET BIT - JSR BITAAA - INY - CPY #6 - BNE .1 - RTS -* SEE IF BITS ARE ALREADY AS ASKED -BITAAA CMP (MISC),Y - BEQ .10 - STA (MISC),Y -.0 RTS -.10 LDA TEMP - STY TEMP - CPY #5 - BNE .20 - LDX #0 - CMP #%10111111 FIX - BEQ .50 - INX - CMP #%01000000 BREAK - BEQ .50 - INX - CMP #%00100000 BURN - BEQ .50 - RTS -.20 CPY #4 - BNE .0 - LDX #3 - CMP #%00100000 OPEN - BEQ .50 - INX - CMP #%11011111 CLOSE - BEQ .50 - INX - CMP #%00010000 UNLOCK - BEQ .50 - INX - CMP #%11101111 LOCK - BEQ .50 - INX - CMP #%01000000 PRIME - BEQ .40 - INX - CMP #%10111111 UNPRIME - BNE .0 -.40 LDY #3 - LDA (MISC),Y - AND #8 LIGHT? - BEQ .60 NO -.50 STX .90 - LDY /.70 - LDA #.70 - JSR OMSG -.60 LDY TEMP - RTS -.70 .US /IT'S ALREADY +/ - .DA .80 -* NOTE THIS SUB NEVER RETURNS TO PRINT -.80 PLA - BNE .80 - PLA - BNE .80 - STY $24 - LDA .90 - JSR PADJ REAL ADJ - LDA #". - JSR FDF0 - JMP FD8E -.90 .BS 1 -OBJCOL LDY ACTOR - CPY #ME - BNE .5 DON'T PRINT FOR OTHER ACTORS - LDY #2 - STY SHIFT - JSR PROBJ - LDA #": - JSR FDF0 - INC $24 -.5 RTS -* FINDD:FIND IF DEST IS REACHABLE -* FINDO:SEE IF OBJ IS REACHABLE -* ENTER BOTH WI 0 IN TEMP3+1 AND OBJ/DEST IN A -FINDD CMP ACLOC - BEQ FID - TAX - JSR PNTOBJ - LDY #3 - LDA (MISC),Y - AND #4 OPENABLE? - BEQ .2 NO - INY - LDA (MISC),Y - AND #$20 OPEN? - BNE .2 - STX TEMP3+1 CLOSED OBJ -.2 TXA -FINDO LDX #IN - JSR GETOBJ - DEX - BMI FID OBJ NOT IN LOC:ONLY MOVEMENT OR SPECIAL ACTION - INC INSOM SO DOOBJ DOESN'T PROCESS NONEXISTENT OBJS - PLA - BNE FINDD ALWAYS -FID LDA TEMP3+1 - BNE IC - CLC - RTS -IC STA $10 - STA CNTOBJ - LDY /.2 - LDA #.2 - JMP OMSG -.2 .US /> IS CLOSED.@=/ -* CONDITION#,COND PARMS,[AND/OR,COND,CP]/[ACTION#,ACT PARMS(,#$7F,ACTION#,ACT PARMS)(,#$80,CND,..),0] -* AND=00 OR=80 ELSE=7F -* ELSE-IF REPLACED BY ELSE-AND -ELSE .EQ $7F -SPCACT LDA #$FF - STA VAR VAR NOT BOUND - STA VAR+1 -.31 JSR VDAT GET CONDITION - TAY - BEQ .49 NO CNDS OR ACTS, USEFUL ONLY FOR 1ST BYTE - JSR TRYCND - BNE .39 FAILURE -.32 JSR VDAT GET ACTION - ASL - BNE .35 ACTION - BCC .31 AND -.34 JSR VDAT - JSR TRYCND SKIP OR COND - JSR VDAT - ASL - BEQ .34 AND/OR,SKIP -.35 TAY - LDA ACTTAB-2,Y - STA .37+1 - LDA ACTTAB-1,Y - STA .37+2 -.37 JSR 0 EXECUTE ACTION - JSR VDAT ANOTHER ACTION? - CMP #$7F ELSE - BEQ .39 - ASL SET Z - BNE .35 YES - BCS .31 ANOTHER COND/ACT SET - RTS -* COND FAILED -.39 JSR VDAT - TAY - BMI .31 OR - BNE .43 ACTION,SKIP IT - JSR VDAT - JSR TRYCND ADVANCE POINTER - JMP .39 -.42 LSR -.43 TAY - LDX ACTLEN-1,Y #PARMS TO SKIP -.44 JSR VDAT - DEX - BPL .44 VDAT X+1 TIMES - CMP #$7F ELSE - BEQ .32 - ASL - BNE .42 ANOTHER ACTION - BCS .31 ANOTHER PAIR -.49 RTS -* TRY CONDITION:ON EXIT Z=1 IF SUCCESS -TRYCND LDY #$60 RTS - STY .3 - CMP #$40 COND+$40=NOT COND - BCC .1 - SBC #$40 - LDY #$8 PHP - STY .3 -.1 ASL WASTE A BYTE FOR CONVENIENCE - TAY - LDA CNDTAB-2,Y - STA .2+1 - LDA CNDTAB-1,Y - STA .2+2 - JSR VDAT GET 1ST PARM -.2 JSR 0 -.3 PHP - PLA - EOR #2 Z=NOT Z - PHA - PLP - RTS -* SUBST CERTAIN #S IN EDGE SPECS -* WI SLOTS -GEDGE JSR VDAT - CMP #VY - BCC .2 - TAY - LDA .3-VY,Y - STA .1+1 - LDA .4-VY,Y - STA .1+2 -.1 LDA $FFF SLOT -.2 RTS -.3 .DA #VAR+1,#VAR,#ACTOR,#LOC,#SDEST,#SPM,#SINSTR,#CUROBJ -.4 .DA /VAR+1,/VAR,/ACTOR,/LOC,/SDEST,/SPM,/SINSTR,/CUROBJ -VAR .HS FFFF BOUND BY CND, USED BY CND OR ACTION. -* BINDING ERASED WHEN SPCACT CALLED -* MAKE SURE YOU KNOW WHEN YOU'RE BINDING IT & WHEN IT'S BOUND. -*VARIABLES USED IN EDGE SPECIFICATIONS. FILL WI SLOT VALUES -VOBJ .EQ $FF -VINSTR .EQ $FE -VPM .EQ $FD -VDEST .EQ $FC -VLOC .EQ $FB -VACT .EQ $FA -VX .EQ $F9 BOUND BY ISEDG,ITIN -VY .EQ $F8 -AC .US /ACTOR:=/ -OL .US /OBJECT(S):=/ -SLO .DA #PDEST,#PINS -SHI .DA /PDEST,/PINS -PDEST .US /DESTINATION:=/ -PINS .US /INSTRUMENT:=/ -* EXECUTE INLINE SPECACT -* JSR INLINE, RETURN ADDR, CODE -* CAN'T BE JMPed TO -* BUG: CRASH IF RECURSION TOO DEEP -INLINE >PSHW VDAT+1,VSTK,VPNT - PLA - TAY - PLA - STA VDAT+2 - INY - BNE .1 - INC VDAT+2 -.1 STY VDAT+1 - LDY .9 UNHURT BY VDAT - JSR VDAT GET RETURN ADDR - STA .7,Y - JSR VDAT & ADVANCE VDAT TO CODE - STA .8,Y - INC .9 - JSR JSRSPC EXTRA LEVEL SO SKIP WORKS - >PLLW VDAT+1,VSTK,VPNT - DEC .9 - LDY .9 - LDA .7,Y - STA .3+1 - LDA .8,Y - STA .3+2 -.3 JMP 0 -.7 .BS 12 RTS STACK -.8 .BS 12 -.9 .BS 1 RTS POINTER -VSTK .BS 22 12 LEVELS -VPNT .BS 1 -* CALL JSRSPC FOR SKIP TO RETURN TO CALLER -JSRSPC JSR SPCACT - RTS =inmate - .LISTOF -* -SAVEINMATE,S6,D2 -*-------------------------------- -* INMATE -* PHILIP GOETZ 1986-1988 -*-------------------------------- -PROD .EQ 1 1=PRODUCTION ASSEMBLY -*EQUs FROM PACK -TABTAB .EQ $7400 -SETTAB .EQ TABTAB+34 -KEYTAB .EQ SETTAB+2 -FINAL .EQ KEYTAB+12 START OF RPL TEXT - .OR $800 - .TF INOBJ,S6,D2 - .IN MACROS,S6,D1 - .IN START3 Initialization - .IN DISPLAY30 Print location & happenings each turn - .IN MONITOR2 Call monitor routines in other RAM bank - .IN EDGES27 Routines for altering/searching semantic network - .IN PRINT22 Print messages, strings; incl. compression routine - .IN STRTAB9 - .IN LEX35.1 Lexical analysis: Examine raw string & find words - .IN TRANSFORM10.3 Grammatical transformations - .IN ATN16.1 Augmented transition network (parser) - .IN TRANSIT28 Transitions for the ATN - .IN TSUB16 Subroutines called by the transitions - .IN HANDLER41 Verb handler jumped to after parse completed -* .IN CHECK Protection code - .IN CNDACT26,D2 Defines the interpreted adventure language used - by verb handlers & other things - .IN VOCA6 Vocabulary, A-I - .IN VOCJ5.1 Vocabulary, J-Z - .IN CASEFRAME Verb case frames - .IN VERBS33.1 Verb execution routines - .IN VT18.1 More verb routines -* .OR $8000 -* .TF GENOBJ -* .IN GENNUM3 Table used for reading vocab - .OR $D000 - .TF INCARD (Next part goes in 16K card) - .IN SPEAK13.1 Eliza parser -* .DO PROD -* .IN PROT2 More protection code -* .ELSE -*PROT RTS -*PROCNT .HS 50 GOOD -* .FIN - .IN LP5,S5,D1 List processing routines - .IN CHARS14.1 Plans, character reactions, etc. - .IN EDSCRIPT Eliza-type scripts, by character - .IN LIBSCRIPT - .IN MRKSCRIPT - .IN MRSSCRIPT - .IN INTSCRIPT - .IN PROSCRIPT2 - .IN IO9,S6,D2 Save/Restore game - .IN EVENTS5.1 Timed events & special events - .IN DATA37.1 Mostly objects - .IN NET10 Initial semantic network + END OF ARCHIVE