;GDAC1.S ;THIS SUBROUTINE GIVES BIRTH TO A SINGLE SHIP OR PAIR OF SHIPS ;IT GIVES BIRTH ACCORDING TO SHIPCNT AND RACK NUMBER ;IT ALSO RESETS BORNCNT ;IT ALSO INCREMENTS SHIPCNT APPROPRIATELY ; ;THE TEMPORARY VARIBLES IT USES ARE ;TEMP1 DS 2 ;0 PAGE ;TEMP2 DS 2 ;0 PAGE ;LOOPCNT DS 1 ; ;THE CONSTANTS USED ;TIBTNBIR EQU ?? ;FRAMES BETWEEN BIRTHS ;TIBTNWAV EQU ?? ;SIZE OF EACH ENTRY IN ENEMY LIST ;NOTFOSH EQU ?? ; BIRTH LDA ABORT BEQ BIRTH9 RTS ;RETURN IF ABORT = 1 BIRTH9 LDA CHALSTG ;SEE IF CHALLENGING STAGE BEQ BIRTH7 ;IF NOT, GO ON LDA CHALWAVE ;SEE IF NEW CHALLENGING WAVE BEQ BIRTH7 ;ONLY CARE ABOUT START OF NEW WAVE LDA AIRBORNE ;SEE IF AIRBORNE = 0 BEQ BIRTH10 RTS BIRTH10 LDA #0 STA CHALWAVE ;USED FOR LONG CHALLENGING WAVES BIRTH7 LDA NEWWAVE BEQ BIRTH1 LDA TYPE+41 CLC ADC TYPE+42 ADC TYPE+43 ADC TYPE+44 BEQ BIRTH1 LDA #4 STA BORNCNT RTS BIRTH1 LDA SHIPCNT CMP #13 BEQ STRTWV CMP #25 BEQ STRTWV CMP #37 BEQ STRTWV CMP #49 BEQ STRTWV BNE BIRTH8 STRTWV LDA #0 STA WAVECNT ;INDICATE TIME FOR NEW WAVE STA WAVESCR ;RESET SCORE FOR CHALLENGING WAVE STA SHPERWAV ;RESET # OF SHIPS BORN THIS WAVE BIRTH8 LDA WAVECNT BEQ INCWVREG LDA CHALSTG BEQ BIRTH11 LDA CHALINDX JMP NOCHNG BIRTH11 LDA WAVEREG JMP NOCHNG INCWVREG LDA #$FF STA WAVECNT ;RESET WAVECNT LDA CHALSTG BEQ INCWVRG LDA CHALINDX ;GET INDEX FOR CHALLENGING STAGES CMP #39 ;SEE IF NEED TO RESET IT BNE INDXOK LDA #0 STA CHALINDX BEQ NOCHNG INDXOK CLC ADC #1 STA CHALINDX BNE NOCHNG INCWVRG LDA WAVEREG CMP #14 ;SEE IF NEED TO RESET IT BNE INDXOK1 LDA #0 STA WAVEREG BEQ NOCHNG INDXOK1 CLC ADC #1 STA WAVEREG NOCHNG TAY LDA RACK ;SEE IF LOW RACK CMP #3 BCS UPPERRK LDA LOWPAIR,Y BNE STRLPCNT UPPERRK LDA CHALSTG ;SEE IF CHALLENGING STAGE BEQ HIPAIR LDA CHALPAIR,Y ;GET CHALLENGING PAIR CODE BNE STRLPCNT HIPAIR LDA HIGHPAIR,Y STRLPCNT STA LOOPCNT DOSISTER LDA CHALSTG ;SEE IF CHALLENGING STAGE BEQ REGSTG LDA CHALNUM ;GET # OF THIS CHALLENGING STAGE ASL A ;MULT BY 2 TAY LDA CHALTBL,Y ;GET LOW BYTE OF ADDRESS STA TEMP1 INY LDA CHALTBL,Y STA TEMP1+1 GETINDX LDA SHIPCNT SEC SBC #1 ;1ST SHIP IS ZEROTH ENTRY TAY LDA SHIPINDX,Y TAY LDA (TEMP1),Y ;GET ADDRESS OF SHIP DATA AND PLACE STA TEMP2 ;IN 0 PAGE, TEMP2 INY LDA (TEMP1),Y STA TEMP2+1 LDA SHIPCNT ;LOOKUP THE SHIP NUMBER CMP #61 ;FIRST, SEE IF IS INVISO SHIP BNE NOTINV JMP FOINVISO REGSTG LDA RACK CMP #3 BCC LOWRK FIXRK SEC SBC #4 CMP #3 BCS FIXRK ;GET INDEX OF 0,1, OR 2 ASL A TAY LDA HIREGTB,Y STA TEMP1 INY LDA HIREGTB,Y STA TEMP1+1 BNE GETINDX LOWRK SEC SBC #1 ASL A TAY LDA LOWREGTB,Y STA TEMP1 INY LDA LOWREGTB,Y STA TEMP1+1 BNE GETINDX NOTINV SEC SBC #1 TAY LDA SHPNUTB,Y CMP #L(NOTFOSH) ;SEE IF ENEMY TO BE BORN IS A FORM BNE NFIMPTY ;SHIP JMP FIEMPTY NFIMPTY TAX ;SHIP NUMBER IS INDEX FOR FORM SHIP FOEMPTY LDY #6 LDA (TEMP2),Y ;NEXT LOOKUP AND STORE REST OF DATA STA MODE,X DEY LDA (TEMP2),Y STA MH,X DEY LDA (TEMP2),Y STA ML,X DEY LDA (TEMP2),Y STA ANGLE,X DEY LDA (TEMP2),Y STA YCORD,X DEY LDA (TEMP2),Y STA XCORD,X DEY LDA #0 STA MOMENTUM,X ;GIVE ZERO MOMENTUM TO START LDA (TEMP2),Y STA TYPE,X BEQ NOAIR CMP #6 BEQ NOAIR LDA CHALSTG ;SEE IF CHALLENGING STAGE BEQ CHKEXTRA ;IF NOT, CHECK NORMALLY BNE NOEXTRA ;IF SO, NO EXTRAS CHKEXTRA LDA HEROREAP ;SEE IF HERO MUST REAPPEAR BEQ CHECKRAK BPL CHKCPHER LDA #0 STA HEROREAP ;RESET REGISTER BEQ NOAIR ;DONT CHANGE NUMFLY CHKCPHER LDA SHPERWAV ;SEE IF READY FOR EXTRA CMP #8 BNE CHECKRAK ;DO NORMAL PROCESSING DEC HEROREAP BNE CHECKRAK LDA #0 STA TYPE,X ;BOOT EXTRA MAN JUST CREATED LDA #L(SHTY52) STA TEMP2 LDA #H(SHTY52) STA TEMP2+1 LDA #$FF STA HEROREAP LDX #40 BNE FOEMPTY CHECKRAK LDA RACK CMP #3 ;SEE IF EXTRA MAN RACK BCS CHECKFST NOEXTRA LDA SHPERWAV CMP #8 BMI GIVEXTRA LDA #0 STA TYPE,X BEQ NOAIR CHECKFST CMP #10 BMI GIVEXTRA ;3