0 ;FINDCHAR:THIS SUBROUTINE TAKES THE 10 ;PLAYER(GUN) AND CALCULATES WHAT 20 ;ROW THE PLAYER IS ON 30 ; 40 FINDCHAR SEC ;SUBTRACT OFF AREA WHERE 50 SBC #$20 ;PLAYER IS NOT ON SCREEN 60 LSR A ;DIVIDE BY CHAR LENGTH 70 LSR A 80 LSR A 90 TAX 0100 LDA DLIST+5 ;LOAD ADDRESS 0110 STA TEMPCH ;OF SCREEN 0120 LDA DLIST+6 0130 STA TEMPCH+1 0140 ROW DEX ;CALCULATE ROW OFF-SET 0150 BMI EXITCH ;IF>0 THEN 0160 CLC ;ADD 40(#OF BYTES PER ROW) 0170 LDA TEMPCH ;TO CALCULATE ROW OF 0180 ADC #40 ;SCREEN THAT PLAYER 0190 STA TEMPCH ;IS ON 0200 LDA TEMPCH+1 0210 ADC #0 0220 STA TEMPCH+1 0230 JMP ROW 0240 EXITCH RTS 0250 ; 0260 ;MISSILE1:ALLOWS PLAYER(GUN) 0270 ;TO FIRE CHARACTER BOMB 0280 ; 0281 MISSILE1 LDA SDELAY1 0282 BEQ OFF1 0283 LDA #173 0284 STA $D200 0285 DEC SDELAY1 0286 JMP MF1 0287 OFF1 LDA #0 0288 STA $D200 0290 MF1 LDA (TEMPT),Y ;LOAD TRIGGER VALUE 0300 BEQ FIREM ;IF= THEN OK TO FIRE BOMB 0310 RTS 0320 FIREM INC TEMP1+6 ;ADD 1 TO DELAY 0330 LDA TEMP1+6 ;COUNT BEFORE BOMB CAN BE FIRED 0340 CMP #11 ;(DELAY VALUE) 0350 BCC NOMIS 0360 LDA #0 0370 STA TEMP1+6 ;RESET DELAY 0380 LDA TOP1,X ;VERT START POS OF GUN 0390 CLC 0400 ADC #4 ;CALCULATE MIDDLE OF GUN 0410 JSR FINDCHAR ;FIND ROW OF SCREEN PLAYER IS ON 0420 LDY TEMP1 ;OFFSET WHERE BOMB WILL APPEAR 0430 LDA (TEMPCH),Y ;CHECK BYTE WHERE BOMB WILL APPEAR 0440 BNE NOMIS ;IF = THEN 0450 LDA #$58 ;LOAD BOMB CHAR 0460 STA (TEMPCH),Y ;DISPLAY BOMB 0461 LDA #5 0462 STA SDELAY1 0470 NOMIS RTS