revolution-x/GXHELI2.ASM

2676 lines
52 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.MLIB "GXMACS.LIB"
.FILE "GXHELI2.ASM"
.TITLE " <<< REVOLUTION X -- HELICOPTER ROUTINES PART 2 >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
.INCLUDE "GXENEMY.INC"
.INCLUDE "GXHELI.H"
.INCLUDE "GXHELI2.H"
.INCLUDE "GXCONTRL.H"
.INCLUDE "IMGTBL.GLO"
.TEXT
* SYMBOLS IN HERE
.DEF COPTER_ATTACK_1, COPTER_ATTACK_2, COPTER_ATTACK_3, COPTER_ATTACK_4, COPTER_ATTACK_5, COPTER_ATTACK_6, COPTER_ATTACK_FINAL
.DEF COPTER_APPROACH_SND_PROC, COPTER_FLY_1, COPTER_FLY_2, COPTER_FLY_2_1
.DEF COPTER_INTRO_2
**************************************************************************
* *
* COPTER_ON - START COPTER ANIMATIONS AND INSERT OBJECTS *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* *
**************************************************************************
COPTER_ON
MOVE @COPTER_OBJ,A14,L
CMP A8,A14
JRNE CON_SIDE ;BR=SIDE COPTER
MOVI FRONT_ANIMS,A2
MOVK GEAR,A1 ;FRONT BLADES
JRUC CON_STRTANIMS
CON_SIDE
MOVI SIDE_ANIMS,A2
MOVK SIDE_GEAR,A1 ;SIDE BLADES
CON_STRTANIMS
CALLA FINDPART
.if DEBUG
LOCKON Z
.else
JRZ CON_INSERT
.endif
MOVI BLADE_ANIM,A1
CALLA STRTANIM ;START BLADE ANIMATION
CON_ANIM_LUPE
MOVE *A2+,A1,W
JRZ CON_INSERT ;BR=NO MORE ANIMS, INSERT OBJECT
CALLA FINDPART
.if DEBUG
LOCKON Z
.else
JRZ CON_INSERT
.endif
MOVE A8,A3
MOVE A0,A8
MOVE *A0(ONORMAL_PAL),A0,L
JRZ CON_NOPAL ;BR=DON'T CHANGE DA PALETTE
CALLA CHANGE_PAL
CON_NOPAL
MOVE A8,A0
MOVE A3,A8
MOVE *A0(OATTACKANIM),A1,L
.if DEBUG
LOCKON Z
.else
JRZ CON_INSERT
.endif
CALLA STRTANIM ;START DA ANIMATION
JRUC CON_ANIM_LUPE
CON_INSERT
MOVE A8,A0
MOVI 02000200H,A14 ;OFF SCREEN
CON_OFF_LUPE
MOVE A14,*A0(ODAG),L
MOVE *A0(OPARTS),A0,L
JRNZ CON_OFF_LUPE ;BR=STILL MORE PARTS
JAUC INSERT_OBJ ;INSERT THE OBJECT
FRONT_ANIMS
.WORD LEFT_GUN, RGHT_GUN, LEFT_ROCKET, RGHT_ROCKET, BELLY_GUN, 0
SIDE_ANIMS
; .WORD GAT, BELLY, 0
.WORD 2, 4, 0
; .WORD GAT, MISSLE, BELLY, 0
; .WORD 2, 3, 4, 0
**************************************************************************
* *
* COPTER_OFF - STOP AND PULL COPTER ANIMATIONS AND OBJECTS *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* *
**************************************************************************
COPTER_OFF
PUSH A8
CLR A14
MOVE A14,*A8(OCOMMAND),W ;CLEAR COMMANDS
CALLA STOPOBJ
MOVE @COPTER_OBJ,A14,L
CMP A8,A14
JRNE COF_SIDE ;BR=SIDE COPTER
MOVI FRONT_ANIMS,A2
MOVK GEAR,A1 ;FRONT BLADES
JRUC COF_PULLANIMS
COF_SIDE
MOVI SIDE_ANIMS,A2
MOVK SIDE_GEAR,A1 ;SIDE BLADES
COF_PULLANIMS
CALLA FINDPART
.if DEBUG
LOCKON Z
.else
JRZ COF_PULL_LUPE
.endif
CALLA PULLANIM ;PULL BLADE ANIMATION
COF_PULL_LUPE
MOVE *A2+,A1,W
JRZ COF_PULL_OBJ ;BR=NO MORE ANIMS, PULL OBJECT
CALLA FINDPART
.if DEBUG
LOCKON Z
.else
JRZ COF_PULL_LUPE
.endif
MOVE *A0(AnimScr),A14,L
MOVE *A0(ODAMANIM),A3,L
CMP A3,A14
JRNE COF_PULL_ANIM ;BR=NOT IN DAMAGE ANIMATION
CLR A14
MOVE A14,*A0(AnimRetScr),L ;FLAG TO PULL ANIMATION
JRUC COF_CHECK_FLASH
COF_PULL_ANIM
CALLA PULLANIM ;PULL DA ANIMATION
COF_CHECK_FLASH
MOVE A0,A8
CALLA DELETE_FLASH ;DELETE GUN FLASH
JRUC COF_PULL_LUPE
COF_PULL_OBJ
PULLQ A8
CALLA PULL_OBJ
RETS
**************************************************************************
* *
* COPTER_APPROACH_SND_PROC - FADE UP COPTER SOUND DURING APPROACH *
* *
**************************************************************************
COPTER_APPROACH_SND_PROC
SOUND0 SND_COPTER_FULL
CLR A8 ;FULL UP TO HALF
MOVI [127,0],A9
MOVK 3,A10
MOVI 60*2,A11
JAUC TRACK_FADE_PROC
**************************************************************************
* *
* COPTER_INTRO_1 *
* *
**************************************************************************
COPTER_INTRO_1
MOVI 031CA1B4H,A14 ;FLY TO CENTER SCREEN
MOVE A14,*A8(OXDEST),L
MOVI -0223A5D4H,A14
MOVE A14,*A8(OYDEST),L
MOVI 0189C7H,A14
MOVE A14,*A8(OZDEST),L
MOVI 50,A14
MOVE A14,*A8(OFLYTIME),W
MOVK M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
MOVE A8,A3 ;FADE FROM HALF TO FULL
CLR A8
MOVI [255,127],A9
MOVK 3,A10
MOVI 40,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL AT CENTER
MOVI 011598H,A14
MOVE A14,*A8(OHZWPOS),L
MOVK M_CHOVER,A14
MOVE A14,*A8(OCOMMAND),W
SLEEP 30
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
SOUND1 SND_STEP_OUT ;PILOT SPEECH
MOVI 60*2,A9
MOVI 01AAC7H,A10
CI1_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
; MOVK 3,A0
; CALLA SET_TRACK_VOLUME_Z
MOVE *A8(OZVAL),A14,L
CMP A10,A14
JRLT CI1_DEC
MOVI M_CHITALL|M_CHOVER|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
CI1_DEC
DSJ A9,CI1_WAIT1
CALLA VOLUME_AT_Z
MOVE A1,A9
ORI [63,0],A9
MOVE A8,A3 ;FADE FROM CURRENT Z TO QUARTER
CLR A8
MOVK 3,A10
MOVI 60,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
MOVE *A8(OXVAL),*A8(OXDEST),L
MOVI -04400000H,A14
MOVE A14,*A8(OYDEST),L
MOVI 022000H,A14
MOVE A14,*A8(OZDEST),L
MOVI 60,A14
MOVE A14,*A8(OFLYTIME),W
MOVI M_CFLYING|M_CACCTOPT,A14
MOVE A14,*A8(OCOMMAND),W
MOVK BELLY_GUN,A1
CALLA FINDPART
LOCKON Z
MOVE A0,A9
CI1_WAIT2
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE *A8(OCOMMAND),A14,W
BTST B_CACCTOPT,A14
JRNZ CI1_WAIT2 ;BR=NOT THERE YET!
MOVE *A9(OFLAGS),A14,W
BTST B_OFSCRN,A14
JRZ CI1_WAIT2 ;BR=BELLY GUN STILL ON DA SCREEN
CALLR COPTER_OFF
MOVK 1,A14
MOVE A14,@SCROLL_FLAG,L ;FLAG OFF SCREEN
DIE
**************************************************************************
* *
* COPTER_INTRO_2 *
* *
**************************************************************************
COPTER_INTRO_2
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
CALLR COPTER_ON
MOVE A8,A3 ;FADE UP FROM QUARTER
CLR A8
MOVI [170,63],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
MOVI 039189B4H,A14 ;FLY TO DOWN THE SCREEN
MOVE A14,*A8(OXDEST),L
MOVI -02800000H,A14
MOVE A14,*A8(OYDEST),L
MOVI 02742FH,A14
MOVE A14,*A8(OZDEST),L
MOVI 60,A14
MOVE A14,*A8(OFLYTIME),W
MOVK M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
JSRP COPTER_TO_POINT
SOUND1 SND_LAND_OR ;PILOT SPEECH
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVI 020000H,A14
MOVE A14,*A8(OHZWPOS),L
MOVI M_CHITALL|M_CHOVER|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
CI2_WAIT ;HOVER A BIT
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVI 0A000H,A0
MOVI 06000H,A1
MOVI 0100H,A2
CALLR DO_HOVER ;HOVER IN THE UNIVERSE
MOVE @XBASE,A14,L
CMPI 0347F1B4H,A14
JRGT CI2_WAIT ;BR=NOT FAR ENOUGH IN X
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVK M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
CLR A14
MOVE A14,*A8(OXVEL),L
MOVE A14,*A8(OYVEL),L
MOVE A14,*A8(OZVEL),L
MOVI -028410B2H,A14 ;FLY UP TO THE LEFT
MOVE A14,*A8(OXDEST),L
MOVI -01000000H,A14
MOVE A14,*A8(OYDEST),L
MOVI 020000H,A14
MOVE A14,*A8(OZDEST),L
MOVI 180,A14
MOVE A14,*A8(OFLYTIME),W
JSRP COPTER_ACCEL_TO_WORLD_POINT
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
CALLR COPTER_OFF
CLR A8 ;FADE DOWN TO OFF
MOVI [0,170],A9
MOVK 3,A10
MOVI 60,A11
JAUC TRACK_FADE_PROC
**************************************************************************
* *
* COPTER_FLY_1 *
* *
**************************************************************************
COPTER_FLY_1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
SOUND0 SND_COPTER_FULL
MOVE A8,A3 ;FADE UP TO A QUARTER
CLR A8
MOVI [63,0],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
MOVI -0D800000H,A1
MOVI -04000000H,A2
MOVI 0A6000H,A3
CALLA SET_ANIPU
CALLR COPTER_ON
MOVI M_CFLYING,A14
MOVE A14,*A8(OCOMMAND),W
MOVI -089DDDH,A14 ;FLY DOWN TO THE LEFT
MOVE A14,*A8(OXVEL),L
MOVI 038E38H,A14
MOVE A14,*A8(OYVEL),L
MOVI -012DA0C43H,A9
CF1_WAIT
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVE *A8(OXVAL),A14,L
CMP A9,A14
JRGE CF1_WAIT ;BR=NOT BEHIND THAT BUILDING YET
CALLR COPTER_OFF
DIE
**************************************************************************
* *
* COPTER_FLY_2 *
* *
**************************************************************************
FLY2_MISSLETIME_TABLE
.WORD 45, 45, 45
COPTER_FLY_2
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVK M_FLIPH,A0
CALLA TOGGLE_FLPS
MOVI -014AEFCFAH,A1
MOVI -011898C3H,A2
MOVI 0C2800H,A3
CALLA SET_ANIPU ;PLACE OFF SCREEN
CALLR COPTER_ON
SOUND0 SND_COPTER_FULL
MOVE A8,A3 ;FADE UP TO FULL
CLR A8
MOVK 3,A10
MOVI 60,A11
CREATE PID_IND,TRACK_FADE_IN_FULL_PROC
MOVE A3,A8
MOVI M_CFLYING,A14
MOVE A14,*A8(OCOMMAND),W
MOVI 0F0000H,A14 ;FLY UP
MOVE A14,*A8(OXVEL),L
MOVI -028000H,A14
MOVE A14,*A8(OYVEL),L
MOVI -0F00000H,A9
CF2_WAIT1
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVE *A8(OXVAL),A1,L
MOVE @XBASE,A14,L
SUB A14,A1
CMP A9,A1
JRLT CF2_WAIT1 ;BR=NOT MID SCREEN YET
MOVI 0200H,A14 ;FLY AWAY (SHRINK)
MOVE A14,*A8(OZVEL),L
MOVI 01000H,A9 ;X DECELERATION
MOVI 01000H,A10 ;Y DECELERATION
CF2_WAIT2
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
CLR A0
MOVE @XSCROLL,A1,L
MOVE *A8(OXVEL),A2,L
CMP A1,A2
JREQ CF2_CHECK_Y ;BR=SAME VELOCITY
JRLT CF2_USE_XSCROLL ;BR=TOO SLOW
SUB A9,A2 ;SLOW DOWN VELOCITY
INC A0 ;FLAG X CHANGE
JRUC CF2_SAVE_XVEL
CF2_USE_XSCROLL
MOVE A1,A2 ;USE SCROLLING VELOCITY
CF2_SAVE_XVEL
MOVE A2,*A8(OXVEL),L
CF2_CHECK_Y
MOVE @YSCROLL,A1,L
NEG A1
MOVE *A8(OYVEL),A2,L
CMP A1,A2
JREQ CF2_CHECK_IF_DONE ;BR=SAME VELOCITY
JRGT CF2_USE_YSCROLL ;BR=TOO SLOW
ADD A10,A2 ;SLOW DOWN VELOCITY
INC A0 ;FLAG Y CHANGE
JRUC CF2_SAVE_YVEL
CF2_USE_YSCROLL
MOVE A1,A2 ;USE SCROLLING VELOCITY
CF2_SAVE_YVEL
MOVE A2,*A8(OYVEL),L
CF2_CHECK_IF_DONE
MOVE A0,A0
JRNZ CF2_WAIT2 ;BR=MADE CHANGES, NOT DONE YET
CLR A14
MOVE A14,*A8(OZVEL),L ;STOP Z MOTION
SOUND1 SND_YOU_ARE_ILL
MOVK 1,A14
MOVE A14,*A8(OXDEST),L
MOVI 019EB6H,A14
MOVE A14,*A8(OHZWPOS),L
CLR A7 ;DEFAULT NO HOVER TIME
CF2_WAIT3
MOVI XSCROLL,A14
MMFM A14,A9,A10,A11 ;A11=XSCROLL, A10=YSCROLL, A9=ZSCROLL
PUSHP A7
SLEEP 1
PULLPQ A7
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVE A7,A7
JRZ CF2_ZIP ;BR=NO HOVER TIME
;CF2_PLAYER_LUPE
; MOVE *A2(POBJ),A4,L ;IS THE PLAYER ALIVE?
; JRZ CF2_NEXT_PLAYER ;BR = NO
; MOVE *A2(PCURSORXY),A4,L
;
;
; CMPXY A0,A4
; JRXLT CF2_NEXT_PLAYER ;BR=X ABOVE
; JRYLT CF2_NEXT_PLAYER ;BR=Y LEFT
;
; CMPXY A1,A4
; JRXGT CF2_NEXT_PLAYER ;BR=X BELOW
; JRYGT CF2_NEXT_PLAYER ;BR=Y RIGHT
;
;;SOMEONE'S TRACKING DA COPTER
;
;CF2_NEXT_PLAYER
; ADDI PDSIZE,A2 ;NEXT PLAYER DATA AREA
; DEC A7
; JRNN CF2_PLAYER_LUPE ;BR=NO MORE PLAYERS
DEC A7 ;DECREASE HOVER TIME
MOVI 010000H,A0
MOVI 06000H,A1
MOVI 0100H,A2
CALLR DO_HOVER_WORLD ;HOVER IN THE WORLD
JRUC CF2_CHECK
CF2_ZIP
; MOVK 5-1,A0
MOVK 3-1,A0 ;FIND NEXT DEST TO ZIP TO
CALLA RAND0
MOVE *A8(OXDEST),A1,L
ABS A1
SLL 28,A1
SRL 28,A1 ;CURRENT POSITION INDEX
CMP A1,A0
JRLT CF2_GET_WORLD_X ;BR=DON'T ADJUST INDEX
INC A0 ;PICK THE NEXT ONE
CF2_GET_WORLD_X
SUB A0,A1
SLL 5,A0 ;TRANSLATE TO TABLE OFFSET
ADDI COPTER_WORLD_X_TABLE,A0
MOVE *A0(0),*A8(OXDEST),L
MOVK 30,A14
ABS A1 ;INDEX DELTA
; CMPK 3,A1
; JRNE CF2_CALC_TIME ;BR=DO THE TIME SHIFT CALC
; MOVI 45,A14
;CF2_CALC_TIME
SRL 1,A1
SLL A1,A14 ;TOTAL TIME COMPUTED
CF2_SET_TIME
MOVE A14,A1
MOVE @XSCROLL,A2,L
MPYU A2,A1 ;DISTANCE COVERED AT CONSTANT VELOCITY
MOVE @XBASE,A2,L
ADD A2,A1 ;POSITION REACHED
; CMPI -06000000H,A1
CMPI 01D00000H,A1
JRLT CF2_FLY ;BR=WE WILL NOT PASS THIS X
SLL 1,A14
MOVE A14,A7 ;USE THIS AS HOVER TIME
JRUC CF2_CHECK
CF2_FLY
MOVE A14,*A8(OFLYTIME),W
; MOVE *A8(OYVAL),A0,L
; MOVE @YBASE,A14,L
; ADD A14,A0
; MOVI -0800000H,A1
; MOVI -0657CD5H,A0
; CALLA RANGERND
MOVI -0800000H,A0
MOVE A0,*A8(OYDEST),L
; MOVE *A8(OZVAL),A0,L
; MOVE @ZBASE,A14,L
; SUB A14,A0
; MOVI 019EB6H,A1
; MOVI 029EB6H,A0
; CALLA RANGERND
MOVI 019EB6H,A0
MOVE A0,*A8(OZDEST),L
CLR A1 ;CHOOSE HOVER TIME AFTER FLIGHT
MOVI 60,A0
CALLA RANGERND
MOVE A0,A7
MOVI XSCROLL,A14
MMFM A14,A1,A2,A3 ;A3=XSCROLL, A2=YSCROLL, A1=ZSCROLL
MOVE A3,*A8(OXVEL),L
NEG A2
MOVE A2,*A8(OYVEL),L
MOVE A1,*A8(OZVEL),L
MOVI FLY2_MISSLETIME_TABLE,A14
MOVE A14,@MISSLETIME_TABLE,L
MOVI M_CGUNS|M_CMISSLE|M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
PUSHP A7
JSRP COPTER_TO_WORLD_POINT
PULLPQ A7
MOVI M_CGUNS|M_CMISSLE|M_CHOVER,A14
MOVE A14,*A8(OCOMMAND),W
CF2_CHECK
MOVE @XBASE,A14,L
CMPI 01D00000H,A14
; CMPI -06000000H,A14
JRLT CF2_WAIT3 ;BR=NOT AT THAT X POSITION YET
; MOVI M_CGUNS,A14
; MOVE A14,*A8(OCOMMAND),W
;CF2_WAIT3_1
; MOVE @XSCROLL,A9,L
; MOVE @YSCROLL,A10,L
; MOVE @ZSCROLL,A11,L
;
; SLEEP 1
;
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; MOVI 010000H,A0
; MOVI 06000H,A1
; MOVI 0100H,A2
; CALLR DO_HOVER_WORLD
;
;CF2_CHECK3_1
; MOVE @XBASE,A14,L
; CMPI 01D00000H,A14
; JRLT CF2_WAIT3_1 ;BR=NOT AT THAT X POSITION YET
MOVE @XSCROLL,A14,L ;FLY WITH SCROLL
MOVE A14,*A8(OXVEL),L
MOVE @ZSCROLL,A14,L
MOVE A14,*A8(OZVEL),L
MOVI M_CFLYING,A14
; CLR A14
MOVE A14,*A8(OCOMMAND),W
MOVI -080000H,A9 ;DESTINATION Y VELOCITY
MOVI 08000H,A10 ;Y DECELERATION
CLR A11 ;STARTING Y VELOCITY
CF2_WAIT4
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
SUB A10,A11
MOVE A11,*A8(OYVEL),L
CMP A9,A11
JRGT CF2_WAIT4 ;BR=NOT AT DESTINATION VELOCITY
; MOVI -035C0000H,A9
MOVK SIDE_BELLY_GUN,A1 ;BELLY GUN
CALLA FINDPART
LOCKON Z
MOVE A0,A9
CF2_WAIT5
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVE *A9(OFLAGS),A14,W
BTST B_OFSCRN,A14
JRZ CF2_WAIT5
; MOVE *A8(OYVAL),A14,L
; CMP A9,A14
; JRGT CF2_WAIT5 ;BR=NOT AT THAT Y POSITION YET
CALLR COPTER_OFF
CALLA VOLUME_AT_Z
MOVE A1,A9
CLR A8 ;FADE DOWN TO OFF
MOVK 3,A10
MOVI 45,A11
JAUC TRACK_FADE_PROC
COPTER_WORLD_X_TABLE
; .LONG -0143FE30H,-0A1FF11H,2,0A1FF13H,0143FE34H
.LONG -0A61C30H,-1EBEE1H,063AF12H
**************************************************************************
* *
* COPTER_FLY_2_1 *
* *
**************************************************************************
COPTER_FLY_2_1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVI 0D000000H,A1
MOVI -02800000H,A2
; MOVI 0EB000H,A3
MOVI 0FA102H,A3
CALLA SET_ANIPU
CALLR COPTER_ON
MOVI M_CFLYING,A14
MOVE A14,*A8(OCOMMAND),W
; MOVE A3,A6
; MOVE A2,A4
; MOVE A1,A2
;
; MOVI 014B00000H,A1
; MOVI -01270000H,A3
; MOVI 010A102H,A5
;
; MOVI 240,A7
;
;* A1 = PNT. B X POSITION (32 BITS) *
;* A2 = PNT. A X POSITION (32 BITS) *
;* A3 = PNT. B Y POSITION (32 BITS) *
;* A4 = PNT. A Y POSITION (32 BITS) *
;* A5 = PNT. B Z POSITION (32 BITS) *
;* A6 = PNT. A Z POSITION (32 BITS) *
;* A7 = DURATION(# OF TICKS TO GET FROM A TO B) *
;
; CALLA SLINEVEL_3D
;
; MOVE A1,*A8(OXVEL),L
; MOVE A3,*A8(OYVEL),L
; MOVE A5,*A8(OZVEL),L
MOVI 083333H,A14 ;FLY DOWN TO THE LEFT
MOVE A14,*A8(OXVEL),L
MOVI 017000H,A14
MOVE A14,*A8(OYVEL),L
; MOVI 0212H,A14
MOVI 0111H,A14
MOVE A14,*A8(OZVEL),L
CALLA VOLUME_AT_Z
MOVE A1,A9
SLL 16,A9
ORI 63,A9
MOVE A8,A3 ;FADE DOWN TO A QUARTER
CLR A8
MOVK 3,A10
MOVI 10,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
SLEEP 11
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVI 014B00000H,A9
CF21_WAIT
SLEEP 1
MOVE @COPTER_OBJ2,A8,L
JAZ SUCIDE
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
MOVE *A8(OXVAL),A14,L
CMP A9,A14
JRLT CF21_WAIT ;BR=NOT FAR ENOUGH YET
CALLA VOLUME_AT_Z
MOVE A1,A9
PUSH A8
CLR A8 ;FADE DOWN TO OFF
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
PULLQ A8
CLR A14
MOVE A14,@COPTER_OBJ2,L
MOVE A14,*A8(OPLINK),L
CALLA DELETE_OBJ ;BYE, BYE, SIDE COPTER!
DIE
;**************************************************************************
;* *
;* COPTER_FLY_3 *
;* *
;**************************************************************************
;
;COPTER_FLY_3
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; MOVI 015770000H,A1
; MOVI -015647BAH,A2
; MOVI 011B000H,A3
; CALLA SET_ANIPU
;
; CALLR COPTER_ON
;
; SOUND0 SND_COPTER_FULL
;
; CALLA VOLUME_AT_Z
; MOVE A1,A9
; SLL 16,A9
;
; MOVE A8,A3 ;FADE UP FROM OFF
; CLR A8
; MOVK 3,A10
; MOVI 30,A11
; CREATE PID_IND,TRACK_FADE_PROC
; MOVE A3,A8
;
; MOVI 070000H,A9 ;FLY TO THE RIGHT
; MOVE A9,*A8(OXVEL),L
;
;; MOVI -0200000H,A9
;; MOVI 08000H,A10
;;CF3_WAIT1
;; SLEEP 1
;;
;; CLR A0
;; MOVE A10,A1
;; CALLR DO_HOVER
;;
;; MOVE *A8(OXVAL),A1,L
;; MOVE @XBASE,A14,L
;; SUB A14,A1
;; CMP A9,A1
;; JRLT CF3_WAIT1
;
;; MOVI 069000H,A9
;; MOVI 01000H,A10
;;CF3_WAIT2
;; SLEEP 1
;;
;; CLR A0
;; MOVI 08000H,A1
;; CALLR DO_HOVER
;;
;; SUB A10,A11
;; MOVE A11,*A8(OXVEL),L
;;
;; CMP A9,A11
;; JRGT CF3_WAIT2
;
;; MOVK 5,A14 ;3 MISSLES
;; MOVK 2,A14 ;6 MISSLES
;; MOVB A14,*A8(OMISSLETIME)
;
;; MOVI M_CFLYING|M_CMISSLE,A14
; MOVI M_CFLYING,A14
; MOVE A14,*A8(OCOMMAND),W
;
; MOVI 01797BD57H,A9
;CF3_WAIT3
; MOVI XSCROLL,A14
; MMFM A14,A10,A11 ;A11=XSCROLL, A10=YSCROLL
;
; SLEEP 1
;
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; MOVI 010000H,A0
; MOVI 06000H,A1
; CLR A2
; CALLR DO_HOVER_WORLD
;
; MOVE *A8(OXVAL),A14,L
; CMPI 016F1C000H,A14
; JRLT CF3_OTHER_CHECK3 ;BR=NO MISSLES YET
;
; MOVI M_CFLYING|M_CMISSLE,A1
; MOVE A1,*A8(OCOMMAND),W
;
;CF3_OTHER_CHECK3
; CMP A9,A14
; JRLT CF3_WAIT3 ;BR=NOT FAR ENOUGH RIGHT
;
; CLR A14
; MOVE A14,*A8(OYVEL),L
;
; MOVI M_CFLYING,A14
; MOVE A14,*A8(OCOMMAND),W
;
; MOVI 070000H,A9 ;FLY TO THE RIGHT
;
;; MOVI 010000H,A10 ;X ACCELERATION
; MOVI 030F0000H,A11 ;X WORLD DESTINATION
;CF3_WAIT4
; MOVE @YSCROLL,A10,L
;
; SLEEP 1
;
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; CLR A0
; MOVI 06000H,A1
; CLR A2
; CALLR DO_HOVER_WORLD ;HOVER IN WORLD Y
;
; ADDI 010000H,A9
; MOVE A9,*A8(OXVEL),L ;ACCELERATE IN X
;
; MOVE *A8(OXVAL),A1,L
; MOVE @XBASE,A14,L
; SUB A14,A1
; CMP A11,A1
; JRLT CF3_WAIT4 ;BR=NOT THERE YET
;
; CALLR COPTER_OFF
;
; DIE
;
;; CALLA VOLUME_AT_Z
;; MOVE A1,A9
;; ORI [63,0],A9
;;
;; MOVE A8,A3
;; CLR A8
;; MOVK 3,A10
;; MOVI 10,A11
;; CREATE PID_IND,TRACK_FADE_PROC
;; MOVE A3,A8
;;
;; DIE
;
;**************************************************************************
;* *
;* COPTER_FLY_4 *
;* *
;**************************************************************************
;
;COPTER_FLY_4
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; MOVE @XBASE,A1,L
; SUBI 02000000H,A1
; MOVI -015647BAH,A2
; MOVI 011B000H,A3
; CALLA SET_ANIPU
;
; CALLR COPTER_ON
;
;; MOVI M_CFLYING|M_CMISSLE,A14
; MOVI M_CFLYING,A14
; MOVE A14,*A8(OCOMMAND),W
;
;; SOUND0 SND_COPTER_FULL
;;
;; CALLA VOLUME_AT_Z
;; MOVE A1,A9
;; SLL 16,A9
;;
;; MOVE A8,A3
;; CLR A8
;; MOVK 3,A10
;; MOVI 30,A11
;; CREATE PID_IND,TRACK_FADE_PROC
;; MOVE A3,A8
;
; MOVI 0100000H,A9 ;FLY TO THE RIGHT
; MOVE A9,*A8(OXVEL),L
;
;; MOVI 01000H,A10
;; MOVI 070000H,A11
;;CF4_WAIT1
;; SLEEP 1
;;
;; CLR A0
;; MOVE A10,A1
;; CALLR DO_HOVER
;;
;; SUB A10,A9
;; MOVE A9,*A8(OXVEL),L
;; CMP A11,A9
;; JRGT CF4_WAIT1
;
; MOVI 01F01BD57H,A11
;CF4_WAIT2
; MOVE @YSCROLL,A10,L
;
; SLEEP 1
;
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; CLR A0
; MOVI 06000H,A1
; CLR A2
; CALLR DO_HOVER_WORLD ;HOVER IN WORLD Y
;
; MOVE *A8(OXVAL),A14,L
; CMP A11,A14
; JRLT CF4_WAIT2 ;BR=NOT FAR ENOUGH RIGHT
;
; CLR A14
; MOVE A14,*A8(OYVEL),L
;
; MOVI M_CFLYING,A14
; MOVE A14,*A8(OCOMMAND),W
;
;; MOVI 010000H,A10 ;X ACCELERATION
; MOVI 030F0000H,A11 ;X WORLD DESTINATION
;CF4_WAIT3
; MOVE @YSCROLL,A10,L
;
; SLEEP 1
;
; MOVE @COPTER_OBJ2,A8,L
; JAZ SUCIDE
;
; CLR A0
; MOVI 06000H,A1
; CLR A2
; CALLR DO_HOVER_WORLD ;HOVER IN WORLD Y
;
; ADDI 010000H,A9
; MOVE A9,*A8(OXVEL),L ;ACCELERATE IN X
;
; MOVE *A8(OXVAL),A1,L
; MOVE @XBASE,A14,L
; SUB A14,A1
; CMP A11,A1
; JRLT CF4_WAIT3 ;BR=NOT THERE YET
;
; CLR A14
; MOVE A14,@COPTER_OBJ2,L
;
; CALLA DELETE_OBJ ;BYE, BYE, SIDE COPTER!
;
;; CALLR COPTER_OFF
;
; DIE
;
;; CALLA VOLUME_AT_Z
;; MOVE A1,A9
;; ORI [63,0],A9
;;
;; MOVE A8,A3
;; CLR A8
;; MOVK 3,A10
;; MOVI 10,A11
;; CREATE PID_IND,TRACK_FADE_PROC
;; MOVE A3,A8
;;
; DIE
**************************************************************************
* *
* COPTER_ATTACK_1 *
* *
**************************************************************************
COPTER_ATTACK_1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
; MOVI -07960000H,A4 ;CENTER UNIVERSE X
MOVI -078F0000H,A4 ;CENTER UNIVERSE X
MOVI -026D0000H,A1 ;LEFT OFFSET
MOVI 512,A0
CALLA RANDPER
JRC CA1_JUMP1 ;BR=COME FROM THE LEFT
NEG A1 ;RIGHT OFFSET NOW
CA1_JUMP1
ADD A4,A1
MOVI -0281B000H,A2
MOVI 02D000H,A3
MOVE A4,*A8(OXDEST),L ;FLY TO THE CENTER
MOVE A2,*A8(OYDEST),L
MOVE A3,*A8(OZDEST),L
CALLA SET_ANIPU
CALLR COPTER_ON
; MOVI 45,A14
MOVI 60,A14
MOVE A14,*A8(OFLYTIME),W
MOVK M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
MOVE A1,A9
SLL 16,A9
MOVE A8,A3 ;FADE UP FROM OFF
CLR A8
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
MOVI -06480000H,A9
CA1_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @XBASE,A14,L
CMP A9,A14
JRGT CA1_WAIT1 ;BR=DON'T ATTACK YET
MOVE *A8(OCOMMAND),A14,W
ORI M_CHITALL|M_CGUNS,A14
MOVE A14,*A8(OCOMMAND),W
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL AT CENTER
MOVI M_CCHARGE|M_CHITALL|M_CGUNS,A14
MOVE A14,*A8(OCOMMAND),W
DIE
**************************************************************************
* *
* COPTER_ATTACK_2 *
* *
**************************************************************************
COPTER_ATTACK_2
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI -0DA20000H,A1
MOVI -02000000H,A2
MOVI 044000H,A3
; MOVI -0C3158C5H,A14
MOVI -0C320000H,A14
MOVE A14,*A8(OXDEST),L ;FLY TO CENTER SCREEN
MOVE A2,*A8(OYDEST),L
MOVE A3,*A8(OZDEST),L
CALLA SET_ANIPU
CALLR COPTER_ON
; MOVK 30,A14
MOVI 60,A14
MOVE A14,*A8(OFLYTIME),W
MOVK M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
MOVE A1,A9
SLL 16,A9
MOVE A8,A3 ;FADE UP FROM OFF
CLR A8
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
SLEEP 31
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
; MOVI 01000H,A14
; MOVE A14,*A8(OHXACCEL),W
; MOVE A14,*A8(OHYACCEL),W
SOUND1 SND_YOU_HAVE_DIS ;PILOT SPEECH
MOVI 030000H,A9 ;CLOSEST AT THIS ZBASE
; MOVI 010000H,A10 ;HOVER X MAX SPEED
; MOVI 010000H,A11 ;HOVER Y MAX SPEED
CA2_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
; CLR A0
; MOVE A11,A1
; MOVE *A8(OCOMMAND),A14,W
; BTST B_CFLYTOPT,A14
; JRNZ CA2_HOVER1
; MOVE A10,A0
;CA2_HOVER1
; CALLR DO_HOVER
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
MOVE @ZBASE,A14,L
CMP A9,A14
JRLT CA2_WAIT1 ;BR=NOT THERE YET
MOVI M_CHITALL|M_CFLYING|M_CGUNS,A14
MOVE A14,*A8(OCOMMAND),W
MOVI 06E000H,A9 ;FLY TO THIS UNIVERSE Z
MOVI 0800H,A10 ;DESTINATION Z VELOCITY
CLR A11 ;STARTING Z VELOCITY
CA2_WAIT2
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
; MOVI 0100000H,A0
; MOVI 0100000H,A1
; CALLR DO_HOVER
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
CMP A10,A11
JRGE CA2_CHECK2 ;BR=AT DESTINATION Z VELOCITY
ADDI 040H,A11
MOVE A11,*A8(OZVEL),L
CA2_CHECK2
MOVE *A8(OZVAL),A14,L
CMP A9,A14
JRLT CA2_WAIT2 ;BR=NOT AT UNIVERSE Z
; CLR A14
; MOVE A14,*A8(OXVEL),L
; MOVE A14,*A8(OYVEL),L
MOVI M_CFLYING,A14
MOVE A14,*A8(OCOMMAND),W
MOVI -0D400000H,A10 ;DESTINATION UNIVERSE X
MOVI -080000H,A14 ;MOVE TO THE LEFT
MOVE A14,*A8(OXVEL),L
CA2_WAIT3
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
MOVE *A8(OXVAL),A14,L
CMP A10,A14
JRGT CA2_WAIT3 ;BR=NOT AT DESTINATION X
CALLR COPTER_OFF
CALLA VOLUME_AT_Z
MOVE A1,A9
CLR A8 ;FADE DOWN TO OFF
MOVK 3,A10
MOVI 30,A11
JAUC TRACK_FADE_PROC
**************************************************************************
* *
* COPTER_ATTACK_3 *
* *
**************************************************************************
COPTER_ATTACK_3
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI -014CF0000H,A4 ;UNIVERSE X CENTER SCREEN
; MOVI -01400000H,A1
MOVI -01800000H,A1 ;LEFT OFFSET
MOVI 512,A0
CALLA RANDPER
JRC CA3_JUMP1 ;BR=USE THE LEFT OFFSET
NEG A1 ;RIGHT OFFSET
CA3_JUMP1
ADD A4,A1
MOVI -01800000H,A2
MOVI 0A6000H,A3
MOVE A4,*A8(OXDEST),L ;FLY TO CENTER SCREEN
MOVE A2,*A8(OYDEST),L
MOVE A3,*A8(OZDEST),L
CALLA SET_ANIPU
CALLR COPTER_ON
MOVK 30,A14
MOVE A14,*A8(OFLYTIME),W
MOVK M_CFLYTOPT,A14
MOVE A14,*A8(OCOMMAND),W
CALLA VOLUME_AT_Z
MOVE A1,A9
SLL 16,A9
ORI 63,A9
MOVE A8,A3 ;FADE UP TO A QUARTER
CLR A8
MOVK 3,A10
MOVI 10,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
SLEEP 10
CA3_WAIT1
SLEEP 2
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @XBASE,A14,L
CMPI -014B00000H,A14
JRGT CA3_WAIT1 ;BR=DON'T ATTACK YET
MOVE *A8(OCOMMAND),A14,W
ORI M_CHITALL|M_CGUNS,A14
MOVE A14,*A8(OCOMMAND),W
CA3_WAIT2
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
MOVE *A8(OCOMMAND),A14,W
BTST B_CFLYTOPT,A14
JRNZ CA3_WAIT2 ;BR=NOT AT CENTER SCREEN YET
MOVK M_CCHARGE,A14
MOVE A14,*A8(OCOMMAND),W
DIE
**************************************************************************
* *
* COPTER_ATTACK_4 *
* *
**************************************************************************
COPTER_ATTACK_4
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI 0D771F58H,A1 ;HOVER HERE
MOVI -0227082EH,A2
; MOVI 0CF802H,A3
MOVI 0E8000H,A3
CALLA SET_ANIPU
CALLR COPTER_ON
; MOVI 0358B6H,A14
CLR A14
MOVE A14,*A8(OHZWPOS),L
MOVK M_CHOVER,A14
MOVE A14,*A8(OCOMMAND),W
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
MOVE A1,A9
SLL 16,A9
MOVE A8,A3 ;FADE UP TO CURRENT Z
CLR A8
MOVK 3,A10
MOVI 10,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
SLEEP 11
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI M_CHOVER|M_CHITALL|M_CGUNS,A14
MOVE A14,*A8(OCOMMAND),W
MOVI 0C928CH,A9
CA4_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
MOVE @ZBASE,A14,L
CMP A9,A14
JRLT CA4_WAIT1 ;BR=DON'T GO UP YET
MOVI M_CFLYING,A14
MOVE A14,*A8(OCOMMAND),W ;DON'T HOVER ANYMORE
MOVI -080000H,A9 ;DESTINATION Y VELOCITY
MOVI 08000H,A10 ;Y ACCELERATION
CLR A11 ;STARTING Y VELOCITY
CA4_WAIT2
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
SUB A10,A11
MOVE A11,*A8(OYVEL),L
CMP A9,A11
JRGT CA4_WAIT2 ;BR=NOT FAST ENOUGH
CALLA VOLUME_AT_Z
MOVE A1,A9
ORI [63,0],A9
MOVE A8,A3 ;FADE DOWN TO A QUARTER
CLR A8
MOVK 3,A10
MOVI 60,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
; MOVI -04000000H,A9 ;OFF DA SCREEN UNIVERSE Y
MOVK BELLY_GUN,A1
CALLA FINDPART
LOCKON Z
MOVE A0,A9
CA4_WAIT3
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
; MOVE *A8(OYVAL),A14,L
; CMP A9,A14
; JRGT CA4_WAIT3 ;BR=NOT OFF DA SCREEN YET
MOVE *A9(OFLAGS),A14,W
BTST B_OFSCRN,A14
JRZ CA4_WAIT3
CALLR COPTER_OFF
DIE
**************************************************************************
* *
* COPTER_ATTACK_5 *
* *
**************************************************************************
COPTER_ATTACK_5
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI 01B50E557H,A1 ;HOVER HERE
; MOVI -015647BAH,A2
MOVI -010647BAH,A2
MOVI 011B000H,A3
CALLA SET_ANIPU
CALLR COPTER_ON
MOVI 01B2FAH,A14
MOVE A14,*A8(OHZWPOS),L
MOVK M_CHOVER,A14
MOVE A14,*A8(OCOMMAND),W
; SOUND0 SND_COPTER_FULL
;
; CALLA VOLUME_AT_Z
; MOVE A1,A9
; SLL 16,A9
; ORI 63,A9
;
; MOVE A8,A3
; CLR A8
; MOVK 3,A10
; MOVI 10,A11
; CREATE PID_IND,TRACK_FADE_PROC
; MOVE A3,A8
MOVI 01D621557H,A9
CA5_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @XBASE,A14,L
CMP A9,A14
JRLT CA5_WAIT1 ;BR=NOT OFF DA SCREEN YET
CALLR COPTER_OFF
DIE
; CALLA VOLUME_AT_Z
; MOVE A1,A9
; ORI [63,0],A9
;
; CLR A8
; MOVK 3,A10
; MOVI 10,A11
; JAUC TRACK_FADE_PROC
**************************************************************************
* *
* COPTER_ATTACK_6 *
* *
**************************************************************************
COPTER_ATTACK_6
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI 022B6F557H,A1 ;HOVER HERE
; MOVI -015647BAH,A2
MOVI -010647BAH,A2
MOVI 011B000H,A3
CALLA SET_ANIPU
CALLR COPTER_ON
MOVK M_CHOVER,A14
MOVE A14,*A8(OCOMMAND),W
; SOUND0 SND_COPTER_FULL
;
; CALLA VOLUME_AT_Z
; MOVE A1,A9
; SLL 16,A9
; ORI 63,A9
;
; MOVE A8,A3
; CLR A8
; MOVK 3,A10
; MOVI 10,A11
; CREATE PID_IND,TRACK_FADE_PROC
; MOVE A3,A8
MOVI 024B51557H,A9
CA6_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @XBASE,A14,L
CMP A9,A14
JRLT CA6_WAIT1 ;BR=NOT OFF DA SCREEN YET
CALLR COPTER_OFF
CALLA VOLUME_AT_Z
MOVE A1,A9
CLR A8 ;FADE DOWN TO OFF
MOVK 3,A10
MOVI 30,A11
JAUC TRACK_FADE_PROC
**************************************************************************
* *
* COPTER_ATTACK_FINAL *
* *
**************************************************************************
INIT_FINAL_HALF_MISSLETIME_TABLE
.WORD 30, 25, 25
INIT_FINAL_MISSLETIME_TABLE
.WORD 60, 50, 50
FINAL_PACK_TABLE
.LONG FINAL_XBASE-0800000H, -071C0000H, 011A802H
.LONG FINAL_XBASE, -071C0000H, 011A802H
.LONG FINAL_XBASE+0800000H, -071C0000H, 011A802H
COPTER_ATTACK_FINAL
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
CLR A14
MOVE A14,@ROW_HITS,W
MOVE @WAVEIRQS,A14,L
MOVE A14,@ROW_TIME,L
MOVI [DAMAGE_SPEECHES, 0],A14
MOVE A14,@DAMAGE_SPEECH_FLAGS,L
MOVI [THREAT_SPEECHES, 0],A14
MOVE A14,@THREAT_SPEECH_FLAGS,L
MOVK 3,A0 ;PUT WEAPON CRATES ON TOP
MOVI FINAL_PACK_TABLE,A1
CAF_PUT_PACKS
MMFM A1,A9,A10,A11
CALLA PUT_INFINITE_PROCK
DSJ A0,CAF_PUT_PACKS ;BR=ANOTHER PACK
MOVE A8,A0
MOVK 18,A1
MOVI FINAL_COPTER_VECTORS_TABLE,A2
MOVI COPTER_COLL,A3
CAF_GUNVECT_LUPE
MOVE *A2+,A14,L
MOVE A14,*A0(OGUNVECT),L
MOVE *A2+,A14,L
MOVE A14,*A0(OCOLLISION),L
MOVE A3,*A0(OCVECT),L
MOVE *A0(OPARTS),A0,L
DSJ A1,CAF_GUNVECT_LUPE
MOVI FINAL_XBASE,A1 ;HOVER AT TOP OF BUILDING
MOVI ABOVE_BUILDING_UNIVY,A2
MOVI 01225DAH,A3
CALLA SET_ANIPU
CALLR COPTER_ON
; MOVI 05B5119DH,A9
MOVI 04B5119DH,A9
CAF_WAIT1
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @YBASE,A14,L
CMP A9,A14
JRLT CAF_WAIT1 ;BR=DON'T FADE UP YET
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
MOVE A1,A9
SLL 16,A9
MOVE A8,A3 ;FADE UP TO CURRENT Z
CLR A8
MOVK 3,A10
MOVI 60,A11
CREATE PID_IND,TRACK_FADE_PROC
MOVE A3,A8
CAF_WAIT2
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @YSCROLL,A14,L
JRNZ CAF_WAIT2 ;BR=DON'T HOVER YET
; MOVI 010H,A14
; MOVE A14,*A8(OHZACCEL),W
MOVI INIT_FINAL_MISSLETIME_TABLE,A14
MOVE A14,@MISSLETIME_TABLE,L
MOVI 0147F0H,A14
MOVE A14,*A8(OHZWPOS),L
MOVI M_CFINAL|M_CHOVER,A14
MOVE A14,*A8(OCOMMAND),W
SOUND1 SND_THIS_IS
.if BILL
; JRUC CAF_TEST_ABORT
;CAF_TEST
; SLEEP 1
; JRUC CAF_TEST
;CAF_TEST_ABORT
.endif
MOVI 60*6,A9
CAF_SPEECH_WAIT
SLEEP 1
MOVE @ROW_HITS,A14,W
JRZ CAF_NEXT
MOVI M_CFINAL|M_CHOVER|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
CAF_NEXT
DSJ A9,CAF_SPEECH_WAIT
; SLEEP 60*6
CREATE PID_IND,COPTER_SOUND_CONTROL_PROC
MOVI M_CFINAL|M_CHOVER|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVI 60,A9 ;INITIAL HOVER TIME
MOVE @WAVEIRQS,A10,L ;LAST TAKE OFF
CAF_LUPE
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @DESTROYING_PARTS,A14,W
JRNZ CAF_LUPE ;BR=BUSY DESTROYING
DEC A9
JRN CAF_FLIGHT ;BR=NO MORE HOVERIN'
JRNZ CAF_LUPE ;BR=KEEP ON HOVERIN'
CAF_FLIGHT
CALLR SET_RANDOM_COPTER_Z ;PICK POINT TO FLY TO
CALLR SETUP_ONSCRN_TABLE_PTR
CALLR SET_RANDOM_COPTER_X
CALLR SET_RANDOM_COPTER_Y
MOVI 60,A1
MOVE @WING_COUNT,A14,W
JRNZ CAF_SET_FLYTIME ;BR=DON'T SPEED UP
MOVI 45,A1
CAF_SET_FLYTIME
MOVE A1,*A8(OFLYTIME),W
MOVI M_CFINAL|M_CFLYTOPT|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVI 128,A0
CALLA RANDPER
JRNC CAF_NO_THREAT ;BR=NO THREAT SPEECH
CALLR MAKE_THREAT_SPEECH
CAF_NO_THREAT
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL WHERE THERE
JRC CAF_COMPUTE_SLEEP ;BR=BUSY DESTROYING
MOVE @WING_COUNT,A14,W
JRZ CAF_COMPUTE_SLEEP ;BR=NO WINGS LEFT
MOVE @WAVEIRQS,A0,L ;CHECK IF WE CAN LEAVE
MOVE A0,A1
SUB A10,A0
CMPI 60*15,A0
JRGE CAF_FLY_OFF ;BR=ON TOO LONG FLY OFF
CMPI 60*5,A0
JRLT CAF_COMPUTE_SLEEP ;BR=STAY ON THE SCREEN
MOVE @ROW_HITS,A14,W
CMPK 30,A14
JRLT CAF_COMPUTE_SLEEP ;BR=NOT ATTACKED ENOUGH
CAF_FLY_OFF
CLR A14
MOVE A14,@ROW_HITS,W
CLR A9
MOVE A1,A10 ;NEW LAST TIME OFF
MOVK 5,A0 ;PICK FLY OFF ROUTINE
CALLA RAND0
SLL 5,A0
ADDI FLY_OFF_TABLE,A0
MOVE *A0,A0,L
JSRPR A0 ;FLY OFF
; MOVK 3,A0
; MOVI FLY_ON_TABLE,A2
;
; MOVE *A8(OYVAL),A14,L
; CMPI CEILING_UNIVY,A14
; JRGT CAF_CHECK_UP
; MOVK 2,A0
; MOVI FLY_ON_DOWN_TABLE,A2
; JRUC CAF_COME_ON
;CAF_CHECK_UP
; CMPI ABOVE_BUILDING_UNIVY,A14
; JRLE CAF_COME_ON
; MOVK 3,A0
; MOVI FLY_ON_UP_TABLE,A2
;CAF_COME_ON
JRC CAF_FLY_BACK_ON ;BR=INTERRUPTED
CALLA RAND0 ;PICK FLY ON ROUTINE
SLL 5,A0
ADD A2,A0
MOVE *A0,A11,L
CALLA CLR_VEL ;STOP!
CLR A14
MOVE A14,*A8(OCOMMAND),W
CALLA PULL_OBJ
SLEEP 60
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
CALLA CON_INSERT
JSRPR A11 ;FLY ON
CALLR MAKE_THREAT_SPEECH
CAF_VOLUME
CLR A14
MOVE A14,@COPTER_SND,W
CAF_COMPUTE_SLEEP
MOVI M_CFINAL|M_CHOVER|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVI 120+1,A0 ;COMPUTE SLEEP TIME
CALLA RAND0
MOVE A0,A9
JRUC CAF_LUPE
CAF_FLY_BACK_ON
CLR A14
MOVE A14,@COPTER_SND,W
CAF_FLY_BACK_ON_WAIT
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @DESTROYING_PARTS,A14,W
JRNZ CAF_FLY_BACK_ON_WAIT ;BR=BUSY DESTROYING
MOVE *A8(OZVAL),A0,L
MOVE A0,*A8(OZDEST),L
CALLR SETUP_ONSCRN_TABLE_PTR
CALLR SET_RANDOM_COPTER_X
CALLR SET_RANDOM_COPTER_Y
MOVI 45,A1
JRUC CAF_SET_FLYTIME
FLY_OFF_TABLE
.LONG GO_SIDE, GO_UP, PULL_AND_DROP, PULL_AND_CHARGE, PULL_AND_CHARGE
FLY_ON_TABLE
.LONG COME_DOWN, COME_SIDE, COME_UP_FROM_BELOW
FLY_ON_DOWN_TABLE
.LONG COME_DOWN, COME_SIDE
FLY_ON_UP_TABLE
.LONG COME_SIDE, COME_UP_FROM_BELOW, COME_UP_FROM_BELOW
**************************************************************************
* *
* COPTER_SOUND_CONTROL_PROC - UPDATE COPTER PROP SOUND WITH RESPECT TO Z *
* *
**************************************************************************
COPTER_SOUND_CONTROL_PROC
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @COPTER_SND,A14,W
; JAN SUCIDE ;BR=KILL MYSELF
JRZ CSCP_GO ;BR=UPDATE VOLUME
CSCP_WAIT
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @COPTER_SND,A14,W
; JAN SUCIDE ;BR=KILL MYSELF
JRNZ CSCP_WAIT ;BR=STILL WAITIN'
SLEEP 10
CSCP_GO
MOVK 3,A0
CALLA SET_TRACK_VOLUME_Z
JRUC COPTER_SOUND_CONTROL_PROC
**************************************************************************
* *
* COMMAND_WAIT - WAIT FOR A COMMAND TO BE FINISHED *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* A11 = COMMAND TO WAIT FOR *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
COMMAND_WAIT
SLEEP 1
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE @DESTROYING_PARTS,A14,W
JRNZ CW_ABORT ;BR=BUSY DESTROYING
MOVE *A8(OCOMMAND),A14,W
BTST A11,A14
JRNZ COMMAND_WAIT ;BR=NOT DONE YET!
CLRC
RETP
CW_ABORT
SETC
RETP
**************************************************************************
* *
* SET_RANDOM_Z - SET RANDOM Z WITHIN THE Z LIMITS *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = UNIVERSE Z *
* *
**************************************************************************
SET_RANDOM_COPTER_Z
MOVI MIN_COPTER_Z,A1
MOVI MAX_COPTER_Z,A0
MOVE @WING_COUNT,A14,W
JRNZ SRCZ_ROCKET_CHECK ;BR=WE HAVE WINGS
MOVI MAX_COPTER_NOWINGS_Z,A0
SRCZ_ROCKET_CHECK
MOVE @LAST_ROCKET,A14,L
JRZ SRCZ_GO ;BR=NO ROCKET
MOVE *A14(OZVAL),A14,L
CMP A0,A14
JRGT SRCZ_GO ;BR=DON'T FUCKUP DA MAXIMUM
CMP A1,A14
JRLT SRCZ_GO ;BR=Z OKAY
MOVE A14,A1
SRCZ_GO
CALLA RANGERND
MOVE A0,*A8(OZDEST),L
RETS
**************************************************************************
* *
* SETUP_ONSCRN_TABLE_PTR - SET UP POINTER ROUNDING ON-SCREEN FOR *
* SET_RANDOM_COPTER_X *
* *
* PASS: *
* A0 = UNIVERSE Z *
* RETURN: *
* A2 = POINTER TO RIGHT WORLD X ENTRY *
* *
**************************************************************************
SETUP_ONSCRN_TABLE_PTR
MOVE A0,A2
SUBI FINAL_ZBASE-0FFFH,A2 ;A2 = Z WORLD ROUNDED DOWN
SRA 12,A2 ;GET INDEX
SUBK 2-1,A2 ;OFFSET INDEX
JRNN SONTP_INDEX_OK ;BR=INDEX IS OKAY!
CLR A2 ;CLEAR NEGATIVE VALUE
SONTP_INDEX_OK
MOVE A2,A14
SLL 5,A14 ;CALCULATE TABLE OFFSET
SLL 4,A2
ADD A14,A2
ADDI UCHECK_TBL,A2 ;ADD OFFSET TO TABLE
RETS
**************************************************************************
* *
* SETUP_OFFSCRN_TABLE_PTR - SET UP POINTER ROUNDING OFF-SCREEN FOR *
* SET_RANDOM_COPTER_X *
* *
* PASS: *
* A0 = UNIVERSE Z *
* RETURN: *
* A2 = POINTER TO RIGHT WORLD X ENTRY *
* *
**************************************************************************
SETUP_OFFSCRN_TABLE_PTR
MOVE A0,A2
SUBI FINAL_ZBASE+0FFFH,A2 ;A2 = Z WORLD ROUNDED UP
SRA 12,A2 ;GET INDEX
SUBK 2,A2 ;OFFSET INDEX
JRNN SOFFTP_INDEX_OK ;BR=INDEX IS OKAY!
CLR A2 ;CLEAR NEGATIVE VALUE
SOFFTP_INDEX_OK
MOVE A2,A14
SLL 5,A14 ;CALCULATE TABLE OFFSET
SLL 4,A2
ADD A14,A2
ADDI UCHECK_TBL,A2 ;ADD OFFSET TO TABLE
RETS
**************************************************************************
* *
* SET_RANDOM_COPTER_X - SET RANDOM X AT GIVEN Z *
* *
* PASS: *
* A2 = POINTER TO RIGHT WORLD X ENTRY *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = UNIVERSE X *
* A1 = LEFT WORLD X *
* A2 = POINTER TO WORLD Y'S ENTRY *
* *
**************************************************************************
SET_RANDOM_COPTER_X
MOVE *A2+,A0,W ;GET PACKED WORLD X BOUNDARY
SLL 12,A0 ;UNPACK WORLD X BOUNDARY
; SUBI ((138+27)*2) << 15,A0 ;OFFSET FROM EDGE OF BOUNDARY
SUBI (144*2) << 15,A0 ;OFFSET FROM EDGE OF BOUNDARY
MOVE A0,A1
NEG A1
CALLA RANGERND
ADDI FINAL_XBASE,A0 ;TRANSLATE TO UNIVERSE
MOVE A0,*A8(OXDEST),L
RETS
**************************************************************************
* *
* SET_RANDOM_COPTER_Y - SET RANDOM Y AT GIVEN Z *
* *
* PASS: *
* A2 = POINTER TO WORLD Y'S ENTRY *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = UNIVERSE Y *
* A1 = TOP UNIVERSE Y *
* *
**************************************************************************
SET_RANDOM_COPTER_Y
MOVE *A2,A1,L ;GET PACKED WORLD Y [BOT, TOP]
SEXT A1,W
SLL 12,A1 ;UNPACK WORLD Y TOP BOUNDARY
; ADDI 171*2 << 15,A1 ;OFFSET FROM EDGE OF BOUNDARY
; MOVE @YBASE,A14,L
; SUB A14,A1
ADDI (171*2 << 15)-MAX_FINAL_YBASE,A1 ;OFFSET FROM EDGE OF BOUNDARY
MOVI ABOVE_BUILDING_UNIVY,A0
CMP A0,A1
JRGE SRCY_SET ;BR=DON'T GO BELOW DA BUILDING
CALLA RANGERND
SRCY_SET
MOVE A0,*A8(OYDEST),L
RETS
**************************************************************************
* *
* PULL_AND_CHARGE - PULL BACK IN Z AND CHARGE THE SCREEN *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = NUMBER OF ENTRIES IN RETURN TABLE *
* A2 = RETURN TABLE *
* *
**************************************************************************
PULL_AND_CHARGE
MOVE *A8(OXVAL),*A8(OXDEST),L ;FLY BACK
MOVI ABOVE_BUILDING_UNIVY,A14
MOVE A14,*A8(OYDEST),L
MOVI MAX_COPTER_Z,A14
MOVE A14,*A8(OZDEST),L
MOVK 30,A14
MOVE A14,*A8(OFLYTIME),W
MOVI M_CFINAL|M_CFLYTOPT|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
JRC PAC_ABORT ;BR=INTERRUPTED
MOVI M_CFINAL|M_CCHARGE|M_CGUNS,A14 ;CHARGE!
MOVE A14,*A8(OCOMMAND),W
MOVK 1,A14
MOVE A14,@COPTER_SND,W
MOVK B_CCHARGE,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
JRC PAC_ABORT ;BR=INTERRUPTED
MOVK 2,A0
MOVI FLY_ON_DOWN_TABLE,A2
MOVE *A8(OYVAL),A14,L
CMPI ABOVE_BUILDING_UNIVY,A14
JRLT PAC_DONE ;BR=ABOVE DA BUILDIN
MOVK 3,A0
MOVI FLY_ON_UP_TABLE,A2
PAC_DONE
CLRC
RETP
PAC_ABORT
MOVI PID_GOODIE,A0
CALLA KILLPROC_ALL
SETC
RETP
**************************************************************************
* *
* PULL_AND_DROP - PULL BACK IN Z AND DROP BEHIND THE BUILDING *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = NUMBER OF ENTRIES IN RETURN TABLE *
* A2 = RETURN TABLE *
* *
**************************************************************************
PULL_AND_DROP
PUSHP A9
MOVE *A8(OXVAL),*A8(OXDEST),L ;FLY BACK
MOVE *A8(OYVAL),*A8(OYDEST),L
MOVI MAX_COPTER_Z,A14
MOVE A14,*A8(OZDEST),L
MOVK 30,A14
MOVE A14,*A8(OFLYTIME),W
MOVI M_CFINAL|M_CFLYTOPT|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
JRC PAD_ABORT ;BR=INTERRUPTED
MOVI M_CFINAL|M_CFLYING|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVE @MISSLETIME_TABLE,A14,L
SUBI 010H*3,A14 ;MOVE POINTER TO
MOVE A14,@MISSLETIME_TABLE,L ; SHORTER TIME TABLE
MOVI ROCKET_LAUNCHER_ANIM,A2
MOVI MISSLE_LAUNCH_SUB_ANIM,A3
MOVK LEFT_ROCKET,A1
CALLA FINDPART
JRZ PAD_CHECK_RIGHT ;BR=NO LEFT LAUNCHER
MOVE A2,*A0(AnimRetScr),L
MOVE A2,*A0(AnimRetFrm),L
MOVE A3,A1
CALLA STRTANIM
PAD_CHECK_RIGHT
MOVK RGHT_ROCKET,A1
CALLA FINDPART
JRZ PAD_NAP ;BR=NO RIGHT LAUNCHER
MOVE A2,*A0(AnimRetScr),L
MOVE A2,*A0(AnimRetFrm),L
MOVE A3,A1
CALLA STRTANIM
PAD_NAP
MOVI 60,A9
PAD_NAP_LUPE1
SLEEP 1
MOVE @DESTROYING_PARTS,A14,W
JRNZ PAD_ABORT_HOVER ;BR=BUSY DESTROYING
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVI 0A000H,A0
MOVI 06000H,A1
MOVI 0100H,A2
CALLR DO_HOVER
DSJ A9,PAD_NAP_LUPE1
CALLA CLR_VEL
MOVE @MISSLETIME_TABLE,A14,L
ADDI 010H*3,A14 ;MOVE POINTER TO
MOVE A14,@MISSLETIME_TABLE,L ; NORMAL TIME TABLE
MOVI BELOW_BUILDING_UNIVY,A14 ;FLY DOWN
MOVE A14,*A8(OYDEST),L
MOVI M_CFINAL|M_CACCTOPT,A14
MOVE A14,*A8(OCOMMAND),W
MOVK 1,A14
MOVE A14,@COPTER_SND,W
MMTM SP,A8,A10 ;FADE DOWN TO QUARTER
CALLA VOLUME_AT_Z
CLR A8
MOVE A1,A9
ORI [63,0],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_GOODIE,TRACK_FADE_PROC
MMFM SP,A8,A10
MOVI B_CACCTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
JRC PAD_ABORT ;BR=INTERRUPTED
MOVI 60*2+30,A9 ;WAIT TIL MISSLES HIT
PAD_NAP_LUPE2
SLEEP 1
MOVE @DESTROYING_PARTS,A14,W
JRNZ PAD_ABORT ;BR=BUSY DESTROYING
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
DSJ A9,PAD_NAP_LUPE2
MOVK 3,A0
MOVI FLY_ON_UP_TABLE,A2
CLRC
PULLPQ A9
RETP
PAD_ABORT_HOVER
MOVE @MISSLETIME_TABLE,A14,L
ADDI 010H*3,A14 ;MOVE POINTER TO
MOVE A14,@MISSLETIME_TABLE,L ; NORMAL TIME TABLE
PAD_ABORT
MOVI PID_GOODIE,A0
CALLA KILLPROC_ALL
SETC
PULLPQ A9
RETP
**************************************************************************
* *
* GO_UP - FLY UP AND OFF THE SCREEN *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = NUMBER OF ENTRIES IN RETURN TABLE *
* A2 = RETURN TABLE *
* *
**************************************************************************
GO_UP
MOVI M_CFINAL|M_CFLYING|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVI -07FFFH,A14 ;SET Y ACCELERATION
MOVE A14,*A8(OYACCEL),W
MOVK 1,A14
MOVE A14,@COPTER_SND,W
MMTM SP,A8,A9,A10 ;FADE DOWN TO QUARTER
CALLA VOLUME_AT_Z
CLR A8
MOVE A1,A9
ORI [63,0],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_GOODIE,TRACK_FADE_PROC
MMFM SP,A8,A9,A10
GU_WAIT
SLEEP 1
MOVE @DESTROYING_PARTS,A14,W
JRNZ GU_ABORT ;BR=BUSY DESTROYING
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE A8,A0
GU_CHECK ;CHECK ALL PARTS
MOVE *A0(OFLAGS),A14,W
BTST B_OFSCRN,A14
JRZ GU_WAIT ;BR=PART IS ON SCREEN
MOVE *A0(OPARTS),A0,L
JRNZ GU_CHECK ;BR=ANOTHER PART
MOVK 2,A0
MOVI FLY_ON_DOWN_TABLE,A2
CLRC
RETP
GU_ABORT
MOVI PID_GOODIE,A0
CALLA KILLPROC_ALL
SETC
RETP
**************************************************************************
* *
* GO_SIDE - FLY OFF THE SIDE OF THE SCREEN *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* A0 = NUMBER OF ENTRIES IN RETURN TABLE *
* A2 = RETURN TABLE *
* *
**************************************************************************
GO_SIDE
MOVI M_CFINAL|M_CFLYING|M_CGUNS|M_CMISSLE,A14
MOVE A14,*A8(OCOMMAND),W
MOVK 1,A14
MOVE A14,@COPTER_SND,W
MMTM SP,A8,A9,A10 ;FADE DOWN TO QUARTER
CALLA VOLUME_AT_Z
CLR A8
MOVE A1,A9
ORI [63,0],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_GOODIE,TRACK_FADE_PROC
MMFM SP,A8,A9,A10
MOVI 010000H,A11 ;RIGHT X ACCELERATION
MOVE *A8(OXVAL),A1,L
MOVE @XBASE,A14,L
SUB A14,A1
JRP GS_WAIT ;BR=GO RIGHT
NEG A11 ;LEFT X ACCELERATION
GS_WAIT
SLEEP 1
MOVE @DESTROYING_PARTS,A14,W
JRNZ GS_ABORT ;BR=BUSY DESTROYING
MOVE @COPTER_OBJ,A8,L
JAZ SUCIDE
MOVE *A8(OXVEL),A14,L
ADD A11,A14 ;ADD X ACCELERATION
MOVE A14,*A8(OXVEL),L
MOVE A8,A0
GS_CHECK ;CHECK ALL PARTS
MOVE *A0(OFLAGS),A14,W
BTST B_OFSCRN,A14
JRZ GS_WAIT ;BR=PART IS ON SCREEN
MOVE *A0(OPARTS),A0,L
JRNZ GS_CHECK ;BR=ANOTHER PART
MOVK 3,A0
MOVI FLY_ON_TABLE,A2
CLRC
RETP
GS_ABORT
MOVI PID_GOODIE,A0
CALLA KILLPROC_ALL
SETC
RETP
**************************************************************************
* *
* COME_DOWN - COME DOWN FROM THE TOP OF THE SCREEN *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
COME_DOWN
CALLR SET_RANDOM_COPTER_Z ;SET POSITION
MOVE A0,A3
CALLR SETUP_OFFSCRN_TABLE_PTR
CALLR SET_RANDOM_COPTER_X
MOVE A0,A4
CALLR SET_RANDOM_COPTER_Y
SUBI (171+19+6)*2 << 15,A1 ;ADJUST TO POSITION Y OFF SCREEN
MOVE A1,A2
MOVE A4,A1
CALLA SET_ANIPU
MOVK 30,A14
MOVE A14,*A8(OFLYTIME),W
MOVI M_CFINAL|M_CFLYTOPT,A14 ;FLY DOWN
MOVE A14,*A8(OCOMMAND),W
MMTM SP,A8,A9,A10 ;FADE UP FROM QUARTER
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
CLR A8
MOVE A1,A9
SLL 16,A9
ORI [0,63],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MMFM SP,A8,A9,A10
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
RETP
**************************************************************************
* *
* COME_SIDE - COME FROM EITHER SIDE OF THE SCREEN *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
COME_SIDE
CALLR SET_RANDOM_COPTER_Z ;SET POSITION
MOVE A0,A3
CALLR SETUP_OFFSCRN_TABLE_PTR
CALLR SET_RANDOM_COPTER_X
MOVE A1,A4
SUBI (138*2*2) << 15,A4 ;ADJUST TO POSITION OFF DA LEFT
; MOVE *A8(OYVAL),A14,L
; CMPI CEILING_UNIVY,A14
; JRLT CS_RAND
; CMPI ABOVE_BUILDING_UNIVY,A14
; JRLE CS_NORAND
;CS_RAND
; MOVI 512,A0
; CALLA RANDPER
; JRNC CS_TRANS
; NEG A4
; JRUC CS_TRANS
;
;CS_NORAND
MOVE *A8(OXVAL),A1,L
MOVE @XBASE,A14,L
SUB A14,A1
JRN CS_TRANS ;BR=SET OFF DA LEFT SIDE
NEG A4 ;SET OFF DA RIGHT SIDE
CS_TRANS
ADDI FINAL_XBASE,A4 ;TRANSLATE TO UNIVERSE
CALLR SET_RANDOM_COPTER_Y
MOVE A0,A2
MOVE A4,A1
CALLA SET_ANIPU
MOVK 30,A14
MOVE A14,*A8(OFLYTIME),W
MOVI M_CFINAL|M_CFLYTOPT,A14 ;FLY ON
MOVE A14,*A8(OCOMMAND),W
MMTM SP,A8,A9,A10 ;FADE UP FROM QUARTER
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
CLR A8
MOVE A1,A9
SLL 16,A9
ORI [0,63],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MMFM SP,A8,A9,A10
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
RETP
**************************************************************************
* *
* COME_UP_FROM_BELOW - COME UP FROM BELOW THE TOP OF THE BUILDING *
* *
* PASS: *
* A8 = HEAD COPTER OBJECT *
* RETURN: *
* NUTIN' *
* *
**************************************************************************
COME_UP_FROM_BELOW
MOVI MAX_COPTER_Z,A3 ;DEFAULT TO COME UP IN FRONT
MOVI 256,A0
CALLA RANDPER
JRNC CUFB_SETZ ;BR=COME UP IN FRONT
MOVI MIN_COPTER_Z,A3 ;NO! COME UP IN BACK
CUFB_SETZ
MOVE A3,*A8(OZDEST),L
MOVE A3,A0
CALLR SETUP_OFFSCRN_TABLE_PTR
CALLR SET_RANDOM_COPTER_X
MOVE A0,A4
CALLR SET_RANDOM_COPTER_Y
MOVE A4,A1
MOVI BELOW_BUILDING_UNIVY,A2
CALLA SET_ANIPU
MOVK 30,A14
MOVE A14,*A8(OFLYTIME),W
MOVI M_CINVINCIBLE|M_CFINAL|M_CFLYTOPT,A14 ;FLY UP!
MOVE A14,*A8(OCOMMAND),W
MMTM SP,A8,A9,A10 ;FADE UP FROM QUARTER
SOUND0 SND_COPTER_FULL
CALLA VOLUME_AT_Z
CLR A8
MOVE A1,A9
SLL 16,A9
ORI [0,63],A9
MOVK 3,A10
MOVI 30,A11
CREATE PID_IND,TRACK_FADE_PROC
MMFM SP,A8,A9,A10
MOVK B_CFLYTOPT,A11
JSRP COMMAND_WAIT ;WAIT TIL DONE
; CALLR MAKE_THREAT_SPEECH
MOVI M_CFINAL,A14
MOVE A14,*A8(OCOMMAND),W
RETP
.END