;
;
IF L.COLD = OFF ;-------------------------------------------
LIST -L ;-- COLIDE -------------------------------
ENDIF ;-------------------------------------------
;
;
;
;
; COLLISION HANDLER
; =================
;
SETDP $C8
; ===== ===
;
COLIDE PSHS DP ; SET 'DP' = RAM
LDA #$C8 ; .
TFR A,DP ; .
;
LDU #FLMTBL ; SCAN FLAMOID TABLE
LDA #FLMCNT ; .
STA TEMP1 ; .
;
CLID1 LDA FLMFLG,U ; IS FLAMOID ACTIVE ?
LBEQ CLID6 ; .
LDA FLMYW,U ; . FORM FLAMOID POSITION
LDB FLMXW,U ; . .
STD ETMP1 ; . .
;
LDA FLMFLG,U ; WARRIOR VS. FLAMOID COLLISION ?
BITA #$40 ; . SKIP TEST AGAINST WARRIOR ?
BNE CLID2 ; . .
LDA WARFLG ; . HAS THE WARRIOR BEEN KILLED ALREADY ?
BEQ CLID2 ; . .
;
LDX ETMP1 ; . FETCH FLAMOID POSITION
LDA WARYW ; . FETCH WARRIOR POSITION
LDB WARXW ; . . PROJECTED 'X'
TFR D,Y ; . .
LDD #$0202 ; . SET WARRIOR COLLISION BOX
JSR BXTEST ; . PERFORM BOX TEST
BCC CLID2 ; . .
;
PSHS X,Y,U ; . COLLISION DETECTED
CLRB ; . . SET-UP WARRIOR FRAGMENT #1
LDA WARSCY ; . . .
TFR D,Y ; . . .
LDA WARSCX ; . . .
TFR D,X ; . . .
LDA #$3F ; . . .
LDU #EXWAR1 ; . . .
JSR SETEXP ; . . .
LDU #EXWAR2 ; . . SET-UP WARRIOR FRAGMENT #2
JSR SETEXP ; . . .
LDU #EXWAR3 ; . . SET-UP WARRIOR FRAGMENT #3
JSR SETEXP ; . . .
LDU #EXWAR4 ; . . SET-UP WARRIOR FRAGMENT #4
JSR SETEXP ; . . .
CLR WARFLG ; . . KILL WARRIOR
LDA #$7F ; . . . SET-UP TIMER
STA TMR1 ; . . . .
INC EXPEND ; . . SET EXPLOSION FLAG
LDA #$80 ; . . SET EXPLOSION SOUND FLAG
STA EXPWAR ; . . .
PULS X,Y,U ; . .
JMP CLID5 ; . . RESET THIS FLAMOID
;
;
CLID2 LDX ETMP1 ; COMPARE FLAMOID AGAINST WALLS
LDY #$52E0 ; . CHECK LEFT-FRONT WALL
LDD #$030A ; . . SET BOX SIZE
JSR BXTEST ; . . PERFORM BOX TEST
LBCS CLID5 ; . . .
;
LDX ETMP1 ; . CHECK LEFT-MIDDLE WALL
LDY #$5EE8 ; . . SET WALL POSITION
LDD #$0306 ; . . SET BOX SIZE
JSR BXTEST ; . . PERFORM BOX TEST
LBCS CLID5 ; . . .
;
LDX ETMP1 ; . CHECK LEFT-REAR WALL
LDY #$66E8 ; . . SET WALL POSITION
LDD #$0309 ; . . SET BOX SIZE
JSR BXTEST ; . . PERFORM BOX TEST
LBCS CLID5 ; . . .
;
LDX ETMP1 ; . CHECK RIGHT-FRONT WALL
LDY #$5218 ; . . SET WALL POSITION
LDD #$0302 ; . . SET BOX SIZE
JSR BXTEST ; . . PERFORM BOX TEST
LBCS CLID5 ; . . .
;
LDX ETMP1 ; . CHECK RIGHT-MIDDLE WALL
LDY #$5E18 ; . . SET WALL POSITION
LDD #$0306 ; . . SET BOX SIZE
JSR BXTEST ; . . PERFORM BOX TEST
LBCS CLID5 ; . . .
;
LDX ETMP1 ; . CHECK RIGHT-REAR WALL
LDY #$6618 ; . . SET WALL POSITION
LDD #$0308 ; . . SET BOX SIZE
JSR BXTEST ; . . PERFORM BOX TEST
BCS CLID5 ; . . .
;
;
LDY #BRGTBL ; SCAN BRIGAND TABLE
LDA #BRGCNT ; .
STA TEMP2 ; .
;
;
CLID3 LDA BRGFLG,Y ; IS BRIGAND ENTRY ACTIVE ?
BPL CLID4 ; .
;
LDX #BRGVIS ; IS BRIGAND VISIBLE ?
LDA BRGTMR,Y ; .
LDA A,X ; .
BEQ CLID4 ; .
;
LDA FLMFLG,U ; IS THIS FLAMOID BRIGAND LAUNCHED ?
BITA #$40 ; .
BEQ CLID4 ; .
;
PSHS Y,U ; .
LDX BRGPTR,Y ; .
LDA BRGHTY,X ; .
LDB BRGHTX,X ; .
LDX BRGBOX,X ; .
PSHS X ; .
TFR D,Y ; .
LDA FLMYW,U ; . FETCH FLAMOID POSITION
LDB FLMXW,U ; . .
TFR D,X ; . .
PULS D ; .
JSR BXTEST ; . PERFORM BOX TEST
PULS Y,U ; . .
BCC CLID4 ; . .
;
PSHS Y,U ; . COLLISION DETECTED
LDX BRGPTR,Y ; . . SET-UP BRIGAND FRAGMENT #1
LDY BRGYW,X ; . . .
LDA BRGSIZ,X ; . . .
LDX BRGXW,X ; . . .
LDU #EXBRG1 ; . . .
JSR SETEXP ; . . .
LDU #EXBRG2 ; . . SET-UP BRIGAND FRAGMENT #2
JSR SETEXP ; . . .
LDU #EXBRG3 ; . . SET-UP BRIGAND FRAGMENT #3
JSR SETEXP ; . . .
PULS Y,U ; . .
CLR FLMFLG,U ; . . KILL WARRIOR
LDX #PLYSCR ; . . ADD VALUE TO PLAYERS SCORE
LDD #$0125 ; . . .
JSR SCRADD ; . . .
INC EXPEND ; . . SET EXPLOSION FLAG
LDA #$80 ; . . SET EXPLOSION SOUND FLAG
STA EXPBRG ; . . .
;
;
CLR BRGFLG,Y ; RESET CURRENT BRIGAND
DEC CBXAMT ; . DECREMENT BRIGAND COUNTER
LDA #$01 ; . SET LAST GOBLIN KILLED FLAG
STA GBLKIL ; . .
;
;
CLID4 LEAY BRGLEN,Y ; BUMP TO NEXT BRIGAND ENTRY
DEC TEMP2 ; .
BNE CLID3 ; .
;
BRA CLID6
;
;
CLID5 CLR FLMFLG,U ; RESET CURRENT FLAMOID
;
;
CLID6 LEAU FLMLEN,U ; BUMP TO NEXT FLAMOID ENTRY
DEC TEMP1 ; .
LBNE CLID1 ; .
;
PULS DP,PC ; RETURN TO CALLER
;
IF L.COLD = OFF ;-------------------------------------------
LIST * ;-------------------------------------------
ENDIF ;-------------------------------------------
|