;
;
IF L.BLT = OFF ;-------------------------------------------
LIST -L ;-- GBULET -------------------------------
ENDIF ;-------------------------------------------
;
;
;
;
; BULLET GAME LOGIC
; =================
;
SETDP $C8
; ===== ===
;
GBULET LDX #BLBNC ; SET-UP BULLET BOUNCE TABLE POINTER
STX BNCTBL ; .
;
LDA #BULETS + 4 ; FIND ACTIVE BULLET
STA TEMP1 ; .
LDU #BLTTBL ; .
;
GBLT1 LDA BLTFLG,U ; . BULLET ACTIVE ?
LBEQ NEWBLT ; . .
;
JSR MOVOBJ ; CALCULATE NEW BULLET POSITION
BVS GBLT3A ; . BULLET MOVED OFF-SCREEN ?
BCS GBLT3A ; . .
;
LDA KILFLG ; UPDATE PERSPECTIVE INFO
BEQ GBLT1B ; . KILLER SEQUENCE ?
;
LDX #K.INT ; . SET-UP FOR KILLER PERSPECTIVE INFO
BRA GBLT1C ; . .
;
GBLT1B LDX #B.INT ; . NORMAL PERSPECTIVE INFO
GBLT1C LDA BLTYW,U ; . . FETCH VERTICAL POSITION
JSR PRSPCT ; . . CALCULATE NEW POINTER
STA TEMP2 ; . .
STB BLTERG,U ; . . SAVE BULLET ENERGY LEVEL
;
LDA KILFLG ; . KILLER SEQUENCE ?
BNE GBLT1D ; . .
;
TSTB ; . HAS BULLET REACHED ZERO ENERGY ?
BEQ GBLT8 ; . .
BRA GBLT1E ; . .
;
GBLT1D TSTB ; . KILLER SEQUENCE - BULLET OFF-SCREEN ?
BEQ GBLT3A ; . .
;
;
GBLT1E LDA TEMP1 ; PERFORM BOUNCE TEST
CMPA #BULETS ; . WAR-BIRD BULLETS ?
BLE GBLT10 ; . .
;
LDA KILFLG ; . KILLER SEQUENCE ?
BNE GBLT13 ; . .
;
LDA BLTHLD,U ; . BOUNCE HOLD-OFF PENDING ?
BNE GBLT12 ; . .
;
JSR COLIDE ; . PERFORM WALL COLLISION TEST
BVS GBLT3A ; . . IS BULLET OUT-BOUND ?
BCC GBLT10 ; . . DID WALL COLLISION OCCUR ?
;
GBLT16 DEC BLTBNC,U ; HANDLE BULLET BOUNCE
BEQ GBLT3A ; . TEST BULLET BOUNCE COUNTER
;
GBLT17 LDA #$7F ; . FORM NEW BULLET DISPLACEMENTS
JSR CALDSP ; . . CALCULATE NEW DISPLACEMENTS
;
LDA #$03 ; . SET BULLET BOUNCE HOLD-OFF
STA BLTHLD,U ; . .
;
GBLT12 DEC BLTHLD,U ; DECREMENT BOUNCE HOLD-OFF
;
;
GBLT10 LDA BLTXW,U ; IS BULLET HIDDEN BY WALL ?
LDX #CHRLIM ; . RIGHT WALL ?
LDB TEMP2 ; . .
CMPA B,X ; . .
BGT NXTBLT ; . .
LDX #CHLLIM ; . LEFT WALL ?
CMPA B,X ; . .
BLT NXTBLT ; . .
;
GBLT13 PSHS DP ; DISPLAY BULLET FOR THIS ENTRY
LDA #$D0 ; . SET "DP" TO I/O
TFR A,DP ; . .
LDX #B.ERG ; . SET BULLET INTENSITY
LDA BLTERG,U ; . .
LDA A,X ; . .
JSR INTENS ; . .
LEAY BLTYW,U ; . POSITION BULLET
JSR DDOT ; . .
PULS DP ; . SET "DP" BACK TO RAM
;
NXTBLT LEAU BLTLEN,U ; BUMP TO NEXT ENTRY
DEC TEMP1 ; . END-OF-BULLET TABLE ?
LBNE GBLT1 ; . .
;
RTS ; . RETURN TO CALLER
;
;
;
GBLT3A CLR BLTFLG,U ; CLEAR BULLET ENTRY
DEC CBLT ; . DECREMENT ACTIVE BULLET COUNTER
BRA NXTBLT ; . BUMP TO NEXT ENTRY
;
;
GBLT8 LDA BLTANG,U ; BULLET AT TOP OF SCREEN - SEND BACK DOWN ?
BNE GBLT3A ; .
;
LDA #$20 ; SET BULLET ANGLE
STA BLTANG,U ; .
;
BRA GBLT16 ; TURN BULLET
;
;
;
NEWBLT LDA BFIRE ; INSERT NEW BULLET ?
BNE NWBLT1 ; . IS FIRE BUTTON DEPRESSED ?
CLR BLSTMR ; . . BUTTON 'OFF' - RESET TIMER
BRA NXTBLT ; . . .
;
NWBLT1 LDA BLSTMR ; . BLASTER INHIBITED ?
ORA ABORT ; . GAME ABORTED ?
BNE NXTBLT ; . .
;
LDA TEMP1 ; . DISPLAYING WAR-BIRD BULLETS ?
CMPA #BULETS ; . .
BLE NXTBLT ; . .
;
LDA #$80 ; INSERT NEW BULLET !
STA SHOOT ; . TURN-ON BULLET SOUND
INC BLTFLG,U ; . SET BULLET 'ON'
;
LDD BLSTY ; . SET BLASTER POSITION
STD BLTYW,U ; . . 'Y' AXIS
LDD BLSTX ; . . 'X' AXIS
STD BLTXW,U ; . . .
LDD BLSTYX ; . . ABSOLUTE 'YX' POSITION
STD BLTYX,U ; . . .
;
LDA #$03 ; . SET BULLET BOUNCE COUNTER
STA BLTBNC,U ; . .
;
LDA #$07 ; . SET BULLET ENERGY LEVEL
STA BLTERG,U ; . .
;
LDA #$08 ; . SET BLASTER INHIBIT COUNTER
STA BLSTMR ; . .
;
CLR BLTANG,U ; . CLEAR BULLET ANGLE
;
INC CBLT ; . BUMP ACTIVE BULLET COUNTER
;
JMP GBLT17 ; . .
;
;
IF L.BLT = OFF ;-------------------------------------------
LIST * ;-------------------------------------------
ENDIF ;-------------------------------------------
|