**************************************************************************** **************************************************************************** ** ** Platinum Edition (control code for formation enemies) ** ** This software is in the public domain. There is no warranty. ** ** by Patrick Davidson (pad@calc.org, http://pad.calc.org/) ** ** Last updated July 9, 2001 ** **************************************************************************** **************************************************************************** GETX MACRO move.w pattern_x(a5),\1 add.w (a3),\1 ENDM GETY MACRO move.w pattern_y(a5),\1 add.w 2(a3),\1 ENDM ;************** SPINNING ENEMY ENTRY ROUTINE dc.w 31337 C_SPIN_ENTRY: bsr.s spin_pic_shoot subq.w #2,e_y(a4) GETY d0 addq.w #8,d0 cmp.w e_y(a4),d0 blt.s war btst #7,e_x+1(a4) beq.s csegr csegl: move.w #SPIN_ENTRY_UPLEFT,(a4) rts csegr: move.w #SPIN_ENTRY_UPRIGHT,(a4) war: rts ETYPE SPIN_ENTRY dc.w 31337 C_SPIN_ENTRY_UPLEFT: bsr.s spin_pic_shoot subq.w #2,e_y(a4) subq.w #1,e_x(a4) GETY d0 cmp.w e_y(a4),d0 blt.s war move.w #SPIN_ENTRY_LEFT,(a4) rts ETYPE SPIN_ENTRY_UPLEFT dc.w 31337 C_SPIN_ENTRY_UPRIGHT: bsr.s spin_pic_shoot subq.w #2,e_y(a4) addq.w #1,e_x(a4) GETY d0 cmp.w e_y(a4),d0 blt.s war move.w #SPIN_ENTRY_RIGHT,(a4) rts ETYPE SPIN_ENTRY_UPRIGHT ;************** SPINNING ENEMY STANDARD ROUTINE spin_pic_shoot: moveq #90,d0 spin_pic_shoot_2: btst #0,d7 beq.s spin_pic bsr random tst.w d0 bne.s spin_pic bsr fire_enemy_cannon_top spin_pic: move.w e_misc(a4),d1 move.w level_timer(a5),d2 and.w #3,d2 bne.s nr add.w d1,e_image(a4) move.w e_image(a4),d0 lea image_table(pc),a0 add.w d0,a0 cmp.w #-1,(a0) bne.s nr add.w d1,d1 add.w d1,d1 sub.w d1,e_image(a4) nr: rts C_FORM_SPIN3: moveq #50,d0 bra.s sm C_FORM_SPIN2: moveq #53,d0 bra.s sm C_FORM_SPIN1: moveq #85,d0 sm: bsr spin_pic_shoot cmp.w #7,enemies_remaining(a5) bge.s nc move.w #SPINNERM,(a4) move.w #-1,e_data(a4) nc: GETX d0 move.w d0,e_x(a4) GETY d0 move.w d0,e_y(a4) rts ETYPE FORM_SPIN1 ETYPE FORM_SPIN2 ETYPE FORM_SPIN3 ;************** FINAL SPINNING ENTRY CODE dc.w 31337 C_SPIN_ENTRY_LEFT: bsr.s spin_pic_shoot GETY d0 move.w d0,e_y(a4) subq.w #2,e_x(a4) GETX d0 cmp.w e_x(a4),d0 blt.s war2 move.w e_data(a4),(a4) war2: rts ETYPE SPIN_ENTRY_LEFT dc.w 31337 C_SPIN_ENTRY_RIGHT: bsr spin_pic_shoot GETY d0 move.w d0,e_y(a4) addq.w #2,e_x(a4) GETX d0 cmp.w e_x(a4),d0 bgt.s war2 move.w e_data(a4),(a4) rts ETYPE SPIN_ENTRY_RIGHT ;************** ENEMY ENTERING FORMATION BY PLAIN PATH, FIRING dc.w 31337 C_PLAIN_ENTER: addq.w #2,e_y(a4) cmp.w #36,level_timer(a5) bne.s arrow_drop move.w e_data(a4),(a4) move.w #RECTANGLE,pattern_type(a5) rts ETYPE PLAIN_ENTER ;************** ARROW ENEMY FOLLOWING FORMATION C_FORM_ARROW: GETX d0 move.w d0,e_x(a4) GETY d0 move.w d0,e_y(a4) arrow_drop: btst #0,d7 beq.s cfar moveq #75,d0 bsr random tst.w d0 bne.s cfar bra drop_arrow cfar: rts ETYPE FORM_ARROW ;************** ENEMY ENTERING FORMATION BY SIMPLE PATH dc.w 31337 C_SIMPLE_ENTER: subq.w #1,e_x(a4) cmp.w #110,(a3) bge.s cse_rightside addq.w #2,e_x(a4) cse_rightside: addq.w #1,e_y(a4) cmp.w #64,level_timer(a5) bne.s cser move.w e_data(a4),(a4) move.w #RECTANGLE,pattern_type(a5) cser: rts ETYPE SIMPLE_ENTER ;************** ENEMY ENTERING FORMATION BY U PATH dc.w 31337 C_U_ENTER: addq.w #1,e_y(a4) btst #0,cycle_counter+3(a5) beq.s skip1 addq.w #1,e_y(a4) skip1: cmp.w #78,e_y(a4) blt.s cuer move.w #U_ENTER_DOWNRIGHT,(a4) btst #7,e_x+1(a4) beq.s cuer move.w #U_ENTER_DOWNLEFT,(a4) cuer: rts ETYPE U_ENTER dc.w 31337 C_U_ENTER_DOWNRIGHT: addq.w #1,e_y(a4) addq.w #1,e_x(a4) cmp.w #88,e_y(a4) blt.s cuer move.w #U_ENTER_RIGHT,(a4) rts ETYPE U_ENTER_DOWNRIGHT dc.w 31337 C_U_ENTER_DOWNLEFT: addq.w #1,e_y(a4) subq.w #1,e_x(a4) cmp.w #88,e_y(a4) blt.s cuer move.w #U_ENTER_LEFT,(a4) rts ETYPE U_ENTER_DOWNLEFT dc.w 31337 C_U_ENTER_RIGHT: addq.w #1,e_x(a4) GETX d0 subq.w #8,d0 cmp.w e_x(a4),d0 bgt.s cuer move.w #U_ENTER_UPRIGHT,(a4) rts ETYPE U_ENTER_RIGHT dc.w 31337 C_U_ENTER_LEFT: subq.w #1,e_x(a4) GETX d0 addq.w #8,d0 cmp.w e_x(a4),d0 blt.s cuer move.w #U_ENTER_UPRIGHT,(a4) rts ETYPE U_ENTER_LEFT dc.w 31337 C_U_ENTER_UPRIGHT: subq.w #1,e_y(a4) addq.w #1,e_x(a4) GETX d0 cmp.w e_x(a4),d0 bgt.s cuer2 move.w #U_ENTER_UP,(a4) rts ETYPE U_ENTER_UPRIGHT dc.w 31337 C_U_ENTER_UPLEFT: subq.w #1,e_y(a4) subq.w #1,e_x(a4) GETX d0 cmp.w e_x(a4),d0 blt.s cuer2 move.w #U_ENTER_UP,(a4) rts ETYPE U_ENTER_UPLEFT C_U_ENTER_UP: GETX d0 move.w d0,e_x(a4) subq.w #1,e_y(a4) GETY d0 cmp.w e_y(a4),d0 blt.s cuer2 move.w e_data(a4),(a4) cuer2: rts ETYPE U_ENTER_UP ;************** CROSS ENEMY FOLLOWING FORMATION C_FORM_CROSS: GETX d0 move.w d0,e_x(a4) GETY d0 move.w d0,e_y(a4) btst #0,d7 beq.s csifr moveq #100,d0 bsr random tst.w d0 bne.s csifr bra drop_guided csifr: rts ETYPE FORM_CROSS ;************** STANDARD ENEMY FOLLOWING FORMATION C_FORM_STANDARD: GETX d0 move.w d0,e_x(a4) GETY d0 move.w d0,e_y(a4) btst #0,d7 beq.s csifr moveq #62,d0 bsr random tst.w d0 bne.s csifr bra drop_bomb rts ETYPE FORM_STANDARD ;************** TOUGHER ENEMY FOLLOWING FORMATION C_FORM_MODIFIED: GETX d0 move.w d0,e_x(a4) GETY d0 move.w d0,e_y(a4) btst #0,d7 beq.s csifr moveq #52,d0 bsr random tst.w d0 bne.s csifr bra shoot_missile rts ETYPE FORM_MODIFIED