;
;
IF L.BRD = OFF ;-------------------------------------------
LIST -L ;-- GBIRD --------------------------------
ENDIF ;-------------------------------------------
;
;
;
;
; WAR-BIRD GAME LOGIC
; ===================
;
SETDP $C8
; ===== ===
;
GBIRD LDA #BIRDS ; FIND ACTIVE WAR-BIRD
STA TEMP1 ; .
LDU #BRDTBL ; .
;
BRD1 LDA BRDFLG,U ; . WAR-BIRD ACTIVE ?
LBEQ NXTBRD ; . .
LBMI BDYING ; . . WAR-BIRD SHIELD MODE ?
;
JSR MOVOBJ ; CALCULATE NEW WAR-BIRD POSITION
LBCS BRD3 ; . MOVED OFF-SCREEN ?
;
LDA BRDXW,U ; . CHECK FOR MARGIN CROSS-OVER
LDB BRDXD,U ; . . MOVING RIGHT OR LEFT ?
BPL BRD11A ; . . .
;
CMPA #$A0 ; . . OUTSIDE LEFT MARGIN ?
BLT BRD11 ; . . .
BRA BRD11B ; . . .
;
BRD11A CMPA #$60 ; . . OUTSIDE RIGHT MARGIN ?
BGT BRD11 ; . . .
;
BRD11B DEC BRDTMR,U ; MOTION TIME-OUT ?
BNE BRD12 ; .
;
BRD11 JSR RANDOM ; SET NEW DIRECTION AND TIME
ANDA #$3F ; . SET NEW TIMER VALUE
ORA #$20 ; . .
STA BRDTMR,U ; . .
;
LDA BRDANG,U ; . SET NEW MOTION ANGLE
JSR LRCONE ; . .
STA BRDANG,U ; . .
;
JSR RANDOM ; . CALCULATE NEW DISPLACEMENTS
ANDA #$3F ; . . SET NEW VELOCITY
ORA #$10 ; . . .
JSR CALDSP ; . .
;
LDA #$80 ; . SET WAR-BIRD CRY
STA SQUAWK ; . .
;
;
LDA GAMCMD ; FIRE WAR-BIRD CANNON AT BLASTER
ANDA #$80 ; . CANNON DISABLED ?
BEQ BRD12 ; . .
;
LDY #WARBLT ; . SET-UP FOR CANNON FIRE
LDA #$04 ; . .
STA TEMP9 ; . .
;
BRD80 LDA BLTFLG,Y ; . BULLET ACTIVE ?
BEQ BRD82 ; . .
;
LEAY BLTLEN,Y ; . BUMP TO NEXT ENTRY
DEC TEMP9 ; . .
BNE BRD80 ; . .
BRA BRD12 ; . NO ROOM FOR NEW BULLETS
;
BRD82 PSHS Y,U ; . SET-UP FOR NEW BULLET
;
LDD BLSTYX ; . AIM BULLET AT BLASTER
SUBA BRDYW,U ; . . CALCULATE DELTA 'YX'
SUBB BRDXW,U ; . . .
JSR CMPASS ; . . CALCULATE ANGLE TO SHIP
SUBA #$10 ; . . .
CMPA #$14 ; . . . IS ANGLE ACCEPTABLE
BLT BRD83 ; . . . .
CMPA #$2C ; . . . .
BLE BRD84 ; . . . .
;
BRD83 PULS Y,U ; . . . CRAPPY ANGLE - SKIP IT
BRA BRD12 ; . . . .
;
BRD84 TFR Y,U ; . CALCULATE BULLET DISPLACEMENTS
STA BLTANG,U ; . . SET BULLET ANGLE
LDA #$7F ; . . SET BULLET SPEED
JSR CALDSP ; . .
;
PULS Y,U ; . SET BULLET FLAG
LDA #$01 ; . .
STA BLTFLG,Y ; . .
;
LDA #$80 ; . SET BULLET SOUND
STA SHOOT ; . .
;
INC CBLT ; . INCREMENT ACTIVE BULLET COUNTER
;
LDD BRDYW,U ; . SET WAR-BIRD POSITION
STD BLTYW,Y ; . .
LDD BRDXW,U ; . .
STD BLTXW,Y ; . .
LDD BRDYX,U ; . .
STD BLTYX,U ; . .
;
LDA #$07 ; . SET ENERGY LEVELS
STA BLTERG,Y ; . .
;
LDA #$04 ; . SET BOUNCE COUNTER
STA BLTBNC,Y ; . .
;
;
BRD12 LDX #BR.SIZ ; UPDATE PERSPECTIVE RELATED INFO
LDA BRDYW,U ; . FETCH VERTICAL POSITION
JSR PRSPCT ; . CALCULATE NEW POINTER
STB BRDSIZ,U ; . SAVE WAR-BIRD SIZE
;
LDX #CL.LIM ; . FETCH LEFT WALL LIMIT
LDB A,X ; . .
STB TEMP2 ; . .
;
LDX #CR.LIM ; . FETCH RIGHT WALL LIMIT
LDB A,X ; . .
STB TEMP3 ; . .
;
LDB #$06 ; . SET COLLISION BOX
STB BRDBOX,U ; . .
LDX #BR.BOX ; . .
LDB A,X ; . .
STB BRDBOX+1,U ; . .
;
LDA BRDFLG,U ; . IS WAR-BIRD OVER ROADWAY ?
ANDA #$BF ; . . RESET ROADWAY FLAG
LDB BRDXW,U ; . . LEFT WALL CHECK
CMPB TEMP2 ; . . .
BLT BRD14 ; . . .
CMPB TEMP3 ; . . RIGHT WALL CHECK
BGT BRD14 ; . . .
;
ORA #$40 ; . . WAR-BIRD IS OVER ROADWAY
BRD14 STA BRDFLG,U ; . . .
;
;
PSHS DP ; DISPLAY WAR-BIRD FOR THIS ENTRY
LDA #$D0 ; . SET "DP" TO I/O
TFR A,DP ; . .
SETDP $D0 ; . .
;
JSR INT3Q ; . SET WAR-BIRD INTENSITY
;
LDD BRDYX,U ; . DRAW LEFT-HALF OF WAR BIRD
JSR POSITD ; . .
LDX #PBIRDL ; . . SELECT ANIMATION FRAME
LDA FRAME ; . . . FETCH FRAME COUNT
LSRA ; . . .
LSRA ; . . .
ANDA #$06 ; . . .
PSHS A ; . . . SAVE COPY FOR OTHER SIDE
LDX A,X ; . . . FETCH DUFFY POINTER
LDA #$08 ; . .
LDB BRDSIZ,U ; . .
JSR TDUFFY ; . .
;
LDD BRDYX,U ; . DRAW RIGHT-HALF OF WAR BIRD
JSR POSITD ; . .
LDX #PBIRDR ; . . SELECT ANIMATION FRAME
PULS A ; . . . FETCH PRIOR POINTER
LDX A,X ; . . . FETCH DUFFY POINTER
LDA #$08 ; . .
LDB BRDSIZ,U ; . .
JSR TDUFFY ; . .
PULS DP ; . SET "DP" TO RAM
SETDP $C8 ; . .
;
;
NXTBRD LEAU BRDLEN,U ; BUMP TO NEXT ENTRY
DEC TEMP1 ; . END-OF-BIRD TABLE ?
LBNE BRD1 ; . .
;
RTS ; . RETURN TO CALLER
;
;
BRD3 DEC CBRD ; THIS ENTRY HAS MOVED OFF-SCREEN
BRD4 CLR BRDFLG,U ; . RESET WAR-BIRD ENTRY
BRA NXTBRD ; . .
;
;
BDYING LDA BRDTMR,U ; DECAY WAR-BIRD SHIELD
LDB FRAME ; . DECREMENT TIMER EVERY FOURTH FRAME
ANDB #$03 ; . .
BNE BDIE0 ; . .
;
SUBA #$01 ; . DECREMENT DECAY TIMER
STA BRDTMR,U ; . .
CMPA #$3F ; . . END OF SHIELD DECAY ?
BGE BDIE0 ; . . .
;
JSR BRDINS ; . . . TRY TO INSERT NEW BIRD
BRA BRD4 ; . . . .
;
BDIE0 PSHS DP ; DISPLAY WAR-BIRD SHIELD FOR THIS ENTRY
LDB #$D0 ; . SET "DP" TO I/O
TFR B,DP ; . .
;
JSR INTENS ; . SET WAR-BIRD SHIELD INTENSITY
;
;==========================================================================JJH
; LDD BRDYX,U ; CODE DELETED - REV. B CHANGES ======JJH
; JSR POSITD ; . ======JJH
; LDX #PSHLD ; . ======JJH
; LDA #$05 ; . ======JJH
; LDB BRDSIZ,U ; . ======JJH
; JSR TDUFFY ; . ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
LDY BRDYX,U ; CODE ADDED - REV. B CHANGES ======JJH
LDX #PSHLD ; . ======JJH
LDB BRDSIZ,U ; . ======JJH
JSR DFSHRT ; . ======JJH
;==========================================================================JJH
;
PULS DP ; . SET "DP" TO RAM
BRA NXTBRD ; . TRY NEXT ENTRY
;
;
IF L.BRD = OFF ;-------------------------------------------
LIST * ;-------------------------------------------
ENDIF ;-------------------------------------------
|