home *** CD-ROM | disk | FTP | other *** search
- From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
- Newsgroups: comp.sources.apple2
- Subject: v001SRC052: Inmate Parser -- ATN Based, Part02/05
- Message-ID: <May.31.22.40.14.1991.10998@yoko.rutgers.edu>
- Date: 1 Jun 91 02:40:14 GMT
- Approved: jac@paul.rutgers.edu
-
-
- 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
-