Thread View: comp.sources.apple2
1 messages
1 total messages
Started by Jonathan A. Chandross
Sat, 01 Jun 1991 02:40
v001SRC052: Inmate Parser -- ATN Based, Part02/05
Author: Jonathan A. Chandross
Date: Sat, 01 Jun 1991 02:40
Date: Sat, 01 Jun 1991 02:40
1890 lines
44736 bytes
44736 bytes
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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads