; TRCC.ASM ; COLLISION TESTS HITTST PROC LDA P0PF ;BODY0 TO TRC AND #%00000111 BNE P0COLN LDA P1PF ;NOSE0 TO TRC AND #%00000111 BNE P0COLN LDA P2PF ;BODY1 TO TRC AND #%00000111 BNE P1CJMP LDA P3PF ;NOSE1 TO TRC AND #%00000111 BNE P1CJMP LDA P1PL ;nose0 to nose1 AND #%00000100 BEQ FINTST LDA RANDOM ;random death AND #1 BEQ P0COLN JMP P1CJMP FINTST LDA P0PL ;body0 to body1 AND #%00000100 BNE P0COLN LDA P1PL ;nose0 to body1 AND #%00000100 BNE P0COLN LDA P2PL ;body1 to body0 AND #%00000001 BNE P1CJMP LDA P3PL ;nose1 to body0 AND #%00000001 BNE P1CJMP RTS P1CJMP JMP P1COLN ;vector to far P0COLN = * ;process death PLA ;clear JSR addr PLA JSR KILSND LDA #168 STA AUDC2 LDX #10 ;flash trace :NEXT LDA RANDOM ORA #%00000101 STA COLOR1 STA AUDF2 LDY #1 JSR PAUSE DEX BPL :NEXT LDA #206 STA COLOR1 LDA PLCOL ; set coordinates STA HCOORD ; for explosion LDA PLROW STA VCOORD JSR CRSET ;reset trace start LDA PLROW STA ROWCRS LDA PLCOL STA COLCRS LDA #8 STA SAUDF2 LDA #%01010000 STA AUDCTL LDA #2 STA LNBIT LDA #LOW SCR0 ; set indirect addr STA ZPADR ; to pick score LDA #HIGH SCR0 ; to add points to STA ZPADR+1 JSR EATLN LDA #143 ; setup for explosion STA SAUDC1 LDA #255 STA AUDF1 LDA #0 STA AUDC2 STA AUDCTL LDA #2 STA PLTVAL STA HPOSP0 STA HPOSP1 JSR EXPLOS LDY #35 JSR PAUSE RTS P1COLN = * ;process player 2 death PLA PLA ; EAT LINE SOUND JSR KILSND LDA #168 STA AUDC2 LDX #10 NXCL2 LDA RANDOM ORA #%00000101 STA COLOR2 STA AUDF2 LDY #1 JSR PAUSE DEX BPL NXCL2 LDA #156 STA COLOR2 LDA PLCOL+1 STA HCOORD LDA PLROW+1 STA VCOORD JSR CRSET LDA PLROW+1 STA ROWCRS LDA PLCOL+1 STA COLCRS LDA #8 STA SAUDF2 LDA #%01010000 STA AUDCTL LDA #3 STA LNBIT ; SET SCORE INDIRECT ADDR LDA #LOW SCR1 STA ZPADR LDA #HIGH SCR1 STA ZPADR+1 JSR EATLN LDA #143 STA SAUDC1 LDA #255 STA AUDF1 LDA #0 STA AUDCTL STA AUDC2 LDA #3 STA PLTVAL STA HPOSP2 STA HPOSP3 JSR EXPLOS LDY #35 JSR PAUSE RTS ; value of screen data to follow in eatline LNBIT DB 0 ; Begin at start of line and follow ; up to the ship EATLN PROC CLEAR = * JSR SCORE ;calc score LDA SAUDF1 ;process sound CLC ADC #50 BCC :OK INC SAUDF2 :OK STA AUDF1 STA SAUDF1 LDA SAUDF2 STA AUDF2 JSR SCRSCN ;put score to screen LDA #00 ;blank line pixel JSR $F5B7 ;OUTCH JSR $F593 ;GETCH DEC COLCRS ;follow line CMP LNBIT ; + 1 COL BEQ CLEAR DEC COLCRS DEC COLCRS JSR $F593 DEC COLCRS CMP LNBIT ; - 1 COL BEQ CLEAR INC COLCRS DEC ROWCRS JSR $F593 DEC COLCRS CMP LNBIT ; - 1 ROW BEQ CLEAR INC ROWCRS INC ROWCRS JSR $F593 DEC COLCRS CMP LNBIT ; + 1 ROW BEQ CLEAR RTS ; Add to proper player score buffer ; one point for each pixel eaten. ZPADR = $86 ;indirect addr of player score buffer SCORE PROC SED LDY #2 CLC LDA (ZPADR),Y ADC #1 STA (ZPADR),Y BCC :OUT LDY #1 LDA (ZPADR),Y ADC #0 STA (ZPADR),Y BCC :OUT LDY #0 LDA (ZPADR),Y ADC #0 STA (ZPADR),Y :OUT CLD RTS ; Multi purpose pause rtn PAUSE PROC ;CALLER SETS Y TXA PHA LDA #3 LDX #00 JSR SETVBV LDA #1 STA CDTMF3 :WAIT LDA CDTMF3 BNE :WAIT PLA TAX RTS ; EXPLOSION ROUTINE ; smoke ring explosion data EXPTBL DB $1F,$3F,$5E,$7D,$9C,$BB,$C9,$D7,$E5,$F3,$F1 HCOORD DB 0 ;coordinates of explosion VCOORD DB 0 RINGCT DB 0 ;number of rings ploted EXTEN DB 0 ;dia. of ring passed to plot rtn PLTVAL DB 0 ;color of ring SAUDC1 DB 0 ;shadow audio c NWORK DB 0 ;blank out ring dia. PWORK DB 0 ;plot ring dia. ; Each ring is ploted and then later ; blanked out. The values in pwork or ; nwork are subtracted from each nibble ; of a byte of exptbl which is then added ; to or subtracted from the coordinates ; of the explosion giving the position of ; the next pixel to be ploted. EXPLOS PROC ;controls the ring plotings LDY #13 STY NWORK LDA #10 STA PWORK NXPWK STA EXTEN JSR RING DEC SAUDC1 ;PRO SOUND LDA SAUDC1 AND #%11101111 STA AUDC1 DEC PWORK FINNW DEC NWORK ;finish clearing out the ring LDY #1 JSR PAUSE LDA NWORK EXPL2 = * LDA NWORK BPL NOTOUT RTS NOTOUT STA EXTEN LDA PLTVAL PHA LDA #0 STA PLTVAL JSR RING PLA STA PLTVAL LDA PWORK BMI FINNW JMP NXPWK ; Rtn to a plot ring of an explosion ; controls pixels to be ploted in one ring RING PROC LDX #10 :NEXT = * TXA PHA JSR SETRC JSR ADDH JSR SUBV LDA PLTVAL JSR $F5B7 ;OUTCH (PLOT) JSR SUBH JSR ADDV LDA PLTVAL JSR $F5B7 JSR ADDH JSR ADDV LDA PLTVAL JSR $F5B7 JSR SUBH JSR SUBV LDA PLTVAL JSR $F5B7 PLA TAX DEX BPL :NEXT RTS ; This procedure splits the explosion data ; and subtracts the dia. value (exten) ; from it then stores the result in the ; hor and ver registers VER DB 0 HOR DB 0 SETRC PROC LDA EXPTBL,X AND #$0F SEC SBC EXTEN BPL :SKIP LDA #0 :SKIP STA VER LDA EXPTBL,X LSR A ! LSR A ! LSR A ! LSR A SEC SBC EXTEN BPL :SKIP2 LDA #0 :SKIP2 STA HOR RTS ; ADD OR SUB ROUTINES TO SET ROW COL ; these routines are called to calculate ; the actual plot position used by the OS, ; based on the values in HOR and VER ADDH = * LDA HOR CLC ADC HCOORD CMP #158 BCC OKRNG LDA #158 OKRNG STA COLCRS RTS ADDV = * LDA VER CLC ADC VCOORD CMP #90 BCC OKRNG3 LDA #90 OKRNG3 STA ROWCRS RTS SUBH = * LDA HCOORD SEC SBC HOR CMP #1 BCS OKRNG2 LDA #1 OKRNG2 STA COLCRS RTS SUBV = * LDA VCOORD SEC SBC VER CMP #1 BCS OKRNG4 LDA #1 OKRNG4 STA ROWCRS RTS LINK D:TRCD.ASM