7137 lines
168 KiB
NASM
7137 lines
168 KiB
NASM
.MLIB "GXMACS.LIB"
|
||
.FILE "GXHELI.ASM"
|
||
.TITLE " <<< REVOLUTION X -- HELICOPTER ROUTINES >>>"
|
||
.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"
|
||
.INCLUDE "GXHELI.TBL"
|
||
|
||
* SYMBOLS IN HERE
|
||
.DEF SIDE_COPTER_INTRO_INIT
|
||
.DEF MAKE_FRONT_COPTER_PROC, MAKE_SIDE_COPTER_PROC
|
||
.DEF MAKE_COPTER_ONTOP_PROC, DELETE_COPTER_FRAME
|
||
.DEF SCROLL_HOVER_PROC, SND_COPTER_FULL
|
||
.DEF SIDE_COPTER_INTRO_COLLISIONS, PICK_ENTRY2
|
||
.DEF GET_PCENTRY
|
||
|
||
.BSS COPTER_OBJ,32 ;FRONT HELICOPTER OBJECT ADDRESS
|
||
.BSS COPTER_OBJ2,32 ;SIDE HELICOPTER OBJECT ADDRESS
|
||
|
||
.BSS LAST_ROCKET,32 ;ROCKET FARTHEST AWAY IN Z
|
||
|
||
.BSS COPTER_SND,16 ;COPTER SOUND CONTROL
|
||
.BSS WING_COUNT,16 ;NUMBER OF WINGS LEFT
|
||
|
||
.BSS MISSLETIME_TABLE,32 ;TIME OF PLAYER MISSLE TIMES
|
||
|
||
.BSS ROW_TIME,32 ;TIME OF LAST HIT IN A ROW
|
||
|
||
.BSS ROW_HITS,16 ;NUMBER OF HITS IN A ROW
|
||
.BSS DESTROYING_PARTS,16 ;COUNT OF DESTROYING PARTS
|
||
|
||
.BSS THREAT_SPEECH_FLAGS,32 ;THREAT SPEECH FLAGS
|
||
|
||
.BSS DAMAGE_SPEECH_FLAGS,32 ;DAMAGE SPEECH FLAGS
|
||
|
||
; .BSS FRED_FLINTSTONE,16 ;ALIGN TO 32 BITS
|
||
|
||
.TEXT
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_SPARK - SPARK ON COPTER *
|
||
* *
|
||
* A2 = PLAYER *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_SPARK
|
||
PUSH B0
|
||
MOVI INIT_SPARK,B0
|
||
CALLA PASTE_ON_DAMAGE_OFFSET
|
||
PULLQ B0
|
||
RETS
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* CCHECK *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;CCHECK
|
||
; MOVE *A8(OPART1),A14,L
|
||
; JRZ $
|
||
; MOVE *A14(OHZFLYTO),A14,L
|
||
; JRNZ $
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SCROLL_HOVER_PROC - SIMULATE HOVERING IN Y *
|
||
* *
|
||
* PASS: *
|
||
* NUTIN' *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SCROLL_HOVER_PROC
|
||
; MOVE @YBASE,A8,L
|
||
MOVI 07528000H,A8 ;Y MIDPOINT
|
||
|
||
MOVI 0800H,A9 ;Y ACCEL SPEED
|
||
|
||
MOVI 010000H,A10 ;MAX Y SPEED
|
||
MOVE A10,A11
|
||
NEG A11
|
||
; MOVE A11,@YSCROLL,L ;SET INITIAL UP VELOCITY
|
||
|
||
CLR A14
|
||
MOVE A14,@YSCROLL,L ;SET INITIAL UP VELOCITY
|
||
SHP_LUPE
|
||
MOVE A9,@YSACCEL,L ;SET DOWN ACCEL
|
||
|
||
SHP_GOIN_DOWN
|
||
SLEEP 1
|
||
MOVE @YSCROLL,A14,L
|
||
CMP A10,A14
|
||
JRLT SHP_GOIN_DOWN ;BR=WE HAVEN'T REACHED THE MIDDL
|
||
|
||
MOVE A9,A14
|
||
NEG A14
|
||
MOVE A14,@YSACCEL,L ;SET UP ACCEL
|
||
|
||
SHP_GOIN_UP
|
||
SLEEP 1
|
||
MOVE @YSCROLL,A14,L
|
||
CMP A11,A14
|
||
JRGT SHP_GOIN_UP ;BR=WE HAVEN'T REACHED THE MIDDL
|
||
|
||
MOVE A8,@YBASE,L ;ADJUST Y MIDPOINT IF WE BOGGED
|
||
|
||
MOVE @SCROLL_FLAG,A14,L
|
||
JRZ SHP_LUPE ;BR=KEEP ON HOVERIN'
|
||
|
||
CLR A14 ;STOP Y MOTION
|
||
MOVE A14,@YSCROLL,L
|
||
MOVE A14,@YSACCEL,L
|
||
MOVE A14,@SCROLL_FLAG,L ;FLAG DONE
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_COPTER_ONTOP_PROC - MAKE THE HELICOPTER ONTOP OF THE BUILDING *
|
||
* AND THE FRAME *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ONTOP_ROOF_XBASE EQU 03600000H
|
||
GROUP_OFFSET EQU 0680000H
|
||
PACK_OFFSET EQU 01C0000H
|
||
|
||
ONTOP_PACK_TABLE
|
||
.LONG ONTOP_ROOF_XBASE-GROUP_OFFSET-PACK_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE-GROUP_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE-GROUP_OFFSET+PACK_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE-PACK_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE
|
||
.LONG ONTOP_ROOF_XBASE+PACK_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE+GROUP_OFFSET-PACK_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE+GROUP_OFFSET
|
||
.LONG ONTOP_ROOF_XBASE+GROUP_OFFSET+PACK_OFFSET
|
||
|
||
MAKE_COPTER_ONTOP_PROC
|
||
|
||
.if BILL
|
||
|
||
JRUC MCO_TEST
|
||
|
||
.endif
|
||
|
||
MOVK 9,A0 ;PUT WEAPON CRATES ON TOP
|
||
MOVI ONTOP_PACK_TABLE,A1
|
||
MOVI -03E86H,A9 ;UNIVERSE Z
|
||
MOVI -021D8000H,A10 ;UNIVERSE Y
|
||
MCOP_PUT_PACKS
|
||
MOVE *A1+,A11,L
|
||
CALLA PUT_PROCK_TIMED
|
||
DSJ A0,MCOP_PUT_PACKS ;BR=ANOTHER PACK
|
||
|
||
; MOVI COPTER_ONTOP_INIT,B0 ;COPTER ON TOP OF BUILDING
|
||
MOVI SIDE_COPTER_ONTOP_INIT,B0
|
||
CALLA MULTIMAKE
|
||
LOCKON Z
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OSTUTTER),W
|
||
|
||
MOVI 03578000H,A1
|
||
MOVI -02618000H-0100000H,A2
|
||
MOVI 0B17AH,A3
|
||
CALLA SET_ANIPU
|
||
|
||
MOVI 0400040H,A9
|
||
MCO_LUPE
|
||
|
||
SLEEP 1
|
||
MOVE *A8(OSCALE),A14,L
|
||
CMP A9,A14
|
||
JRGE MCO_LUPE
|
||
|
||
; SLEEP 4
|
||
; MOVE *A8(OZVAL),A14,L
|
||
; MOVE @ZBASE,A0,L
|
||
; SUB A0,A14 ;CONVERT TO WORLD
|
||
; CMP A9,A14
|
||
; JRGE MCO_LUPE ;BR=NOT OFF SCREEN JUST YET
|
||
|
||
CALLA DELETE_OBJ
|
||
MCO_WAIT
|
||
SLEEP 1
|
||
MOVE @ZSCROLL,A14,L
|
||
JRNZ MCO_WAIT ;BR=WE'RE STILL MOVIN'
|
||
MCO_TEST
|
||
MOVI [SCRTOP+SCORE_HEIGHT+22,SCRLFT],A14
|
||
MOVE A14,@SCRNTL,L
|
||
|
||
CALLA INIT_UCHECK_TBL
|
||
|
||
MOVI INSIDE_COPTER_INIT,B0 ;INSIDE THE COPTER FRAME
|
||
CALLA MULTIMAKE
|
||
; LOCKON Z
|
||
|
||
MOVE *A8(OPAL),A1,W
|
||
|
||
MOVI [32,-1],A3
|
||
MOVI [DMAWNZ,0],A5
|
||
MOVI FRAMETOP,A14
|
||
CALLA QDMA2 ; OUTPUT THE SUCKER
|
||
MOVI [32,200],A3
|
||
MOVI [DMAWNZ|M_FLIPH,0],A5
|
||
MOVI FRAMETOP,A14
|
||
CALLA QDMA2 ; OUTPUT THE SUCKER
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DELETE_COPTER_FRAME *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DELETE_COPTER_FRAME
|
||
MOVI FGLIST,A0
|
||
MOVE A0,A8
|
||
|
||
MOVI OID_COPTER,A1
|
||
MOVK 6,A2
|
||
DCF_LUPE
|
||
MOVE *A0,A0,L
|
||
DCF_CHECK
|
||
CMP A0,A8
|
||
JREQ DCF_DONE
|
||
|
||
MOVE *A0(OID),A14,W
|
||
CMP A1,A14
|
||
JRNE DCF_LUPE ;BR=NOT A FRAME PIECE
|
||
|
||
MOVE *A0,A3,L ;SAVE NEXT OBJECT
|
||
|
||
CALLA DELOBJ
|
||
|
||
DEC A2
|
||
JRZ DCF_DONE ;BR=NO MORE FRAME PIECES
|
||
|
||
MOVE A3,A0 ;CONTINUE WITH NEXT OBJECT
|
||
|
||
JRUC DCF_CHECK
|
||
DCF_DONE
|
||
MOVI SCRNST,A14
|
||
MOVE A14,@SCRNTL,L
|
||
|
||
CALLA INIT_UCHECK_TBL
|
||
|
||
MOVK 1,A14
|
||
MOVE A14,@GUNS_OFF,W
|
||
|
||
ALLPLYR PCURSOR_OFF
|
||
|
||
RETS
|
||
|
||
INSIDE_COPTER_INIT
|
||
.byte 6, 0, 0, 1 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long FRAMEPAL ;IMGPAL
|
||
.word OID_COPTER, OM_SPOS|OM_INSERT
|
||
.LONG [54-22,200], -06FFF0000H
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
|
||
LWWWW FRAMECORN, DMAWNZ, M_SCRNOBJ, 0, 0
|
||
LWWWW FRAMESIDE, DMAWNZ, M_SCRNOBJ, 0, 0
|
||
LWWWW FRAMESIDE, DMAWNZ, M_SCRNOBJ, 0, OM_OPARTS
|
||
.LONG [80,0]
|
||
LWWWW FRAMECORN, DMAWNZ|M_FLIPH, M_SCRNOBJ, 0, 0
|
||
LWWWW FRAMESIDE, DMAWNZ|M_FLIPH, M_SCRNOBJ, 0, 0
|
||
LWWWW FRAMESIDE, DMAWNZ|M_FLIPH, M_SCRNOBJ, 0, OM_OPARTS
|
||
.LONG [80,0]
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
SND_BELLY_GUN
|
||
.WORD 0F304H,82,0A108H,0
|
||
SND_GAT_GUN
|
||
.WORD 0F306H,18,0A102H,0
|
||
|
||
;SND_FUSE_GUN
|
||
; .WORD 0F304H,48,0A10BH,0
|
||
;SND_NOSE_GUN
|
||
; .WORD 0F304H,82,0A102H,0
|
||
|
||
SND_CLANG_LOW
|
||
.word 0F308H,30,0A111H,0
|
||
SND_CLANG_HIGH
|
||
.word 0F308H,30,0A123H,0
|
||
|
||
SND_CLANG_GEAR
|
||
.word 0F308H,34,0A191H,0
|
||
|
||
SND_RICOCHET
|
||
.word 0F309H,63,0A1A3H,0
|
||
|
||
SND_ROCKET_LAUNCH
|
||
.WORD 0F30CH,94,0A3B0H,0
|
||
|
||
SND_WINDOW_CRACK
|
||
.WORD 0E310H,47,0A32BH,0
|
||
|
||
SND_GAT_TURN
|
||
.WORD 0F318H,21,0A1F7H,0
|
||
SND_BELLY_TURN
|
||
.WORD 0F318H,22,0A1FAH,0
|
||
SND_GRILL_OPENCLOSE
|
||
.WORD 0F318H,11,0A42FH,0
|
||
|
||
SND_THUD
|
||
.word 0F320H,69,0A14AH,0
|
||
SND_METALLIC_FUCKUP
|
||
.word 0F320H,60,0A147H,0
|
||
|
||
SND_WINDOW_BREAK
|
||
.WORD 0F321H,70,0A32EH,0
|
||
|
||
;FROM GXMONDR2.ASM
|
||
;SND_FIRE_HISS
|
||
; .WORD 0F340H,36,0A396H,0 ;FireBall hissing
|
||
;SND_FB_HIT_SCRN
|
||
; .WORD 0F341H,60,0A393H,0 ;FireBall hits the screen
|
||
;SND_PROJECTILE_FLY
|
||
; .WORD 0F141H,62,0A1A1H,0 ;Projectile gets blown back
|
||
;SND_FIRE_BALL
|
||
; .WORD 0F342H,44,08292H,0 ;FireBall being launched
|
||
|
||
SND_ROCKET_HIT
|
||
.WORD 0F341H,60,0A390H,0 ;ROCKET HITS SCREEN
|
||
|
||
SND_EXPLO_COPTER
|
||
.WORD 0F343H,60,0A38DH,0
|
||
|
||
SND_STEP_OUT
|
||
.word 0F250H,134,082BFH,0
|
||
SND_YOU_HAVE_DIS
|
||
.word 0F250H,168,082C0H,0
|
||
SND_LAND_OR
|
||
.word 0F250H,180,082C1H,0
|
||
SND_THIS_IS
|
||
.word 0F250H,111,082C2H,180,082C1H,0
|
||
SND_YOU_ARE_ILL
|
||
.word 0F250H,198,082C3H,0
|
||
|
||
SND_CAPTURE
|
||
.WORD 0F250H,102,082CDH,0
|
||
SND_REPEAT_CAPTURE
|
||
.WORD 0F250H,50,082CEH,102,082CDH,0
|
||
SND_TURN
|
||
.WORD 0F250H,74,082CFH,0
|
||
SND_REPEAT_TURN
|
||
.WORD 0F250H,50,082CEH,74,082CFH,0
|
||
SND_GIVE
|
||
.WORD 0F250H,73,082D0H,0
|
||
SND_REPEAT_GIVE
|
||
.WORD 0F250H,50,082CEH,73,082D0H,0
|
||
SND_SURRENDER
|
||
.WORD 0F250H,81,082D1H,0
|
||
SND_REPEAT_SURRENDER
|
||
.WORD 0F250H,50,082CEH,81,082D1H,0
|
||
SND_MAKE_IT_EASY
|
||
.WORD 0F250H,97,082D2H,0
|
||
SND_REPEAT_MAKE_IT_EASY
|
||
.WORD 0F250H,50,082CEH,97,082D2H,0
|
||
SND_YOU_HAVE_NO
|
||
.WORD 0F250H,91,082D3H,0
|
||
SND_REPEAT_YOU_HAVE_NO
|
||
.WORD 0F250H,50,082CEH,91,082D3H,0
|
||
SND_NO_ESCAPE
|
||
.WORD 0F250H,113,082D4H,0
|
||
SND_REPEAT_NO_ESCAPE
|
||
.WORD 0F250H,50,082CEH,113,082D4H,0
|
||
|
||
SND_WHAT_THE
|
||
.word 0F251H,63,082D5H,0
|
||
SND_SHES_BREAKIN_UP
|
||
.word 0F251H,62,082D6H,0
|
||
SND_NOT_GOOD
|
||
.word 0F251H,49,082D7H,0
|
||
|
||
SND_WERE_GOIN_DOWN
|
||
.word 0F252H,78,082D8H,0
|
||
|
||
SND_FINAL_EXPLO_COPTER1
|
||
.WORD 0E1F0H,88,08303H,0 ;Final explosion sound, channel 1
|
||
SND_FINAL_EXPLO_COPTER2
|
||
.WORD 0E2F0H,40,0838FH,0 ;Final explosion sound, channel 2
|
||
SND_FINAL_EXPLO_COPTER3
|
||
.WORD 0E3F0H,88,08390H,0 ;Final explosion sound, channel 3
|
||
|
||
SND_COPTER_FULL
|
||
.word 0F3F0H,60*60*5,0830EH,0
|
||
|
||
THREAT_SPEECHES EQU 7
|
||
|
||
THREAT_SPEECH_TABLE
|
||
.LONG SND_CAPTURE, SND_TURN, SND_GIVE, SND_SURRENDER
|
||
.LONG SND_MAKE_IT_EASY, SND_YOU_HAVE_NO, SND_NO_ESCAPE
|
||
|
||
DAMAGE_SPEECHES EQU 3
|
||
|
||
DAMAGE_SPEECH_TABLE
|
||
.LONG SND_WHAT_THE, SND_SHES_BREAKIN_UP, SND_NOT_GOOD
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PICK_ENTRY2 - PICK ENTRY OUT OF A TABLE *
|
||
* *
|
||
* PASS: *
|
||
* A0 = NUMBER OF TABLE ENTRIES (NEGATIVE IF TABLE OF LONG WORDS) *
|
||
* A1 = ENTRY PICKED FLAGS *
|
||
* A3 = ROM TABLE *
|
||
* *
|
||
* RETURN: *
|
||
* A0 = NUMBER OF TABLE ENTRIES LEFT (Z SET IF LAST) *
|
||
* A1 = UPDATED ENTRY PICKED FLAGS *
|
||
* A4 = ENTRY PICKED *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PICK_ENTRY2
|
||
MMTM SP,A0,A2
|
||
MOVE A0,A4
|
||
ABS A0
|
||
CALLA RAND0 ;GET RANDOM INDEX
|
||
MOVI -1,A2
|
||
MOVE A2,A14
|
||
PE2_FIND
|
||
INC A2 ;NEXT TABLE INDEX
|
||
BTST A2,A1
|
||
JRNZ PE2_FIND ;BR=ENTRY ALREADY PICKED
|
||
INC A14 ;NEXT ENTRY COUNT
|
||
CMP A0,A14
|
||
JRNE PE2_FIND ;BR=NOT THE PICKED ENTRY
|
||
|
||
MOVK 1,A14
|
||
SLL A2,A14
|
||
OR A14,A1 ;SET ENTRY PICKED FLAG
|
||
|
||
MOVE A4,A4
|
||
JRN PE2_LONG ;BR=GET LONG ENTRY
|
||
|
||
SLL 4,A2
|
||
ADD A3,A2
|
||
MOVE *A2,A4,W ;GET WORLD ENTRY
|
||
MMFM SP,A0,A2
|
||
JRUC PE2_DONE
|
||
PE2_LONG
|
||
SLL 5,A2
|
||
ADD A3,A2
|
||
MOVE *A2,A4,L
|
||
MMFM SP,A0,A2
|
||
ABS A0
|
||
PE2_DONE
|
||
DEC A0 ;ONE LESS NUMBER OF ENTRIES
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_DAMAGE_SPEECH - MAKE RANDOM COPTER DAMAGE SPEECH *
|
||
* *
|
||
* PASS: *
|
||
* NUTIN' *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
MAKE_DAMAGE_SPEECH
|
||
MMTM SP,A0,A1,A3,A4,A5
|
||
|
||
MOVE @DAMAGE_SPEECH_FLAGS,A1,L
|
||
MOVE A1,A0
|
||
SRL 16,A0
|
||
NEG A0 ;FLAG TABLE OF LONG WORDS
|
||
ZEXT A1,W
|
||
MOVE A1,A5
|
||
MOVI DAMAGE_SPEECH_TABLE,A3
|
||
CALLR PICK_ENTRY2
|
||
JRNZ MDS_SAVE ;BR=NOT LAST ENTRY PICKED
|
||
MOVK DAMAGE_SPEECHES-1,A0
|
||
XOR A5,A1
|
||
MDS_SAVE
|
||
SLL 16,A0
|
||
OR A0,A1
|
||
MOVE A4,A0
|
||
CALLA ONESND
|
||
JRNZ MDS_NOGOOD ;BR=SANS SOUND
|
||
MOVE A1,@DAMAGE_SPEECH_FLAGS,L
|
||
MDS_NOGOOD
|
||
MMFM SP,A0,A1,A3,A4,A5
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_THREAT_SPEECH - MAKE RANDOM COPTER THREAT SPEECH *
|
||
* *
|
||
* PASS: *
|
||
* NUTIN' *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
MAKE_THREAT_SPEECH
|
||
MMTM SP,A0,A1,A3,A4,A5
|
||
|
||
MOVE @THREAT_SPEECH_FLAGS,A1,L
|
||
MOVE A1,A0
|
||
SRL 16,A0
|
||
NEG A0 ;FLAG TABLE OF LONG WORDS
|
||
ZEXT A1,W
|
||
MOVE A1,A5
|
||
MOVI THREAT_SPEECH_TABLE,A3
|
||
CALLR PICK_ENTRY2
|
||
JRNZ MTS_SAVE ;BR=NOT LAST ENTRY PICKED
|
||
MOVK THREAT_SPEECHES-1,A0
|
||
XOR A5,A1
|
||
MTS_SAVE
|
||
SLL 16,A0
|
||
OR A0,A1
|
||
MOVE A4,A0
|
||
CALLA ONESND
|
||
JRNZ MTS_NOGOOD ;BR=SANS SOUND
|
||
MOVE A1,@THREAT_SPEECH_FLAGS,L
|
||
MTS_NOGOOD
|
||
MMFM SP,A0,A1,A3,A4,A5
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_SIDE_COPTER_PROC *
|
||
* *
|
||
**************************************************************************
|
||
|
||
INIT_SIDE_MISSLETIME_TABLE
|
||
.WORD 15, 15, 15
|
||
|
||
MAKE_SIDE_COPTER_PROC
|
||
|
||
.if BILL
|
||
|
||
CLR A8
|
||
MOVE A8,@COPTER_OBJ2,L
|
||
DIE
|
||
|
||
.endif
|
||
|
||
MOVI SIDE_COPTER_INIT,B0
|
||
CALLA MULTIMAKE
|
||
LOCKON Z
|
||
|
||
MOVE A8,@COPTER_OBJ2,L
|
||
|
||
MOVE A8,A0
|
||
MOVI 0101H,A1
|
||
MOVI [0800H,0800H],A2
|
||
MOVI SIDE_COLLISION_TABLE,A3
|
||
MSCP_CONST_LUPE
|
||
MOVE A1,*A0(OCONST),W
|
||
MOVE A2,*A0(OZDEPTH),L
|
||
MOVE *A3+,A14,L
|
||
MOVE A14,*A0(OCOLLISION),L
|
||
MOVE *A0(OPARTS),A0,L
|
||
JRNZ MSCP_CONST_LUPE
|
||
|
||
MOVI GATFLASH_ANIM,A2
|
||
MOVI LEFT_GUN,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
MOVE A2,*A0(OFLASHANIM),L
|
||
|
||
MOVI 0800H,A14
|
||
MOVE A14,*A8(OHXACCEL),W
|
||
MOVE A14,*A8(OHYACCEL),W
|
||
MOVK 010H,A14
|
||
MOVE A14,*A8(OHZACCEL),W
|
||
|
||
MOVI INIT_SIDE_MISSLETIME_TABLE,A14
|
||
MOVE A14,@MISSLETIME_TABLE,L
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OHZFLYTO),L
|
||
|
||
MOVE A14,*A8(OCOMMAND),W
|
||
|
||
MOVE A14,*A8(OSTUTTER),W
|
||
|
||
CALLR COPTER_OFF
|
||
|
||
; CREATE PID_IND,COPTER_INTRO_2
|
||
|
||
DIE
|
||
|
||
SIDE_COLLISION_TABLE
|
||
.LONG COPTER_LCLANG_FLASH_COLLISION, FLIGHT_WEAPON_COLLISION
|
||
.LONG FLIGHT_HCOLLISION, FLIGHT_WEAPON_COLLISION
|
||
|
||
.LONG FLIGHT_HCOLLISION, FLIGHT_LCOLLISION, FLIGHT_LCOLLISION
|
||
.LONG FLIGHT_LCOLLISION
|
||
|
||
.LONG FLIGHT_LCOLLISION, FLIGHT_LCOLLISION, FLIGHT_LCOLLISION
|
||
.LONG FLIGHT_LCOLLISION
|
||
|
||
.LONG FLIGHT_LCOLLISION, FLIGHT_HCOLLISION, FLIGHT_LCOLLISION, 0
|
||
|
||
.LONG 0, 0, 0, 0
|
||
|
||
FRONT_COLLISION_TABLE
|
||
.LONG COPTER_LCLANG_COLLISION, FLIGHT_WEAPON_COLLISION
|
||
.LONG FLIGHT_HCOLLISION, FLIGHT_WEAPON_COLLISION
|
||
|
||
.LONG FLIGHT_HCOLLISION, FLIGHT_WEAPON_COLLISION
|
||
.LONG FLIGHT_HCOLLISION, FLIGHT_LCOLLISION
|
||
|
||
.LONG FLIGHT_LCOLLISION, FLIGHT_LCOLLISION
|
||
.LONG FLIGHT_LCOLLISION, FLIGHT_LCOLLISION
|
||
|
||
.LONG FLIGHT_LCOLLISION, FLIGHT_LCOLLISION
|
||
.LONG FLIGHT_LCOLLISION, FLIGHT_LCOLLISION
|
||
|
||
.LONG FLIGHT_9S_COLLISION, FLIGHT_9S_COLLISION
|
||
.LONG COPTER_HCLANG_COLLISION, COPTER_HCLANG_COLLISION
|
||
|
||
.LONG COPTER_LCLANG_COLLISION, COPTER_LCLANG_COLLISION
|
||
.LONG 0, 0
|
||
|
||
.LONG 0, 0, 0
|
||
|
||
|
||
FINAL_COPTER_VECTORS_TABLE
|
||
.LONG COPTER_LCLANG_GUNVECT, COPTER_LCLANG_COLLISION
|
||
.LONG WING_WEAPON_GUNVECT, WING_WEAPON_COLLISION
|
||
.LONG WING_WEAPON_GUNVECT, WING_WEAPON_COLLISION
|
||
.LONG WING_WEAPON_GUNVECT, WING_WEAPON_COLLISION
|
||
|
||
.LONG WING_WEAPON_GUNVECT, WING_WEAPON_COLLISION
|
||
.LONG BELLY_WEAPON_GUNVECT, BELLY_WEAPON_COLLISION
|
||
.LONG COPTER_HCLANG_GUNVECT, COPTER_HCLANG_COLLISION
|
||
.LONG ENGINE_GUNVECT, ENGINE_COLLISION
|
||
|
||
.LONG ENGINE_GUNVECT, ENGINE_COLLISION
|
||
.LONG COPTER_LCLANG_GUNVECT, COPTER_LCLANG_COLLISION
|
||
.LONG COPTER_LCLANG_GUNVECT, COPTER_LCLANG_COLLISION
|
||
.LONG COCKPIT_GUNVECT, COCKPIT_COLLISION
|
||
|
||
.LONG COCKPIT_GUNVECT, COCKPIT_COLLISION
|
||
.LONG FUSEGUN_GUNVECT, FUSEGUN_COLLISION
|
||
.LONG FUSEGUN_GUNVECT, FUSEGUN_COLLISION
|
||
.LONG COPTER_HCLANG_GUNVECT, COPTER_HCLANG_COLLISION
|
||
|
||
.LONG COPTER_LCLANG_GUNVECT, COPTER_LCLANG_COLLISION
|
||
.LONG COPTER_LCLANG_GUNVECT, COPTER_LCLANG_COLLISION
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_FRONT_COPTER_PROC *
|
||
* *
|
||
**************************************************************************
|
||
|
||
INIT_FRONT_MISSLETIME_TABLE
|
||
.WORD 30, 30, 30
|
||
|
||
MAKE_FRONT_COPTER_PROC
|
||
MOVK 2,A14
|
||
MOVE A14,@WING_COUNT,W
|
||
|
||
CLR A14
|
||
MOVE A14,@LAST_ROCKET,L
|
||
MOVE A14,@DESTROYING_PARTS,L
|
||
|
||
MOVE A14,@ROW_HITS,W
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,@ROW_TIME,L
|
||
|
||
MOVI FRONT_COPTER_INIT,B0
|
||
CALLA MULTIMAKE
|
||
LOCKON Z
|
||
|
||
CALLA INC_ENEMY_COUNT
|
||
|
||
MOVE A8,@COPTER_OBJ,L
|
||
|
||
MOVE A13,*A8(OPLINK),L
|
||
|
||
MOVE A8,A0
|
||
MOVI 0101H,A1
|
||
MOVI [0800H,0800H],A2
|
||
MOVI FRONT_COLLISION_TABLE,A3
|
||
MFCP_CONST_LUPE
|
||
MOVE A1,*A0(OCONST),W
|
||
MOVE A2,*A0(OZDEPTH),L
|
||
MOVE *A3+,A14,L
|
||
MOVE A14,*A0(OCOLLISION),L
|
||
MOVE *A0(OPARTS),A0,L
|
||
JRNZ MFCP_CONST_LUPE
|
||
|
||
MOVI GATFLASH_ANIM,A2
|
||
MOVI LEFT_GUN,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
MOVE A2,*A0(OFLASHANIM),L
|
||
MOVI RGHT_GUN,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
MOVE A2,*A0(OFLASHANIM),L
|
||
|
||
MOVI 0800H,A14
|
||
MOVE A14,*A8(OHXACCEL),W
|
||
MOVE A14,*A8(OHYACCEL),W
|
||
MOVK 010H,A14
|
||
MOVE A14,*A8(OHZACCEL),W
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OHZFLYTO),L
|
||
|
||
MOVE A14,*A8(OCOMMAND),W
|
||
|
||
MOVE A14,*A8(OSTUTTER),W
|
||
|
||
MOVI INIT_FRONT_MISSLETIME_TABLE,A14
|
||
MOVE A14,@MISSLETIME_TABLE,L
|
||
|
||
.if BILL
|
||
|
||
CALLR COPTER_OFF
|
||
|
||
; CREATE PID_IND,COPTER_INTRO_1
|
||
|
||
.else
|
||
|
||
CREATE PID_IND,COPTER_INTRO_1
|
||
|
||
.endif
|
||
|
||
MFCP_CONTROL_LUPE
|
||
SLEEP 2
|
||
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
JRNZ MFCP_CONTROL_LUPE
|
||
|
||
MOVE *A8(OCOMMAND),A14,W
|
||
|
||
BTST B_CFLYTOPT,A14
|
||
JRZ MFCP_CHECK_MORE_0 ;BR=NO FLY TO POINT COMMAND
|
||
|
||
JSRP COPTER_TO_POINT
|
||
|
||
MOVE *A8(OCOMMAND),A14,W
|
||
ANDNI M_CFLYTOPT,A14
|
||
MOVE A14,*A8(OCOMMAND),W
|
||
JRUC MFCP_CONTROL_LUPE
|
||
|
||
MFCP_CHECK_MORE_0
|
||
BTST B_CHOVER,A14
|
||
JRZ MFCP_CHECK_MORE_1 ;BR=NO HOVER COMMAND
|
||
|
||
; JSRP HOVER_PROC
|
||
MFCP_HOVER
|
||
SLEEP 1
|
||
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
JRNZ MFCP_CONTROL_LUPE
|
||
|
||
MOVI 0A000H,A0
|
||
MOVI 06000H,A1
|
||
MOVI 0100H,A2
|
||
CALLR DO_HOVER
|
||
|
||
MOVE *A8(OCOMMAND),A14,W
|
||
BTST B_CHOVER,A14
|
||
JRNZ MFCP_HOVER
|
||
JRUC MFCP_CONTROL_LUPE
|
||
|
||
MFCP_CHECK_MORE_1
|
||
BTST B_CCHARGE,A14
|
||
JRZ MFCP_CHECK_MORE_2 ;BR=NO CHARGE COMMAND
|
||
|
||
BTST B_CFINAL,A14
|
||
JRZ MFCP_CHARGE
|
||
JSRP COPTER_FINAL_CHARGE
|
||
JRUC MFCP_CONTROL_LUPE
|
||
MFCP_CHARGE
|
||
JSRP COPTER_CHARGE
|
||
JRUC MFCP_CONTROL_LUPE
|
||
|
||
MFCP_CHECK_MORE_2
|
||
BTST B_CACCTOPT,A14
|
||
JRZ MFCP_CHECK_MORE_3 ;BR=NO FLY TO POINT COMMAND
|
||
|
||
JSRP COPTER_ACCEL_TO_POINT
|
||
|
||
MOVE *A8(OCOMMAND),A14,W
|
||
ANDNI M_CACCTOPT,A14
|
||
MOVE A14,*A8(OCOMMAND),W
|
||
JRUC MFCP_CONTROL_LUPE
|
||
MFCP_CHECK_MORE_3
|
||
JRUC MFCP_CONTROL_LUPE
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
PFTIME EQU PDATA
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_ACCEL_TO_POINT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_ACCEL_TO_POINT
|
||
MOVE *A8(OFLYTIME),A7,W
|
||
|
||
CALLR DETERMINE_LIMIT_CHECKS
|
||
|
||
ADD A1,A2 ;Z DESTINATION
|
||
ADD A9,A4 ;Y DESTINATION
|
||
ADD A11,A6 ;X DESTINATION
|
||
|
||
CALLR COPTER_ACCEL_SETUP
|
||
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A13(PFTIME),L
|
||
|
||
JRUC CTP_LUPE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_ACCEL_TO_WORLD_POINT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_ACCEL_TO_WORLD_POINT
|
||
MOVE *A8(OFLYTIME),A7,W
|
||
|
||
CALLR DETERMINE_WORLD_LIMIT_CHECKS
|
||
|
||
ADD A1,A2 ;Z DESTINATION
|
||
ADD A9,A4 ;Y DESTINATION
|
||
ADD A11,A6 ;X DESTINATION
|
||
|
||
CALLR COPTER_ACCEL_WORLD_SETUP
|
||
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A13(PFTIME),L
|
||
|
||
JRUC CTWP_LUPE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_TO_POINT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_TO_POINT
|
||
MOVE *A8(OFLYTIME),A7,W
|
||
SRA 1,A7 ;ACCELERATE THE FIRST HALF
|
||
|
||
CALLR DETERMINE_LIMIT_CHECKS
|
||
|
||
SRA 1,A1 ;HALFWAY
|
||
ADD A1,A2 ;Z DESTINATION
|
||
|
||
SRA 1,A9 ;HALFWAY
|
||
ADD A9,A4 ;Y DESTINATION
|
||
|
||
SRA 1,A11 ;HALFWAY
|
||
ADD A11,A6 ;X DESTINATION
|
||
|
||
CALLR COPTER_ACCEL_SETUP
|
||
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A13(PFTIME),L
|
||
|
||
; JSRP CTP_LUPE
|
||
GETPC A14
|
||
ADDI 060h,A14
|
||
MOVE A14,-*A12,L ;PUSH RET ADDR
|
||
JAUC CTP_LUPE
|
||
|
||
JRC CTP_RETP ;BR=STOP!
|
||
|
||
MOVE *A8(OFLYTIME),A14,W
|
||
SRA 1,A14 ;DECELERATE THE SECOND HALF
|
||
MOVE A7,A7
|
||
JRN CTP_TIMEOK ;BR=WE LOST TIME
|
||
CLR A7
|
||
CTP_TIMEOK
|
||
ADD A14,A7 ;COMPENSATE FOR LOST TIME
|
||
|
||
CALLR DETERMINE_LIMIT_CHECKS
|
||
|
||
ADD A1,A2 ;Z DESTINATION
|
||
ADD A9,A4 ;Y DESTINATION
|
||
ADD A11,A6 ;X DESTINATION
|
||
|
||
CALLR COPTER_ACCEL_SETUP
|
||
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A13(PFTIME),L
|
||
|
||
; JSRP CTP_LUPE
|
||
GETPC A14
|
||
ADDI 060h,A14
|
||
MOVE A14,-*A12,L ;PUSH RET ADDR
|
||
JAUC CTP_LUPE
|
||
|
||
JRC CTP_RETP ;BR=STOP!
|
||
|
||
CLR A14 ;STOP VELOCITIES
|
||
MOVE A14,*A8(OXVEL),L
|
||
MOVE A14,*A8(OYVEL),L
|
||
MOVE A14,*A8(OZVEL),L
|
||
CTP_RETP
|
||
RETP
|
||
|
||
CTP_LUPE
|
||
MOVE B0,A1
|
||
MOVE B1,A3
|
||
MOVE B2,A5
|
||
MMTM A12,A1,A2,A3,A4,A5,A6,A7
|
||
SLEEP 1
|
||
MMFM A12,A1,A2,A3,A4,A5,A6,A7
|
||
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
JRNZ CTP_ABORT ;BR=STOP WHAT YOUR DOING!
|
||
|
||
MOVE A1,B0
|
||
MOVE A3,B1
|
||
MOVE A5,B2
|
||
|
||
MOVE A8,A14
|
||
; ADDI OXVEL,A14
|
||
; MMFM A14,A1,A3,A5 ;A5=OXVEL, A3=OYVEL, A1=OZVEL
|
||
ADDI OZVEL,A14
|
||
MMFM A14,A1,A3,A5 ;A5=OZVEL, A3=OXVEL, A1=OYVEL
|
||
|
||
ADD A10,A5 ;ADD Z ACCELERATION
|
||
ADD A9,A1 ;ADD Y
|
||
ADD A11,A3 ;ADD X
|
||
|
||
MMTM A14,A1,A3,A5 ;A5=OZVEL, A3=OXVEL, A1=OYVEL
|
||
|
||
MOVE *A13(PFTIME),A14,L
|
||
MOVE @WAVEIRQS,A1,L
|
||
MOVE A1,*A13(PFTIME),L
|
||
SUB A14,A1
|
||
SUB A1,A7
|
||
JRZ CTP_DONE ;BR=DONE. NO TIME LEFT
|
||
JRN CTP_DONE ;BR=EXCEEDED TIME LIMIT
|
||
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A1,A3,A5 ;A5=OXVAL, A3=OYVAL, A1=OZVAL
|
||
|
||
CMP A1,A2
|
||
CALL B0
|
||
JRZ CTP_DONE ;BR=VIOLATED Z BOUNDARY
|
||
|
||
CMP A3,A4
|
||
CALL B1
|
||
JRZ CTP_DONE ;BR=VIOLATED Y BOUNDARY
|
||
|
||
CMP A5,A6
|
||
CALL B2
|
||
JRNZ CTP_LUPE ;BR=VIOLATED X BOUNDARY
|
||
|
||
CTP_DONE
|
||
; RETP
|
||
CLRC ;SUCCESS!
|
||
MMFM A12,A14 ;PULL RETURN ADDR, W/O ZAPPING STAT
|
||
EXGPC A14
|
||
CTP_ABORT
|
||
SETC ;ABORT!
|
||
MMFM A12,A14 ;PULL RETURN ADDR, W/O ZAPPING STAT
|
||
EXGPC A14
|
||
|
||
GT_CHECK
|
||
JRGT GLTC_Z ;BR=VIOLATED BOUNDARY
|
||
MOVK 1,A14
|
||
MOVE A14,A14
|
||
RETS
|
||
LT_CHECK
|
||
JRLT GLTC_Z ;BR=VIOLATED BOUNDARY
|
||
MOVK 1,A14
|
||
MOVE A14,A14
|
||
RETS
|
||
GLTC_Z
|
||
CLR A14
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_TO_WORLD_POINT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_TO_WORLD_POINT
|
||
MOVE *A8(OFLYTIME),A7,W
|
||
SRA 1,A7 ;ACCELERATE THE FIRST HALF
|
||
|
||
CALLR DETERMINE_WORLD_LIMIT_CHECKS
|
||
|
||
SRA 1,A1 ;HALFWAY
|
||
ADD A1,A2 ;Z DESTINATION
|
||
|
||
SRA 1,A9 ;HALFWAY
|
||
ADD A9,A4 ;Y DESTINATION
|
||
|
||
SRA 1,A11 ;HALFWAY
|
||
ADD A11,A6 ;X DESTINATION
|
||
|
||
CALLR COPTER_ACCEL_WORLD_SETUP
|
||
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A13(PFTIME),L
|
||
|
||
; JSRP CTWP_LUPE
|
||
GETPC A14
|
||
ADDI 060h,A14
|
||
MOVE A14,-*A12,L ;PUSH RET ADDR
|
||
JAUC CTWP_LUPE
|
||
|
||
MOVE *A8(OFLYTIME),A14,W
|
||
SRA 1,A14 ;DECELERATE THE SECOND HALF
|
||
MOVE A7,A7
|
||
JRN CTWP_TIMEOK ;BR=WE LOST TIME
|
||
CLR A7
|
||
CTWP_TIMEOK
|
||
ADD A14,A7 ;COMPENSATE FOR LOST TIME
|
||
|
||
CALLR DETERMINE_WORLD_LIMIT_CHECKS
|
||
|
||
ADD A1,A2 ;Z DESTINATION
|
||
ADD A9,A4 ;Y DESTINATION
|
||
ADD A11,A6 ;X DESTINATION
|
||
|
||
CALLR COPTER_ACCEL_WORLD_SETUP
|
||
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,*A13(PFTIME),L
|
||
|
||
; JSRP CTWP_LUPE
|
||
GETPC A14
|
||
ADDI 060h,A14
|
||
MOVE A14,-*A12,L ;PUSH RET ADDR
|
||
JAUC CTWP_LUPE
|
||
|
||
MOVI XSCROLL,A14
|
||
MMFM A14,A1,A2,A3 ;A3=XSCROLL, A2=YSCROLL, A1=ZSCROLL
|
||
MOVE A3,*A8(OXVEL),L ;SET UNIVERSE VELOCITIES
|
||
NEG A2
|
||
MOVE A2,*A8(OYVEL),L
|
||
MOVE A1,*A8(OZVEL),L
|
||
|
||
RETP
|
||
|
||
CTWP_LUPE
|
||
MOVE B0,A1
|
||
MOVE B1,A3
|
||
MOVE B2,A5
|
||
MMTM A12,A1,A2,A3,A4,A5,A6,A7
|
||
SLEEP 1
|
||
|
||
MOVE A8,A14
|
||
; ADDI OXVEL,A14
|
||
; MMFM A14,A1,A3,A5 ;A5=OXVEL, A3=OYVEL, A1=OZVEL
|
||
ADDI OZVEL,A14
|
||
MMFM A14,A1,A3,A5 ;A5=OZVEL, A3=OXVEL, A1=OYVEL
|
||
|
||
MOVI XSACCEL,A7
|
||
MMFM A7,A2,A4,A6 ;A6=XSACCEL, A4=YSACCEL, A2=ZSACCEL
|
||
|
||
ADD A10,A5 ;ADD Z ACCELERATION
|
||
ADD A2,A5
|
||
ADD A9,A1 ;ADD Y ACCELERATION
|
||
SUB A4,A1
|
||
ADD A11,A3 ;ADD X ACCELERATION
|
||
ADD A6,A3
|
||
|
||
MMTM A14,A1,A3,A5 ;A5=OZVEL, A3=OXVEL, A1=OYVEL
|
||
|
||
MMFM A12,A1,A2,A3,A4,A5,A6,A7
|
||
MOVE A1,B0
|
||
MOVE A3,B1
|
||
MOVE A5,B2
|
||
|
||
MOVE *A13(PFTIME),A14,L
|
||
MOVE @WAVEIRQS,A1,L
|
||
MOVE A1,*A13(PFTIME),L
|
||
SUB A14,A1
|
||
SUB A1,A7
|
||
JRZ CTWP_DONE ;BR=DONE. NO TIME LEFT
|
||
JRN CTWP_DONE ;BR=EXCEEDED TIME LIMIT
|
||
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A1,A3,A5 ;A5=OXVAL, A3=OYVAL, A1=OZVAL
|
||
|
||
MOVE @ZBASE,A14,L ;TRANSLATE TO WORLD
|
||
SUB A14,A1
|
||
MOVE @YBASE,A14,L
|
||
ADD A14,A3
|
||
MOVE @XBASE,A14,L
|
||
SUB A14,A5
|
||
|
||
CMP A1,A2
|
||
CALL B0
|
||
JRZ CTWP_DONE ;BR=VIOLATED Z BOUNDARY
|
||
|
||
CMP A3,A4
|
||
CALL B1
|
||
JRZ CTWP_DONE ;BR=VIOLATED Y BOUNDARY
|
||
|
||
CMP A5,A6
|
||
CALL B2
|
||
JRNZ CTWP_LUPE ;BR=VIOLATED X BOUNDARY
|
||
|
||
CTWP_DONE
|
||
; RETP
|
||
MMFM A12,A14 ;PULL RETURN ADDR, W/O ZAPPING STAT
|
||
EXGPC A14
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DETERMINE_WORLD_LIMIT_CHECKS *
|
||
* DETERMINE_LIMIT_CHECKS *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* A1 = (OZDEST - OZVAL) *
|
||
* A2 = OZVAL *
|
||
* A4 = OYVAL *
|
||
* A6 = OZVAL *
|
||
* A9 = (OYDEST - OYVAL) *
|
||
* A11 = (OXDEST - OXVAL) *
|
||
* B0 = Z LIMIT CHECK *
|
||
* B1 = Y LIMIT CHECK *
|
||
* B2 = X LIMIT CHECK *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DETERMINE_WORLD_LIMIT_CHECKS
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A2,A4,A6 ;A6=OXVAL, A4=OYVAL, A2=OZVAL
|
||
|
||
MOVI XBASE,A14
|
||
MMFM A14,A1,A9,A11 ;A11=XBASE, A9=YBASE, A1=ZBASE
|
||
|
||
SUB A1,A2 ;TRANSLATE TO WORLD
|
||
ADD A9,A4
|
||
SUB A11,A6
|
||
|
||
JRUC DLC_GO
|
||
|
||
DETERMINE_LIMIT_CHECKS
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A2,A4,A6 ;A6=OXVAL, A4=OYVAL, A2=OZVAL
|
||
DLC_GO
|
||
MOVE A8,A14
|
||
ADDI OXDEST,A14
|
||
MMFM A14,A1,A9,A11 ;A11=OXDEST, A9=OYDEST, A1=OZDEST
|
||
|
||
MOVI LT_CHECK,B0 ;SET DEFAULT CHECKS
|
||
MOVE B0,B1
|
||
MOVE B0,B2
|
||
MOVI GT_CHECK,B14
|
||
|
||
SUB A2,A1 ;(OZDEST - OZVAL)
|
||
JRNN DLC_SUBY ;BR=USE LESS THAN CHECK
|
||
MOVE B14,B0
|
||
DLC_SUBY
|
||
SUB A4,A9 ;(OYDEST - OYVAL)
|
||
JRNN DLC_SUBX ;BR=USE LESS THAN CHECK
|
||
MOVE B14,B1
|
||
DLC_SUBX
|
||
SUB A6,A11 ;(OXDEST - OXVAL)
|
||
JRNN DLC_SUBS_DONE ;BR=USE LESS THAN CHECK
|
||
MOVE B14,B2
|
||
DLC_SUBS_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_ACCEL_WORLD_SETUP *
|
||
* COPTER_ACCEL_SETUP *
|
||
* *
|
||
* COMPUTE ACCELERATION FROM: *
|
||
* *
|
||
* 2 DEST - VAL *
|
||
* ACCEL = -------- * ( ---------- - VEL ) *
|
||
* DURATION DURATION *
|
||
* *
|
||
* PASS: *
|
||
* A1 = (OZDEST - OZVAL) *
|
||
* A7 = DURATION FROM CURRENT POSITION TO DESTINATION *
|
||
* A8 = OBJECT *
|
||
* A9 = (OYDEST - OYVAL) *
|
||
* A11 = (OXDEST - OXVAL) *
|
||
* *
|
||
* RETURN: *
|
||
* A10 = Z ACCELERATION *
|
||
* A9 = Y ACCELERATION *
|
||
* A11 = X ACCELERATION *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_ACCEL_WORLD_SETUP
|
||
MOVE A8,A14
|
||
; ADDI OXVEL,A14
|
||
; MMFM A14,A3,A5,A10 ;A10=OXVEL, A5=OYVEL, A3=OZVEL
|
||
ADDI OZVEL,A14
|
||
MMFM A14,A3,A5,A10 ;A10=OZVEL, A5=OXVEL, A3=OYVEL
|
||
|
||
MOVE @ZSCROLL,A14,L ;TRANSLATE TO WORLD
|
||
SUB A14,A10
|
||
MOVE @YSCROLL,A14,L
|
||
ADD A14,A3
|
||
MOVE @XSCROLL,A14,L
|
||
SUB A14,A5
|
||
|
||
JRUC CAS_GO
|
||
|
||
COPTER_ACCEL_SETUP
|
||
MOVE A8,A14
|
||
; ADDI OXVEL,A14
|
||
; MMFM A14,A3,A5,A10 ;A10=OXVEL, A5=OYVEL, A3=OZVEL
|
||
ADDI OZVEL,A14
|
||
MMFM A14,A3,A5,A10 ;A10=OZVEL, A5=OXVEL, A3=OYVEL
|
||
CAS_GO
|
||
DIVS A7,A1 ;DIVIDE DIFFERENCE
|
||
DIVS A7,A9
|
||
DIVS A7,A11
|
||
|
||
SUB A10,A1 ;SUBTRACT VELOCITY
|
||
SUB A3,A9
|
||
SUB A5,A11
|
||
|
||
SLL 1,A1 ;MULTIPLY BY 2
|
||
SLL 1,A9
|
||
SLL 1,A11
|
||
|
||
DIVS A7,A1 ;FINAL DIVIDE
|
||
DIVS A7,A9
|
||
DIVS A7,A11
|
||
|
||
MOVE A1,A10
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_FINAL_CHARGE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_FINAL_CHARGE
|
||
MOVI -01000H,A14 ;SET Z VELOCITY
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVI 0D700H,A9 ;Z LIMIT FOR GOIN' DOWN
|
||
|
||
MOVI 1024,A0
|
||
CALLA RAND0
|
||
MOVE A0,A10
|
||
|
||
CMPI 512,A10
|
||
JRLT CFC_1ST_LUPE ;BR=FLY DOWN!
|
||
|
||
MOVI 016000H,A9 ;Z LIMIT FOR GOIN' UP
|
||
CFC_1ST_LUPE
|
||
MOVK 3,A0
|
||
CALLA SET_TRACK_VOLUME_Z
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A4,L
|
||
|
||
MOVE @ZSCROLL,A14,L
|
||
SRA ZFRAC,A14 ;THROW AWAY FRACTION
|
||
ADD A14,A4 ;ZBASE ON NEXT TICK
|
||
SUBI 0800H,A1
|
||
SUB A4,A1
|
||
|
||
CMP A9,A1
|
||
JRLT CFC_2ND_PART ;BR=NOT CLOSE ENOUGH IN Z YET
|
||
|
||
SLEEP 1
|
||
|
||
MOVE @COPTER_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
JRNZ CFC_ABORT ;BR=STOP WHAT YOUR DOING!
|
||
|
||
JRUC CFC_1ST_LUPE
|
||
|
||
CFC_2ND_PART
|
||
CMPI 512,A10
|
||
JRGE CFC_GO_UP ;BR=FLY UP!
|
||
|
||
CLR A9 ;INITIAL Y VELOCITY
|
||
MOVI 0A0000H,A10 ;FINAL Y VELOCITY
|
||
MOVI 020000H,A11 ;Y ACCELERATION
|
||
MOVI -0400H,A14 ;SET Z VELOCITY
|
||
MOVE A14,*A8(OZVEL),L
|
||
JRUC CFC_2ND_START
|
||
CFC_GO_UP
|
||
CLR A9 ;INITIAL Y VELOCITY
|
||
MOVI -080000H,A10 ;FINAL Y VELOCITY
|
||
MOVI -010000H,A11 ;Y ACCELERATION
|
||
JRUC CFC_2ND_START
|
||
CFC_2ND_LUPE
|
||
SLEEP 1
|
||
|
||
MOVE @COPTER_OBJ,A8,L
|
||
JAZ SUCIDE
|
||
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
JRNZ CFC_ABORT ;BR=STOP WHAT YOUR DOING!
|
||
CFC_2ND_START
|
||
MOVK 3,A0
|
||
CALLA SET_TRACK_VOLUME_Z
|
||
|
||
MOVE @XSCROLL,A14,L
|
||
MOVE A14,*A8(OXVEL),L ;UPDATE X VELOCITY
|
||
MOVE @YSCROLL,A14,L
|
||
CMP A10,A9
|
||
JREQ CFC_ADD_Y ;BR=WE REACHED FINAL Y VELOCITY
|
||
ADD A11,A9
|
||
CFC_ADD_Y
|
||
SUB A9,A14 ;TRANSLATE TO UNIVERSE
|
||
NEG A14
|
||
MOVE A14,*A8(OYVEL),L ;UPDATE Y VELOCITY
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1 ;TRANSLATE TO WORLD
|
||
CMPI ZMAX_REAL,A1
|
||
JRGE CFC_2ND_LUPE ;BR=NOT PAST YET
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OCOMMAND),W
|
||
|
||
MOVE A8,A3 ;FADE DOWN TO QUARTER
|
||
CLR A8
|
||
MOVI [63,0],A9
|
||
MOVK 3,A10
|
||
MOVI 28,A11
|
||
CREATE PID_GOODIE,TRACK_FADE_PROC
|
||
MOVE A3,A8
|
||
CFC_ABORT
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_CHARGE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_CHARGE
|
||
MOVI -0800H,A14 ;SET Z VELOCITY
|
||
MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVI 016000H,A9 ;Z LIMIT
|
||
MOVI 030000H,A10 ;X/Y SPEED
|
||
MOVI 0400000H,A11 ;YBASE ADJUSTMENT
|
||
CC_1ST_LUPE
|
||
MOVK 3,A0
|
||
CALLA SET_TRACK_VOLUME_Z
|
||
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A1,A2,A3 ;A3=OXVAL, A2=OYVAL, A1=OZVAL
|
||
|
||
MOVI XBASE,A14
|
||
MMFM A14,A4,A5,A6 ;A6=XBASE, A5=YBASE, A4=ZBASE
|
||
|
||
MOVE @ZSCROLL,A14,L
|
||
SRA ZFRAC,A14 ;THROW AWAY FRACTION
|
||
ADD A14,A4 ;ZBASE ON NEXT TICK
|
||
SUBI 0800H,A1
|
||
SUB A4,A1
|
||
|
||
CMP A9,A1
|
||
JRLT CC_2ND_PART ;BR=NOT CLOSE ENOUGH IN Z YET
|
||
|
||
MOVE A10,A7 ;SET DEFAULT X SPEED
|
||
|
||
MOVE A6,A14
|
||
SUB A3,A14 ;WORLD X
|
||
MOVE A14,A1
|
||
ABS A14 ;ABS(WORLD X)
|
||
CMP A7,A14
|
||
JRGT CC_GO_X ;BR=VELOCITY OK
|
||
MOVE A1,A7 ;USE ABS(WORLD X) AS VELOCITY
|
||
JRUC CC_DO_X
|
||
CC_GO_X
|
||
CMP A6,A3
|
||
JRLT CC_DO_X ;BR=VELOCITY DIRECTION OK
|
||
NEG A7
|
||
CC_DO_X
|
||
MOVE @XSCROLL,A14,L
|
||
ADD A14,A7 ;TRANSLATE TO UNIVERSE
|
||
MOVE A7,*A8(OXVEL),L
|
||
|
||
MOVE A10,A7 ;SET DEFAULT Y SPEED
|
||
|
||
NEG A5
|
||
ADD A11,A5
|
||
CMP A5,A2
|
||
JRLT CC_DO_Y ;BR=VELOCITY DIRECTION OK
|
||
NEG A7
|
||
CC_DO_Y
|
||
MOVE @YSCROLL,A14,L
|
||
ADD A14,A7 ;TRANSLATE TO UNIVERSE
|
||
MOVE A7,*A8(OYVEL),L
|
||
|
||
SLEEP 1
|
||
|
||
JRUC CC_1ST_LUPE
|
||
|
||
CC_2ND_PART
|
||
MOVI 050000H,A10 ;Y VELOCITY
|
||
MOVI ZMAX_REAL,A11
|
||
JRUC CC_2ND_START
|
||
CC_2ND_LUPE
|
||
SLEEP 1
|
||
CC_2ND_START
|
||
MOVK 3,A0
|
||
CALLA SET_TRACK_VOLUME_Z
|
||
|
||
MOVE @XSCROLL,A14,L
|
||
MOVE A14,*A8(OXVEL),L ;UPDATE X VELOCITY
|
||
MOVE @YSCROLL,A14,L
|
||
SUB A10,A14
|
||
MOVE A14,*A8(OYVEL),L ;UPDATE Y VELOCITY
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1 ;TRANSLATE TO WORLD
|
||
CMP A11,A1
|
||
JRGE CC_2ND_LUPE ;BR=NOT PAST YET
|
||
|
||
CALLR COPTER_OFF
|
||
|
||
MOVE A8,A3 ;FADE DOWN TO OFF
|
||
CLR A8
|
||
MOVK 3,A10
|
||
MOVI 30,A11
|
||
CREATE PID_IND,TRACK_FADE_OUT_FULL_PROC
|
||
MOVE A3,A8
|
||
|
||
RETP
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DO_HOVER *
|
||
* *
|
||
* PASS: *
|
||
* A0 = X MAXIMUM SPEED *
|
||
* A1 = Y MAXIMUM SPEED *
|
||
* A2 = Z MAXIMUM SPEED *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DO_HOVER
|
||
MOVE A0,A0
|
||
JRZ DH_DO_Y ;BR=DON'T HOVER IN X
|
||
move *A8(OHXACCEL),A14,W
|
||
JRZ DH_DO_Y ;BR=DON'T HOVER IN X
|
||
move *A8(OXVEL),A3,L
|
||
add A14,A3
|
||
move A3,*A8(OXVEL),L
|
||
abs A3
|
||
CMP A0,A3
|
||
jrlt DH_DO_Y ;BR=UNDER THE LIMIT
|
||
NEGM *A8(OHXACCEL),W ;CHANGE DIRECTION
|
||
DH_DO_Y
|
||
MOVE A1,A1
|
||
JRZ DH_DO_Z ;BR=DON'T HOVER IN Y
|
||
move *A8(OHYACCEL),A14,W
|
||
JRZ DH_DO_Z ;BR=DON'T HOVER IN Y
|
||
move *A8(OYVEL),A3,L
|
||
add A14,A3
|
||
move A3,*A8(OYVEL),L
|
||
abs A3
|
||
CMP A1,A3
|
||
jrlt DH_DO_Z ;BR=UNDER THE LIMIT
|
||
NEGM *A8(OHYACCEL),W ;CHANGE DIRECTION
|
||
DH_DO_Z
|
||
MOVE A2,A2
|
||
JRZ DH_DONE ;BR=DON'T HOVER IN Z
|
||
|
||
MOVE *A8(OHZFLYTO),A0,L
|
||
JRNZ DH_COMEBACK
|
||
|
||
move *A8(OHZACCEL),A14,W
|
||
JRZ DH_DONE ;BR=DON'T HOVER IN Z
|
||
move *A8(OZVEL),A3,L
|
||
add A14,A3
|
||
move A3,*A8(OZVEL),L
|
||
|
||
ABS A14
|
||
CMP A2,A3
|
||
JRGE DH_NEG_Z
|
||
NEG A2
|
||
CMP A2,A3
|
||
JRGT DH_DONE
|
||
NEG A14
|
||
DH_NEG_Z
|
||
NEG A14
|
||
MOVE A14,*A8(OHZACCEL),W
|
||
DH_DONE
|
||
RETS
|
||
|
||
DH_COMEBACK
|
||
MOVE *A8(OHZACCEL),A14,W
|
||
MOVE *A8(OZVEL),A3,L
|
||
ADD A14,A3
|
||
|
||
NEG A2
|
||
CMP A2,A3
|
||
JRLT DH_FLYTO_CHK
|
||
|
||
MOVE A3,*A8(OZVEL),L
|
||
DH_FLYTO_CHK
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1
|
||
|
||
CMP A0,A1
|
||
JRGT DH_DONE
|
||
CLR A14
|
||
MOVE A14,*A8(OHZFLYTO),L
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DO_HOVER_WORLD *
|
||
* *
|
||
* PASS: *
|
||
* A0 = X MAXIMUM SPEED *
|
||
* A1 = Y MAXIMUM SPEED *
|
||
* A2 = Z MAXIMUM SPEED *
|
||
* A8 = OBJECT *
|
||
* A9 = OLD ZSCROLL *
|
||
* A10 = OLD YSCROLL *
|
||
* A11 = OLD XSCROLL *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DO_HOVER_WORLD
|
||
MOVE A0,A0
|
||
JRZ DH_DO_Y ;BR=DON'T HOVER IN X
|
||
move *A8(OXVEL),A3,L
|
||
SUB A11,A3 ;TRANSLATE TO WORLD
|
||
move *A8(OHXACCEL),A14,W
|
||
add A14,A3
|
||
MOVE A3,A14
|
||
MOVE @XSCROLL,A4,L
|
||
ADD A4,A3 ;TRANSLATE TO UNIVERSE
|
||
move A3,*A8(OXVEL),L
|
||
abs A14
|
||
CMP A0,A14
|
||
jrlt DHW_DO_Y ;BR=UNDER THE LIMIT
|
||
NEGM *A8(OHXACCEL),W ;CHANGE DIRECTION
|
||
DHW_DO_Y
|
||
MOVE A1,A1
|
||
JRZ DHW_DO_Z ;BR=DON'T HOVER IN Y
|
||
move *A8(OYVEL),A3,L
|
||
ADD A10,A3 ;TRANSLATE TO WORLD
|
||
move *A8(OHYACCEL),A14,W
|
||
add A14,A3
|
||
MOVE A3,A14
|
||
MOVE @YSCROLL,A4,L
|
||
SUB A4,A3 ;TRANSLATE TO UNIVERSE
|
||
move A3,*A8(OYVEL),L
|
||
abs A14
|
||
CMP A1,A14
|
||
jrlt DHW_DO_Z ;BR=UNDER THE LIMIT
|
||
NEGM *A8(OHYACCEL),W ;CHANGE DIRECTION
|
||
DHW_DO_Z
|
||
MOVE A2,A2
|
||
JRZ DHW_DONE ;BR=DON'T HOVER IN Z
|
||
|
||
MOVE *A8(OHZFLYTO),A0,L
|
||
JRNZ DHW_COMEBACK
|
||
|
||
move *A8(OZVEL),A3,L
|
||
SUB A9,A3 ;TRANSLATE TO WORLD
|
||
move *A8(OHZACCEL),A14,W
|
||
add A14,A3
|
||
MOVE A3,A5
|
||
MOVE @ZSCROLL,A4,L
|
||
ADD A4,A3 ;TRANSLATE TO UNIVERSE
|
||
move A3,*A8(OZVEL),L
|
||
|
||
ABS A14
|
||
CMP A2,A5
|
||
JRGE DHW_NEG_Z
|
||
NEG A2
|
||
CMP A2,A5
|
||
JRGT DHW_DONE
|
||
NEG A14
|
||
DHW_NEG_Z
|
||
NEG A14
|
||
MOVE A14,*A8(OHZACCEL),W
|
||
DHW_DONE
|
||
RETS
|
||
|
||
DHW_COMEBACK
|
||
MOVE *A8(OHZACCEL),A14,W
|
||
MOVE *A8(OZVEL),A3,L
|
||
SUB A9,A3 ;TRANSLATE TO UNIVERSE
|
||
ADD A14,A3
|
||
|
||
NEG A2
|
||
CMP A2,A3
|
||
JRLT DH_FLYTO_CHK
|
||
|
||
MOVE @ZSCROLL,A4,L
|
||
ADD A4,A3
|
||
MOVE A3,*A8(OZVEL),L
|
||
JRUC DH_FLYTO_CHK
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CREATE_FLASH - MAKE A GUN FLASH *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GUN OBJECT *
|
||
* AARG+,L = ADDRESS TO JUMP TO IF CAN'T DO IT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CREATE_FLASH
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
MOVE *A0(OCOMMAND),A14,W
|
||
BTST B_CGUNS,A14
|
||
JRZ ACF_NOFLASH ;BR=GUNS NOT ACTIVE
|
||
|
||
; MOVE *A8(OHITS),A14,W
|
||
; JRZ ACF_NOFLASH ;BR=DESTROYED
|
||
; JRN ACF_NOFLASH ;BR=DESTROYED
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_OFSCRN,A14
|
||
JRNZ ACF_NOFLASH ;BR=OFF DA SCREEN
|
||
|
||
MOVE *A8(OFLASH_INIT),A5,L
|
||
CALLA CREATE_OBJ
|
||
MOVE A0,*A8(OFLASHOBJ),L
|
||
JRZ ACF_NOFLASH ;BR=CREATION FAILED
|
||
|
||
MOVE *A8(OFLASH_OFFSET),A14,L ;OFFSET FROM GUN OBJECT
|
||
MOVE *A8(OPARTSXY),A1,L
|
||
ADD A14,A1
|
||
MOVE A1,*A0(OPARTSXY),L
|
||
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVE *A8(OXVAL),A1,L ;SET POSITION
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
CALLA SETOFFPU
|
||
|
||
CALLA INSPART ;INSERT
|
||
CALLA INSOBJ
|
||
|
||
RETS
|
||
ACF_NOFLASH
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DELETE_FLASH - DELETE FLASH UPON RANDOM CHANCE IF NOT THEN JUMP *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GUN OBJECT *
|
||
* AARG+,L = ADDRESS TO JUMP TO IF IT DIDN'T HAPPEN *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_DELETE_FLASH
|
||
MOVI 768,A0 ;25% CHANCE OF DELETING
|
||
CALLA RANDPER
|
||
JRNC DELETE_FLASH ;BR=DELETE FLASH
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L ;JUMP!
|
||
ADF_NONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DELETE_FLASH - DELETE THE FLASH OBJECT *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GUN OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DELETE_FLASH
|
||
MOVE *A8(OFLASHOBJ),A0,L
|
||
JRZ ADF_NONE ;BR=NO FLASH OBJECT
|
||
|
||
;THIS DOES NOT HAVE TO BE DONE TO ALL GUNS!
|
||
MOVE *A0(AnimFrm),*A8(OFLASHANIM),L ;SAVE WHERE WE LEFT OFF FOR GAT
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OFLASHOBJ),L ;NO FLASH OBJECT
|
||
CALLA PULLPART ;GET RID OF IT
|
||
JAUC DELOBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_FIRE_SND_PAL - MAKE BANG! SOUND *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GUN OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_FIRE_SND_PAL
|
||
MOVE *A8(OGUN_SND),A0,L
|
||
JRZ AFSP_NOSND
|
||
; CALLA ONESND_Z
|
||
CALLA ONESND
|
||
AFSP_NOSND
|
||
JRUC A_HILITE_PAL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_HILITE_PAL - CHANGE TO BRIGHT GUN PALETTE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GUN OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_HILITE_PAL
|
||
MOVE *A8(OHILITE_PAL),A0,L
|
||
JAUC CHANGE_PAL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_NORMAL_PAL - CHANGE TO NORMAL PALETTE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GUN OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_NORMAL_PAL
|
||
MOVE *A8(ONORMAL_PAL),A0,L
|
||
JAUC CHANGE_PAL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_HIT_FLIP_ON - CHECK PLAYER HIT, TURN THE OBJECT ON, *
|
||
* AND DO SOME RANDOM FLIPS *
|
||
* *
|
||
* A_HIT_ON - CHECK PLAYER HIT AND TURN THE OBJECT ONLY *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_HIT_FLIP_ON
|
||
MOVE @RAND,A14,W
|
||
ANDI M_FLIPH|M_FLIPV,A14 ;ISOLATE FLIP BITS ONLY
|
||
SETF 2,0,0
|
||
MOVE A14,*A8(OCTRL+4),0
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
A_HIT_ON
|
||
CLR A3 ;ZERO OFFSET
|
||
|
||
; MOVI [1,0],A5 ;DAMAGE
|
||
|
||
MOVE @BASE_HIT,A5,W
|
||
SUBI 800H,A5
|
||
SLL 4,A5
|
||
|
||
MOVE *A8(OPART1),A14,L
|
||
LOCKON Z
|
||
MOVE *A14(OCOMMAND),A14,W
|
||
BTST B_CHITALL,A14
|
||
JRNZ AHO_HITALL ;BR=HIT 'EM ALL
|
||
|
||
CALLA CK_PLAYER_HIT ;CHECK EACH PLAYER
|
||
JAUC OBJ_ON_WNZ
|
||
AHO_HITALL
|
||
ALLPLYR PLAYER_HIT ;HIT 'EM ALL, HARD!
|
||
JAUC OBJ_ON_WNZ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GET_PCENTRY - GET PLAYER COUNT TABLE ENTRY *
|
||
* *
|
||
* PASS: *
|
||
* A1 = TABLE ADDRESS *
|
||
* .WORD PLAYER ONE VALUE, PLAYER TWO VALUE, PLAYER THREE VALUE *
|
||
* RETURN: *
|
||
* A14 = TABLE ENTRY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GET_PCENTRY
|
||
MOVE @CURPLYRS,A14,W ;GET NUMBER OF CURRENT PLAYERS
|
||
DEC A14
|
||
JRNN GP_GO
|
||
CLR A14
|
||
GP_GO
|
||
SLL 4,A14 ;TRANSLATE TO TABLE OFFSET
|
||
ADD A1,A14 ;OFFSET TABLE
|
||
MOVE *A14,A14,W ;GET TIME
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_LAUNCH_ROCKET *
|
||
* *
|
||
**************************************************************************
|
||
|
||
;OATE_ROCKET EQU ODATA
|
||
OTARGETX EQU ODATA+020H
|
||
OTARGETY EQU ODATA+040H
|
||
|
||
A_LAUNCH_ROCKET
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
|
||
MOVE @MISSLETIME_TABLE,A1,L
|
||
CALLR GET_PCENTRY ;LOAD SLEEP TIME
|
||
MOVE A14,A1
|
||
SLL 8,A14
|
||
OR A1,A14
|
||
MOVE A14,*A8(AnimSLP),W ;LOAD BOTH SLEEPS
|
||
|
||
MOVE *A0(OCOMMAND),A14,W
|
||
BTST B_CMISSLE,A14
|
||
JRZ ALR_DONE
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_OFSCRN,A14
|
||
JRNZ ALR_DONE
|
||
|
||
; MOVE *A8(OHITS),A14,W
|
||
; JRZ ALR_DONE
|
||
; JRN ALR_DONE
|
||
|
||
MOVE *A8(OIHOFF),A10,W
|
||
CMPI 090H,A10
|
||
JRGT ALR_DONE
|
||
|
||
CALLA GETAFARG_LONG ;GET OFFSET FROM PART
|
||
MOVE A0,A9
|
||
|
||
MOVI ROCKET_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JRZ ALR_ABORT
|
||
|
||
MOVI 0101H,A14
|
||
MOVE A14,*A0(OCONST),W
|
||
|
||
MOVI ROCKET_GUNVECT,A14
|
||
MOVE A14,*A0(OGUNVECT),L
|
||
|
||
MOVE *A8(OXVAL),A2,L
|
||
MOVE A9,A14
|
||
SEXT A14,W
|
||
SLL 15,A14
|
||
ADD A14,A2
|
||
MOVE A2,*A0(OXVAL),L
|
||
; MOVE @XBASE,A14,L
|
||
; SUB A14,A2
|
||
|
||
MOVE *A8(OYVAL),A4,L
|
||
MOVE A9,A14
|
||
SRA 16,A14
|
||
SLL 15,A14
|
||
ADD A14,A4
|
||
MOVE A4,*A0(OYVAL),L
|
||
; MOVE @YBASE,A14,L
|
||
; ADD A14,A4
|
||
|
||
MOVE *A8(OZVAL),A5,L
|
||
SUBK 2,A5
|
||
MOVE A5,*A0(OZVAL),L
|
||
|
||
MOVE @LAST_ROCKET,A14,L
|
||
JRZ ALR_LAST
|
||
MOVE *A14(OZVAL),A14,L
|
||
CMP A14,A5
|
||
JRLT ALR_NOLAST ;BR=THE "LAST" ROCKET IS FARTHER IN Z
|
||
ALR_LAST
|
||
MOVE A0,@LAST_ROCKET,L
|
||
ALR_NOLAST
|
||
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A5
|
||
|
||
MOVI -(08000H-ZMAX_REAL)/(ROCKET_FRAME_TIME*8),A14
|
||
MOVE A14,*A0(OZVEL),L
|
||
|
||
NEG A14
|
||
SUBI ZMAX_REAL,A5
|
||
DIVU A14,A5
|
||
|
||
MOVE A8,A11
|
||
MOVE A0,A8
|
||
|
||
MOVE @(UCHECK_TBL+030H+010H),A1,L
|
||
MOVE A1,A0
|
||
SEXT A1,W
|
||
SLL 12,A1 ;UNCOMPRESS TOP WORLD Y
|
||
ADDI 08000H,A1
|
||
SRA 16,A0
|
||
SLL 12,A0 ;UNCOMPRESS BOTTOM WORLD Y
|
||
|
||
; MOVI -017B000H,A0 ;TOP WORLD Y
|
||
; MOVI 0D2000H,A1 ;BOTTOM WORLD Y
|
||
|
||
CALLA RANGERND ;PICK DA Y
|
||
MOVE A0,A3
|
||
MOVE A3,*A8(OTARGETY),L
|
||
MOVE @YBASE,A14,L
|
||
SUB A14,A3
|
||
|
||
; MOVE @(UCHECK_TBL+030H),A0,W
|
||
; SLL 12,A0
|
||
; SUBI 060000H,A0
|
||
; MOVE A0,A1
|
||
; NEG A1
|
||
|
||
MOVI 768,A0
|
||
CALLA RANDPER
|
||
JRC ALR_PICK_A_PLAYER
|
||
|
||
; MOVI -01F8000H,A0 ;LEFT WORLD X
|
||
; MOVI 01F8000H,A1 ;RIGHT WORLD X
|
||
MOVI LEFT_WORLDX+060000H,A0 ;LEFT WORLD X
|
||
MOVI RGHT_WORLDX-060000H,A1 ;RIGHT WORLD X
|
||
CALLA RANGERND ;PICK DA X
|
||
JRUC ALR_SET_X_TARGET
|
||
ALR_PICK_A_PLAYER
|
||
CALLA GET_PLAYER_WORLDX_EXTENTS
|
||
CALLA RANGERND ;PICK DA X
|
||
ALR_SET_X_TARGET
|
||
MOVE A0,A1
|
||
MOVE A1,*A8(OTARGETX),L
|
||
MOVE @XBASE,A14,L
|
||
ADD A14,A1
|
||
|
||
CALLA SLINEVEL_LOAD_2D
|
||
|
||
MOVE A8,A0
|
||
MOVE A11,A8
|
||
|
||
CALLA INSOBJ
|
||
|
||
CALLA GETAFARG_WORD ;GET SMOKE FLAG
|
||
JRZ ALR_ABORT ;BR=THANK FOR NOT SMOKING
|
||
|
||
MOVI ROCKET_SMOKE_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JRZ ALR_ABORT
|
||
|
||
MOVE *A8(OPARTSXY),A14,L
|
||
ADD A9,A14
|
||
MOVE A14,*A0(OPARTSXY),L
|
||
|
||
MOVB *A8(OZOFF),A14
|
||
DEC A14
|
||
MOVB A14,*A0(OZOFF)
|
||
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
|
||
CALLA SETOFFPU
|
||
|
||
CALLA INSOBJ
|
||
CALLA INSPART
|
||
|
||
SOUND1 SND_ROCKET_LAUNCH
|
||
ALR_ABORT
|
||
|
||
RETS
|
||
ALR_DONE
|
||
MOVI 0101H,A14
|
||
MOVE A14,*A8(AnimSLP),W ;SET BOTH SLEEPS TO ONE
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ROCKET_WATCH *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_ROCKET_WATCH
|
||
MOVE *A8(OIHOFF),A14,W
|
||
JRNZ ARW_DONE
|
||
MOVE *A8(OSCALE),A5,L
|
||
MOVI 01000100H,A14
|
||
CMP A14,A5
|
||
JRGT ARW_DONE
|
||
|
||
MOVI 01000100H,A14
|
||
|
||
MOVE A14,*A8(OSCALE),L
|
||
|
||
MOVE *A8(OIMG),A1,L
|
||
MOVE *A1(ISIZE),A14,L
|
||
MOVE A14,*A8(OUSIZE),L
|
||
MOVE A14,*A8(OSIZE),L
|
||
MOVE *A1(IANIOFF),A14,L
|
||
MOVE A14,*A8(OUANIOFF),L
|
||
MOVE A14,*A8(OANIOFF),L
|
||
|
||
CALLA SET_ODAG ;COMPUTE ODAG AGAIN
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_NOSCALE,A14
|
||
MOVE A14,*A8(OFLAGS)
|
||
|
||
MOVI ROCKET_PART2_ANIM,A14
|
||
MOVE A14,*A8(AnimFrm),L
|
||
MOVE A14,*A8(AnimScr),L
|
||
ARW_DONE
|
||
JRUC ROCKET_VEL_UPDATE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ROCKET_VEL_UPDATE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ROCKET_VEL_UPDATE
|
||
MOVE *A8(OXVAL),A2,L
|
||
MOVE *A8(OYVAL),A4,L
|
||
|
||
MOVE *A8(OZVAL),A5,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A5
|
||
|
||
MOVE @ZSCROLL,A14,L
|
||
SUB A14,A5
|
||
MOVE *A8(OZVEL),A14,L
|
||
ADD A14,A5
|
||
|
||
; MOVE *A8(OZVEL),A14,L
|
||
NEG A14
|
||
SUBI ZMAX_REAL,A5
|
||
DIVU A14,A5
|
||
JRZ RCU_FUDGE
|
||
JRNN RCU_GO
|
||
RCU_FUDGE
|
||
MOVK 1,A5
|
||
RCU_GO
|
||
MOVE *A8(OTARGETY),A3,L
|
||
MOVE @YBASE,A14,L
|
||
SUB A14,A3
|
||
|
||
MOVE *A8(OTARGETX),A1,L
|
||
MOVE @XBASE,A14,L
|
||
ADD A14,A1
|
||
|
||
JAUC SLINEVEL_LOAD_2D
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_ROCKET_IMG *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_ROCKET_IMG
|
||
MOVE *A8(OZVAL),A1,L
|
||
|
||
MOVE *A8(OZVEL),A14,L
|
||
ADD A14,A1
|
||
MOVE @ZSCROLL,A14,L
|
||
SUB A14,A1
|
||
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1
|
||
SUBI 07C92H,A1
|
||
NEG A1
|
||
JRNN ACRI_DIV
|
||
CLR A1
|
||
ACRI_DIV
|
||
MOVI 09C0H,A14
|
||
DIVU A14,A1
|
||
|
||
CMPK 7,A1
|
||
JRGT A_ROCKET_HIT
|
||
; JRLE ACRI_GO
|
||
; MOVI ROCKET_PART2_HIT,A1
|
||
; JRUC ACRI_NEW_FRAME
|
||
;ACRI_GO
|
||
MOVE A1,A14
|
||
SLL 4,A1
|
||
SLL 6,A14
|
||
ADD A14,A1
|
||
ADDI ROCKET_PART2_ANIM,A1
|
||
ACRI_NEW_FRAME
|
||
MOVE A1,*A8(AnimFrm),L
|
||
JRUC ROCKET_VEL_UPDATE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ROCKET_8 *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_ROCKET_8
|
||
MOVI 0840084H,A1
|
||
; MOVI 0800080H,A1
|
||
CALLA SET_SCALEM
|
||
CALLA SET_ODAG
|
||
JRUC A_CHECK_ROCKET_IMG
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ROCKET_HIT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_ROCKET_HIT
|
||
MOVI ROCKET_PART2_HIT,A1
|
||
MOVE A1,*A8(AnimFrm),L
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_SCRNOBJ,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVI 0840084H,A1
|
||
; MOVI 0800080H,A1
|
||
CALLA SET_SCALEM
|
||
CALLA SET_ODAG
|
||
|
||
MOVE *A8(ODAG),A1,L
|
||
MOVE A1,A14
|
||
SEXT A1,W
|
||
SLL 16,A1
|
||
MOVE A1,*A8(OXVAL),L
|
||
SRA 16,A14
|
||
SLL 16,A14
|
||
MOVE A14,*A8(OYVAL),L
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
|
||
CALLA CLR_VEL
|
||
|
||
MOVE @LAST_ROCKET,A14,L
|
||
CMP A14,A8
|
||
JRNE ARH_DONE
|
||
|
||
CLR A14
|
||
MOVE A14,@LAST_ROCKET,L
|
||
ARH_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ROCKET GUN AND COLLISION VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ROCKET_COLL
|
||
WWL OID_PROCKET,~MASK_PLAYER,ROCKET_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,ROCKET_EXPLOSION_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
ROCKET_ROCKET_COLL
|
||
MOVE A0,*A8(OATE_ROCKET),L ;SAVE ROCKET OBJECT
|
||
RETS
|
||
|
||
ROCKET_EXPLOSION_COLL
|
||
MOVE *A8(OATE_ROCKET),A14,L
|
||
JRZ RV_DONE ;BR=NO ROCKET COLLISION
|
||
CMP A0,A14
|
||
JRNE RV_DONE ;BR=DIFFERENT EXPLOSION
|
||
|
||
MOVE *A0(RL_INTENDED_OBJ),A14,L ;DO WE HAVE THE RIGHT TARGET?
|
||
CMP A8,A14
|
||
JRNE RV_DONE ;BR=NOPE. NOT THE RIGHT TARGET.
|
||
|
||
CLRM *A8(OATE_ROCKET),L ;HIT! READY FOR ANOTHER!
|
||
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA
|
||
|
||
ROCKET_GUNVECT
|
||
CALLA CLR_VEL
|
||
|
||
MOVE A0,A1
|
||
MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
|
||
MOVI 010000H,A0
|
||
CLR A3
|
||
CALLA PreFrag_Center
|
||
DEC B0
|
||
MOVI FRAG_ROCKET_EXPLODE,B14
|
||
CALLA Fragger
|
||
|
||
MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
MOVE A1,A0
|
||
|
||
MOVE @LAST_ROCKET,A14,L
|
||
CMP A14,A0
|
||
JANE DELETE_OBJ
|
||
|
||
CLR A14
|
||
MOVE A14,@LAST_ROCKET,L
|
||
|
||
JAUC DELETE_OBJ
|
||
RV_DONE
|
||
RETS
|
||
|
||
FRAG_ROCKET_EXPLODE
|
||
.long EXPLO_ANIM,0
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + (FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long 0
|
||
; .long EXPLO_ANIM,0
|
||
; .word OID_JUNK,(1 << 11) + (1 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
; .long EXPLO_ANIM,0
|
||
; .word OID_JUNK,(1 << 11) + (0 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
; .long 0
|
||
|
||
ROCKET_LAUNCHER_ANIM
|
||
LWLL 1,1|AFunc,A_GOSUB+2,MISSLE_LAUNCH_SUB_ANIM
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
LW 1,0
|
||
.long 0
|
||
|
||
MISSLE_LAUNCH_SUB_ANIM
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CMISSLE,MLSA_RETURN
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,-15*2,5*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,-6*2,6*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,8*2,5*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,18*2,5*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,-16*2,18*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,-7*2,19*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,7*2,19*2,1
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,18*2,18*2,1
|
||
MLSA_RETURN
|
||
LWL 1,1|AFunc,A_RETURN
|
||
|
||
ROCKET_SMOKE_INIT
|
||
.LONG MSLSMOKE2, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, 0
|
||
.LONG C_STRTANIM
|
||
.LONG ROCKET_SMOKE_ANIM
|
||
|
||
ROCKET_SMOKE_ANIM
|
||
LW 1,4
|
||
LW MSLSMOKE3,4
|
||
LW MSLSMOKE4,4
|
||
LW MSLSMOKE5,4
|
||
LW MSLSMOKE6,4
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
ROCKET_INIT
|
||
.LONG mossile1, ROCKET_COLL
|
||
.WORD OID_EROCKET, DMAWNZ, 0, 0
|
||
.LONG C_STRTANIM
|
||
.LONG ROCKET_PART1_ANIM
|
||
|
||
ROCKET_PART1_ANIM
|
||
LWL mossile1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL mossle1b,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL mossle1c,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL mossle1d,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
LWL 1,1|AFunc,A_ROCKET_WATCH
|
||
.long 0
|
||
|
||
ROCKET_FRAME_TIME EQU 4
|
||
|
||
ROCKET_PART2_ANIM
|
||
LWL mossile1,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL mossile2,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL mossile3,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL mossile4,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL mossile5,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL mossile6,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL mossile7,1|AFunc,A_CHECK_ROCKET_IMG
|
||
LWL 1,1|AFunc,A_ROCKET_8
|
||
ROCKET_PART2_HIT
|
||
; LWL 1,1|AFunc,A_ROCKET_HIT
|
||
|
||
LWL 1,1|AFunc,OBJ_CONST
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_ROCKET_HIT
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,8000H
|
||
LWL 1,1|AFunc,OBJ_CONST
|
||
LWL 1,2|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,8000H
|
||
LWL 1,2|AFunc,OBJ_CONST
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,2|AFunc,OBJ_ON_WNZ
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_MAKE_FIREBALL *
|
||
* *
|
||
* Anim Func to MAKE A FIREBALL FROM THE NOSE GUN. *
|
||
* *
|
||
* PASS: *
|
||
* A8 = NOSE GUN OBJECT *
|
||
* AARG+,L = FAILURE ADDRESS TO JUMP *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
;TAKEN FROM GXMONDOR.H
|
||
OCHEWEDROCKET EQU ODATA+050H ;UHB Rocket flag (for explosion)
|
||
OXACCEL EQU ODATA+090H ;UHW X acceleration
|
||
OPROJECT_PARENT EQU ODATA+0190H ;UHL Ptr to the object that spawned us
|
||
OPROJECT_TIME EQU ODATA+01B0H ;UHB Travel time for projectile
|
||
|
||
A_MAKE_FIREBALL
|
||
MOVE *A8(OPART1),A9,L ;HEAD OBJECT
|
||
LOCKON Z
|
||
|
||
MOVE @MISSLETIME_TABLE,A1,L
|
||
CALLR GET_PCENTRY ;LOAD SLEEP TIME
|
||
MOVE A14,A1
|
||
SLL 8,A14
|
||
OR A1,A14
|
||
MOVE A14,*A8(AnimSLP),W ;LOAD BOTH SLEEPS
|
||
|
||
MOVE *A9(OCOMMAND),A14,W
|
||
BTST B_CMISSLE,A14
|
||
JRZ AMF_X ;BR=NO MISSLES ALLOWED
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_OFSCRN,A14
|
||
JRNZ AMF_X ;BR=GENERATOR OFF SCREEN
|
||
|
||
; MOVE *A8(OHITS),A14,W
|
||
; JRZ AMF_X ;BR=GENERATOR DEAD
|
||
; JRN AMF_X ;BR=GENERATOR DEAD
|
||
|
||
MOVI FIRE_BALL_INIT_C,B0
|
||
CALLA EASYMAKE
|
||
JRZ AMF_X ;No objects available
|
||
|
||
MOVI [-45*2,0],A3
|
||
MOVE A3,*A0(OPARTSXY),L ;Just to position us
|
||
|
||
MOVE *A9(OXVAL),A1,L
|
||
MOVE *A9(OYVAL),A2,L
|
||
MOVE *A9(OZVAL),A3,L
|
||
SUBK 32,A3
|
||
|
||
MOVE @LAST_ROCKET,A14,L
|
||
JRZ AMF_LAST
|
||
MOVE *A14(OZVAL),A14,L
|
||
CMP A14,A3
|
||
JRLT AMF_NOLAST ;BR=THE "LAST" ROCKET IS FARTHER IN Z
|
||
AMF_LAST
|
||
MOVE A0,@LAST_ROCKET,L
|
||
AMF_NOLAST
|
||
|
||
CALLA SETOFFPU
|
||
|
||
MOVE A8,*A0(OPROJECT_PARENT),L ;Tell us our roots
|
||
|
||
MOVE *A9(OZVEL),A14,L ;Transfer Z velocity only if Enemy
|
||
JRP AMF_INSERT ;is not moving away from the screen
|
||
MOVE A14,*A0(OZVEL),L
|
||
AMF_INSERT
|
||
CALLA INSOBJ
|
||
|
||
RETS
|
||
AMF_X
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L
|
||
RETS
|
||
|
||
*Initialize Mondor's fire ball
|
||
FIRE_BALL_INIT_C
|
||
.LONG LILPLAZ1
|
||
.WORD DMAWNZ, M_DBLSCL, OM_OID|OM_COLL|OM_ANIM|OM_CFUNC
|
||
.WORD OID_JUNK
|
||
.LONG DUMCOLL, ANIM_FIRE_BALL_C, C_FIREBALL
|
||
|
||
*Animate the fire ball
|
||
ANIM_FIRE_BALL_C
|
||
LWL 1,1|AFunc,A_FIRE_BALL_TARGET_C
|
||
LW LILPLAZ2,2
|
||
LW LILPLAZ3,2
|
||
LW LILPLAZ1,2
|
||
LWL LILPLAZ2,2|AFunc,A_FB_COLLS_ON
|
||
ANIM_FB_LOOP_C
|
||
LWL LILPLAZ3,2|AFunc,A_CHECK_FB_SCREEN_HIT_C
|
||
LWL LILPLAZ1,2|AFunc,A_CHECK_FB_SCREEN_HIT_C
|
||
LWL LILPLAZ2,1|AFunc,A_CHECK_FB_SCREEN_HIT_C
|
||
LWLL 1,1|AFunc,A_ONSCREEN+2,ANIM_FB_LOOP_C
|
||
LWL 1,1|AFunc,DELETE_OBJ_PROC
|
||
|
||
*FireBall hits the screen
|
||
ANIM_FB_HIT_C
|
||
LWL 1,1|AFunc,OBJ_CONST
|
||
LWL 1,1|AFunc,OBJ_UNIV_TO_SCRN ;Make this stick
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,-8000H
|
||
LWL 1,2|AFunc,OBJ_CONST
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,-8000H
|
||
LWL 1,2|AFunc,OBJ_CONST
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,-8000H
|
||
LWL 1,2|AFunc,OBJ_CONST
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,-8000H
|
||
LWL 1,2|AFunc,OBJ_CONST
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,OBJ_ON_WNZ
|
||
LWLLL 1,1|AFunc,A_CK_PHIT+4,0,-8000H
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_FIRE_BALL_TARGET_C *
|
||
* *
|
||
* Anim func to set up the velocities and what not for *
|
||
* the fire ball FROM COPTER. *
|
||
* *
|
||
* A8 = ptr to the fire ball object *
|
||
* *
|
||
**************************************************************************
|
||
A_FIRE_BALL_TARGET_C
|
||
MOVI 800,A0
|
||
CALLA RANDPER ;This is the chance that we target
|
||
JRNC AFBTC_FULL_SCREEN ;BR = Not this time
|
||
|
||
CALLA GET_PLAYER_EXTENTS
|
||
JRUC AFBTC_PICK_TARGET
|
||
|
||
AFBTC_FULL_SCREEN
|
||
MOVI [SCRTOP+SKYTOPOF,SCRLFT],A2
|
||
MOVI [SCRBOT,SCRRGT],A3
|
||
|
||
AFBTC_PICK_TARGET
|
||
MOVY A2,A0
|
||
MOVY A3,A1
|
||
CALLA RANGERND
|
||
SRA 16,A0
|
||
MOVE A0,A5
|
||
|
||
MOVX A2,A0
|
||
SEXT A0
|
||
MOVX A3,A1
|
||
SEXT A1
|
||
CALLA RANGERND
|
||
MOVE A0,A1
|
||
|
||
MOVE A5,A3
|
||
|
||
MOVE @ZBASE,A5,L
|
||
ADDI ZMAX_REAL2,A5
|
||
|
||
STOUXY A5,A1,A3
|
||
|
||
MOVE *A8(OXVAL),A2,L
|
||
MOVE *A8(OYVAL),A4,L
|
||
MOVE *A8(OZVAL),A6,L
|
||
|
||
MOVI 45,A7
|
||
MOVB A7,*A8(OPROJECT_TIME)
|
||
|
||
CALLA SLINEVEL_LOAD_3D
|
||
|
||
MOVE *A8(OPROJECT_PARENT),A0,L ;Get the guy that created us
|
||
CALLA GETHEADPART ;Get some head
|
||
|
||
MOVE *A0(OZVAL),A14,L
|
||
CMP A14,A6 ;Is fireball already behind Mondor?
|
||
JAGT DELETE_OBJ_PROC ;BR = Yes
|
||
|
||
MOVE *A8(OZVEL),A1,L
|
||
MOVE *A0(OZVEL),A14,L
|
||
CMP A14,A1 ;Is Mondor moving faster than the fireball?
|
||
JAGT DELETE_OBJ_PROC ;BR = Yes, delete
|
||
|
||
MOVE @WING_COUNT,A14,W
|
||
JRNZ AFBTC_NORMAL_ARC ;BR=WE AT LEAST ONE WING
|
||
MOVI 90000H,A0
|
||
JRUC AFBTC_CALC_ARC
|
||
AFBTC_NORMAL_ARC
|
||
MOVI 40000H,A0
|
||
AFBTC_CALC_ARC
|
||
CALLA SRAND
|
||
ADDRM A0,*A8(OXVEL),L
|
||
MOVE A0,A1
|
||
MOVI 45/2,A0
|
||
DIVS A0,A1
|
||
NEG A1
|
||
MOVE A1,*A8(OXACCEL),W
|
||
|
||
SOUNDZ SND_FIRE_HISS
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_FB_SCREEN_HIT_C *
|
||
* *
|
||
* Anim func to check if FireBall FROM COPTER hit the screen. *
|
||
* *
|
||
* A8 = ptr to FireBall *
|
||
* *
|
||
**************************************************************************
|
||
A_CHECK_FB_SCREEN_HIT_C
|
||
MOVI SND_FB_HIT_SCRN,A4
|
||
MOVI ANIM_FB_HIT_C,A5
|
||
JAUC CHECK_SCREEN_HIT
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_INIT_LAUNCHER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_INIT_LAUNCHER
|
||
MOVE *B0+,B14,L
|
||
MOVE B14,A1
|
||
MOVE A1,*A0(OATTACKANIM),L
|
||
CALLA STRTANIM
|
||
|
||
CLR A14
|
||
MOVE A14,*A0(ONORMAL_PAL),L
|
||
MOVE A14,*A0(ODAMANIM),L
|
||
MOVE A14,*A0(OFLASHOBJ),L
|
||
|
||
JRUC C_SET_HITS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_INIT_GUN *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_INIT_GUN
|
||
MOVE A0,B14
|
||
ADDI ONORMAL_PAL,B14
|
||
MOVE *B0+,*B14+,L ;NORMAL PALETTE
|
||
MOVE *B0+,*B14+,L ;HILITE PALETTE
|
||
MOVE *B0+,B3,L ;ATTACK ANIMATION
|
||
MOVE B3,*B14+,L
|
||
MOVE *B0+,*B14+,W ;FIRE ANIMATION OFFSET
|
||
ADDK 010H,B14
|
||
MOVE *B0+,*B14+,L ;SOUND
|
||
MOVE *B0+,*B14+,L ;DAMAGE ANIMATION
|
||
MOVE *B0+,*B14+,L ;FLASH INIT TABLE
|
||
MOVE *B0+,*B14+,L ;FLASH OFFSET
|
||
CLR B1
|
||
MOVE B1,*B14,L ;CLEAR FLASH OBJECT
|
||
|
||
MOVE B3,A1
|
||
JRZ CIG_DONE
|
||
CALLA STRTANIM
|
||
CIG_DONE
|
||
JRUC C_SET_HITS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_SET_HITS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_SET_HITS
|
||
MOVE *B0+,B14,W
|
||
MOVE B14,A14
|
||
MOVE A14,*A0(OHITS),W
|
||
CLR A14
|
||
MOVE A14,*A0(OHITTIME),L ;CLEAR OHITTIME AND OHITCOUNT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_RESTART_GAT_ANIM - RESTART GAT GUN FLASHES WHERE THEY LEFT OFF *
|
||
* *
|
||
* PASS: *
|
||
* A8 = GAT GUN OBJ *
|
||
* A0 = FLASH OBJ *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_RESTART_GAT_ANIM
|
||
MOVE *A8(OFLASHANIM),A1,L
|
||
MOVI GATFLASH_ANIM,A14
|
||
JAUC STRTANIM_OFF
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_CHANGE_ENGINE_PAL - CREATE A DIFFERENT PALETTE FOR THE ENGINE COLOR *
|
||
* CYCLE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
C_CHANGE_ENGINE_PAL
|
||
MOVE A0,A8
|
||
MOVI gGRAD2cy2,A0
|
||
CALLA CHANGE_PAL
|
||
;A8 GETS RESTORED AFTER WE RETURN
|
||
RETS
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER FRAGMENTS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FRAG_C1
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + 0
|
||
.long 0
|
||
|
||
FRAG_C2
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + 0
|
||
.long 0
|
||
|
||
FRAG_C5
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(2 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + 0
|
||
.long 0
|
||
|
||
FRAG_C10
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(2 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(2 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(2 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(2 << 11) + (1 << 6) + 0
|
||
.long FRAG_UANIM,F_UFRAG_STUFF_X2
|
||
.word OID_JUNK,(2 << 11) + (0 << 6) + 0
|
||
.long 0
|
||
|
||
FRAG_CS4
|
||
.long FRAG_SHARD_ANIM,F_UFRAG_STUFF
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + 0
|
||
.long FRAG_SHARD_ANIM,F_UFRAG_STUFF
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + 0
|
||
.long FRAG_SHARD_ANIM,F_UFRAG_STUFF
|
||
.word OID_JUNK,(1 << 11) + (1 << 6) + 0
|
||
.long FRAG_SHARD_ANIM,F_UFRAG_STUFF
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + 0
|
||
.long 0
|
||
|
||
YELLOW_METAL_CHUNK:
|
||
.word 32
|
||
.word 0001fh,051a0h,055c0h,059e0h,06200h,06220h,05e00h,04d80h
|
||
.word 06620h,06a40h,06640h,06640h,06a60h,059c0h,06620h,06e80h
|
||
.word 072a1h,07ae3h,07281h,06200h,07f04h,07ac2h,076c2h,076a2h
|
||
.word 05de0h,07f25h,06e60h,07ac3h,07ee3h,06e60h,07f26h,07febh
|
||
|
||
GRAY_METAL_CHUNK:
|
||
.word 32
|
||
.word 0001fh,01063h,01484h,018a5h,020c7h,020e7h,01cc6h,00c42h
|
||
.word 024e8h,02909h,02508h,02507h,02929h,01885h,024e7h,02d4ah
|
||
.word 0316bh,039adh,0314bh,020c6h,03dceh,0398ch,0358ch,0356ch
|
||
.word 01ca6h,041efh,02d2ah,0398dh,03dadh,02d29h,045f0h,05ab5h
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* F_CFRAG_STUFF *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;F_CFRAG_STUFF
|
||
; MOVE *A0(OFLAGS),A14,W
|
||
; ORI M_DBLSCL,A14
|
||
; MOVE A14,*A0(OFLAGS),W
|
||
;
|
||
; JAUC F_UFRAG_STUFF ;TAKE CARE OF THE PALETTE STUFF
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* A_BIG_EXPLO *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;A_BIG_EXPLO
|
||
; MOVI EXPLO_INIT,A5
|
||
; CALLA CREATE_OBJ
|
||
; JRZ ABE_DONE
|
||
;
|
||
; MOVE *A0(OFLAGS),A14,W
|
||
; ORI M_MANSCALE,A14
|
||
; MOVE A14,*A0(OFLAGS),W
|
||
;
|
||
; MOVE *A8(OXVAL),A2,L
|
||
; MOVE A2,*A0(OXVAL),L
|
||
;
|
||
; MOVE *A8(OYVAL),A4,L
|
||
; SUBI 60*2 << 15,A4
|
||
; MOVE A4,*A0(OYVAL),L
|
||
;
|
||
; MOVE *A8(OZVAL),A5,L
|
||
; SUBK 9,A5
|
||
; MOVE A5,*A0(OZVAL),L
|
||
;
|
||
; MOVE A0,A8
|
||
; MOVE @ZBASE,A14,L
|
||
; SUB A14,A5
|
||
; SRL Z2SCALE+3,A5
|
||
; CALLA SET_SCALE_MANUAL
|
||
;
|
||
; CALLA INSOBJ
|
||
;
|
||
; SOUND1 SND_CHAN3_OFF
|
||
; SOUND1 SND_FINAL_EXPLO_COPTER
|
||
;ABE_DONE
|
||
; RETS
|
||
|
||
EXPLO_INIT
|
||
.LONG FHKEXPLOB1, 0
|
||
; .WORD OID_JUNK, DMAWNZ, M_MANSCALE, 0
|
||
.WORD OID_JUNK, DMAWNZ, 0, 0
|
||
.LONG C_STRTANIM
|
||
.LONG EXPLO_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DELETE_COPTER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_DELETE_COPTER
|
||
; CLR A14
|
||
; MOVE A14,@COPTER_OBJ,L
|
||
MOVE *A8(OPLAYER),A2,L
|
||
JAUC DELETE_ENEMY
|
||
|
||
SHAKE_SUB_ANIM
|
||
LWL 1,2|AFunc,A_SHAKE_COPTER
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,SHAKE_SUB_ANIM
|
||
LWL 1,1|AFunc,A_RETURN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ADD_FIRE - FIRE GOOD! *
|
||
* *
|
||
* PASS: *
|
||
* A5 = FIRE INIT TABLE *
|
||
* A8 = OBJECT (PART OR HEAD) *
|
||
* A9 = OPARTSXY *
|
||
* A10 = FLIP BITS *
|
||
* RETURN: *
|
||
* A0 = NEW OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ADD_FIRE
|
||
MMTM SP,A2,A8
|
||
CALLA CREATE_OBJ
|
||
JRZ AF_DONE
|
||
|
||
MOVE *A0(OCTRL),A14,W
|
||
OR A10,A14
|
||
MOVE A14,*A0(OCTRL),W
|
||
|
||
MOVE A9,*A0(OPARTSXY),L
|
||
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
CALLA SETOFFPU
|
||
|
||
CALLA INSOBJ
|
||
CALLA INSPART
|
||
AF_DONE
|
||
MMFM SP,A2,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SIDE_SMOKE - MAKE SMOKE FOR THE SIDE FIRE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = FIRE OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SIDE_SMOKE
|
||
MOVI 768,A0
|
||
CALLA RANDPER
|
||
JRNC ASS_DONE ;BR=THANK YOU FOR NOT SMOKING
|
||
|
||
MOVI SIDE_SMOKE_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JRZ ASS_DONE ;BR=GOT NO SMOKE
|
||
|
||
MOVE *A8(OCTRL),A10,W
|
||
MOVI 76*2 << 15,A1
|
||
BTST B_FLIPH,A10
|
||
JRZ ASS_XVAL_OK ;BR=NO FLIP
|
||
NEG A1
|
||
ASS_XVAL_OK
|
||
MOVE *A8(OXVAL),A14,L
|
||
SUB A1,A14
|
||
MOVE A14,*A0(OXVAL),L
|
||
|
||
MOVE *A8(OYVAL),A14,L
|
||
ADDI 91*2 << 15,A14
|
||
MOVE A14,*A0(OYVAL),L
|
||
|
||
MOVE *A8(OZVAL),A14,L
|
||
SUBK 32,A14
|
||
MOVE A14,*A0(OZVAL),L
|
||
|
||
MOVE A0,A7
|
||
|
||
MOVI 0100000H,A0
|
||
MOVI 010000H,A1
|
||
CALLA RANGERND
|
||
BTST B_FLIPH,A10
|
||
JRNZ ASS_XVEL_OK ;BR=NO FLIP
|
||
NEG A0
|
||
ASS_XVEL_OK
|
||
MOVE @XSCROLL,A14,L
|
||
ADD A14,A0
|
||
MOVE A0,*A7(OXVEL),L
|
||
|
||
MOVI 010000H,A0
|
||
MOVI -010000H,A1
|
||
CALLA RANGERND
|
||
MOVE @YSCROLL,A14,L
|
||
SUB A14,A0
|
||
MOVE A0,*A7(OYVEL),L
|
||
|
||
MOVE A7,A0
|
||
|
||
MOVE @RAND,A14,W
|
||
ANDI M_FLIPH|M_FLIPV,A14
|
||
MOVE *A0(OCTRL),A1,W
|
||
OR A14,A1
|
||
MOVE A1,*A0(OCTRL),W
|
||
|
||
CALLA INSOBJ
|
||
ASS_DONE
|
||
RETS
|
||
|
||
SIDE_SMOKE_INIT
|
||
.LONG SMOKTR1, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, 0
|
||
.LONG C_STRTANIM
|
||
.LONG COPTER_SMOKE_ANIM
|
||
|
||
SIDE_FIRE_INIT
|
||
.LONG FHKE5F1FIRE1, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, -1
|
||
.LONG C_STRTANIM
|
||
.LONG SIDE_FIRE_ANIM
|
||
|
||
SIDE_FIRE_ANIM
|
||
LWL FHKE5F1FIRE1,1|AFunc,A_SIDE_SMOKE
|
||
LW FHKE5F1FIRE2,1
|
||
LW FHKE5F1FIRE3,1
|
||
LW FHKE5F1FIRE4,1
|
||
LW FHKE5F1FIRE5,1
|
||
LW FHKE5F1FIRE6,1
|
||
.long 0
|
||
|
||
FUSE_FIRE_START_ANIM
|
||
LWLL HFIREA1,3|AFunc,A_CHANGE_PAL+2,FIRE2PAL
|
||
FUSE_FIRE_ANIM
|
||
LW HFIREA2,3
|
||
LW HFIREA3,3
|
||
LW HFIREA4,3
|
||
LW HFIREA5,3
|
||
LW HFIREA6,3
|
||
LW HFIREA1,3
|
||
.long 0
|
||
|
||
ENGINE_FIRE_INIT
|
||
.LONG HDFLAM1, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, -2
|
||
.LONG C_STRTANIM
|
||
.LONG ENGINE_FIRE_ANIM
|
||
|
||
ENGINE_FIRE_ANIM
|
||
LWL HDFLAM1,3|AFunc,A_ENGINE_SMOKE
|
||
LW HDFLAM2,3
|
||
LW HDFLAM3,3
|
||
LW HDFLAM4,3
|
||
LW HDFLAM5,3
|
||
LW HDFLAM6,3
|
||
LW HDFLAM7,3
|
||
.long 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ENGINE_SMOKE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_ENGINE_SMOKE
|
||
MOVI 010000H,A0
|
||
CLR A3
|
||
calla PreFrag_Box
|
||
INC B0
|
||
MOVI COPTER_SMOKE_FRAG,B14
|
||
JAUC Fragger
|
||
|
||
|
||
COPTER_SMOKE_FRAG
|
||
.long COPTER_SMOKE_ANIM,F_DOUBLE_SCALE
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + (FRGBOG+FRGNOFLY+FRGPAL)
|
||
.long COPTER_SMOKE_ANIM,F_DOUBLE_SCALE
|
||
.word OID_JUNK,(1 << 11) + (3 << 6) + (FRGBOG+FRGNOFLY+FRGPAL)
|
||
.long COPTER_SMOKE_ANIM,F_DOUBLE_SCALE
|
||
.word OID_JUNK,(1 << 11) + (3 << 6) + (FRGBOG+FRGNOFLY+FRGPAL)
|
||
.long COPTER_SMOKE_ANIM,F_DOUBLE_SCALE
|
||
.word OID_JUNK,(1 << 11) + (3 << 6) + (FRGBOG+FRGNOFLY+FRGPAL)
|
||
.long 0
|
||
|
||
F_DOUBLE_SCALE
|
||
ORIM M_DBLSCL,*A0(OFLAGS),W
|
||
RETS
|
||
|
||
COPTER_SMOKE_ANIM
|
||
LW SMOKTR1,3
|
||
LW SMOKTR2,3
|
||
LW SMOKTR3,3
|
||
LW SMOKTR4,4
|
||
LW SMOKTR5,4
|
||
LW SMOKTR6,4
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_STUTTER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_STUTTER
|
||
MOVK 1,A9
|
||
|
||
MOVE *A8(OPART1),A2,L
|
||
LOCKON Z
|
||
MOVE *A2(OSTUTTER),A3,W
|
||
JRZ ACS_SET
|
||
JRN ACS_SET
|
||
MOVE A3,A0
|
||
CALLA RANDPER
|
||
JRNC ACS_SET
|
||
|
||
NEG A3
|
||
MOVE A3,*A2(OSTUTTER),W
|
||
|
||
MOVE *A2(OCOMMAND),A14,W
|
||
BTST B_CHOVER,A14
|
||
JRZ ACS_NOSTOP
|
||
|
||
CLR A14
|
||
MOVE A14,*A2(OXVEL),L
|
||
; MOVI 08000H,A14
|
||
MOVE A14,*A2(OYVEL),L
|
||
MOVE A14,*A2(OZVEL),L
|
||
ACS_NOSTOP
|
||
MOVK 20,A0
|
||
MOVI 10,A1
|
||
CALLA RANGERND
|
||
MOVE A0,A9
|
||
|
||
SOUND1 SND_CHAN3_OFF
|
||
CREATE PID_IND,RESTART_COPTER_SND_PROC
|
||
ACS_SET
|
||
MOVB A9,*A8(AnimSLP)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* RESTART_COPTER_SND_PROC *
|
||
* *
|
||
**************************************************************************
|
||
|
||
RESTART_COPTER_SND_PROC
|
||
INC A9
|
||
SLEEPR A9
|
||
SOUND0 SND_COPTER_FULL
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_RESET_STUTTER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_RESET_STUTTER
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
MOVE *A0(OSTUTTER),A14,W
|
||
JRNN ARS_DONE
|
||
NEG A14
|
||
MOVE A14,*A0(OSTUTTER),W
|
||
ARS_DONE
|
||
RETS
|
||
|
||
SHAKE_ANIM
|
||
LWL 1,2|AFunc,A_SHAKE_COPTER
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,SHAKE_ANIM
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SHAKE_COPTER *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SHAKE_COPTER
|
||
MOVE *A8(OCOMMAND),A1,W
|
||
|
||
; MOVE @DESTROYING_PARTS,A14,W
|
||
; JRNZ ASC_GO ;BR=SHAKE IF DESTROYING PART
|
||
|
||
BTST B_CHOVER,A1
|
||
JRZ ASC_ABORT ;BR=DON'T SHAKE WERE NOT HOVERIN
|
||
|
||
MOVB *A8(OSHAKERADIUS),A5
|
||
SLL 15,A5 ;WORLD SHAKE RADIUS
|
||
;ASC_GO
|
||
BTST B_CFINAL,A1
|
||
JRNZ ASC_FINAL ;BR=THIS IS THE FINAL BATTLE
|
||
|
||
; CLR A14
|
||
; MOVE A14,*A8(OZVEL),L
|
||
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A1,A2,A3
|
||
MOVE A3,A4
|
||
MOVE A1,A3
|
||
|
||
;
|
||
CLR A0
|
||
CLR A1
|
||
|
||
MOVE A2,A6
|
||
|
||
MOVE @COPTER_OBJ,A14,L
|
||
JRNZ ASC_YGO ;BR=NOT THE FINAL CASE
|
||
SUBI 70 << 15,A6
|
||
ASC_YGO
|
||
MOVE @YBASE,A14,L
|
||
ADD A14,A6
|
||
JRN ASC_GO_DOWN
|
||
;
|
||
MOVE A5,A1
|
||
NEG A1
|
||
;
|
||
JRUC ASC_GET_YOFF
|
||
ASC_GO_DOWN
|
||
;
|
||
MOVE A5,A0
|
||
;
|
||
ASC_GET_YOFF
|
||
;
|
||
CALLA RANGERND
|
||
ADD A0,A2
|
||
;
|
||
CLR A0
|
||
CLR A1
|
||
|
||
MOVE A4,A6
|
||
MOVE @XBASE,A14,L
|
||
SUB A14,A6
|
||
JRN ASC_GO_RIGHT
|
||
;
|
||
MOVE A5,A1
|
||
NEG A1
|
||
;
|
||
JRUC ASC_GET_XOFF
|
||
ASC_GO_RIGHT
|
||
;
|
||
MOVE A5,A0
|
||
;
|
||
ASC_GET_XOFF
|
||
;
|
||
CALLA RANGERND
|
||
ADD A0,A4
|
||
|
||
MOVE A4,A1
|
||
|
||
CALLA SET_ANIPU
|
||
ASC_ABORT
|
||
RETS
|
||
ASC_FINAL ;SHAKE DURING FINAL SEQUENCE
|
||
CALLR COPTER_ONSCRN
|
||
MOVE A0,A6
|
||
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A1,A2,A3 ;UNIVERSE Y (A2)
|
||
MOVE A3,A4 ;UNIVERSE X (A4)
|
||
MOVE A1,A3 ;UNIVERSE Z (A3)
|
||
|
||
MOVE A2,A1 ;TOP UNIVERSE Y
|
||
MOVE A2,A0 ;BOTTOM UNIVERSE Y
|
||
BTST 2,A6
|
||
JRNZ ASC_F_CHECK_BOTTOM ;BR=VIOLATES TOP
|
||
SUB A5,A1
|
||
ASC_F_CHECK_BOTTOM
|
||
BTST 3,A6
|
||
JRNZ ASC_F_GET_Y ;BR=VIOLATES BOTTOM
|
||
ADD A5,A0
|
||
ASC_F_GET_Y
|
||
CALLA RANGERND
|
||
MOVE A0,A2
|
||
|
||
MOVE A4,A1 ;LEFT UNIVERSE X
|
||
MOVE A4,A0 ;RIGHT UNIVERSE X
|
||
BTST 0,A6
|
||
JRNZ ASC_F_CHECK_RIGHT ;BR=VIOLATES LEFT
|
||
SUB A5,A1
|
||
ASC_F_CHECK_RIGHT
|
||
BTST 1,A6
|
||
JRNZ ASC_F_GET_X ;BR=VIOLATES RIGHT
|
||
ADD A5,A0
|
||
ASC_F_GET_X
|
||
CALLA RANGERND
|
||
MOVE A0,A1
|
||
|
||
CALLA SET_ANIPU
|
||
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_ONSCRN *
|
||
* *
|
||
* PASS: *
|
||
* A8 = HEAD COPTER OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* A0 = BOUNDARIES VIOLATED *
|
||
* LEFT=BIT 0, RIGHT=BIT 1, TOP=BIT 2, BOTTOM=BIT 3 *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_ONSCRN
|
||
MOVE *A8(OZVAL),A0,L
|
||
CALLR SETUP_OFFSCRN_TABLE_PTR
|
||
|
||
CLR A0 ;CLEAR BOUNDARY VIOLATIONS
|
||
|
||
MOVE *A2+,A1,W ;GET PACKED WORLD X BOUNDARY
|
||
SLL 12,A1 ;UNPACK WORLD X BOUNDARY
|
||
SUBI (144*2) << 15,A1 ;OFFSET FROM EDGE OF BOUNDARY
|
||
MOVE *A8(OXVAL),A3,L
|
||
MOVE @XBASE,A14,L
|
||
SUB A14,A3
|
||
CMP A1,A3
|
||
JRLT CO_CHECK_LEFT ;BR=WITHIN WORLD RIGHT X
|
||
ORI 2,A0
|
||
CO_CHECK_LEFT
|
||
NEG A1
|
||
CMP A1,A3
|
||
JRGT CO_CHECK_TB ;BR=WITHIN WORLD LEFT X
|
||
ORI 1,A0
|
||
CO_CHECK_TB
|
||
MOVE *A2,A1,L ;GET PACKED WORLD Y [BOT, TOP]
|
||
SEXT A1,W
|
||
SLL 12,A1 ;UNPACK WORLD Y TOP BOUNDARY
|
||
ADDI (122*2) << 15,A1 ;OFFSET FROM EDGE OF BOUNDARY
|
||
|
||
MOVE *A8(OYVAL),A3,L
|
||
CMPI ABOVE_BUILDING_UNIVY,A3
|
||
JRLT CO_CHECK_TOP ;BR=WITHIN WORLD BOTTOM Y
|
||
ORI 8,A0
|
||
CO_CHECK_TOP
|
||
MOVE @YBASE,A14,L
|
||
ADD A14,A3
|
||
CMP A1,A3
|
||
JRGT CO_DONE ;BR=WITHIN WORLD TOP Y
|
||
ORI 4,A0
|
||
CO_DONE
|
||
RETS
|
||
|
||
|
||
FRAG_ONE_EXPLO
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long 0
|
||
|
||
FRAG_THREE_EXPLO
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long 0
|
||
|
||
FRAG_DAMAGE_EXPLO
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (6 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long EXPLO_ANIM,F_ONE_EXPLO_STUFF
|
||
.word OID_JUNK,(1 << 11) + (0 << 6) + (FRGBOG+FRGNOFLY+FRGNOFLP+FRGPAL)
|
||
.long 0
|
||
|
||
F_ONE_EXPLO_STUFF
|
||
MOVE *A0(OFLAGS),A14,W
|
||
ORI M_DBLSCL,A14
|
||
MOVE A14,*A0(OFLAGS),W
|
||
|
||
RETS
|
||
|
||
EXPLO_ANIM
|
||
LWLL FHKEXPLOB1,6|AFunc,A_SOUND+2,SND_EXPLO_COPTER
|
||
LW FHKEXPLOB2,8
|
||
LW FHKEXPLOB3,6
|
||
LW FHKEXPLOB4,4
|
||
LW FHKEXPLOB5,4
|
||
LW FHKEXPLOB6,3
|
||
LW FHKEXPLOB7,3
|
||
LW FHKEXPLOB8,2
|
||
LW FHKEXPLOB9,2
|
||
LW FHKEXPLOB10,2
|
||
LW FHKEXPLOB11,2
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DUM_FLASH_PROC - FLASH AN OBJECT BUT DON'T CARE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DUM_FLASH_PROC
|
||
SETF 4,0,0 ;FIELD 0 IS 4 BITS
|
||
MOVE *A8(OCTRL),A14,0
|
||
CMPK 8,A14 ;DMACNZ
|
||
JREQ DFP_NOFLASH ;BR=WE'RE CONSTANT ALREADY!
|
||
MOVK 8,A14 ;DMACNZ
|
||
MOVE A14,*A8(OCTRL),0
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
|
||
SLEEP 3
|
||
|
||
SETF 4,0,0 ;FIELD 0 IS 4 BITS
|
||
MOVK 2,A14 ;DMAWNZ
|
||
MOVE A14,*A8(OCTRL),0
|
||
DFP_NOFLASH
|
||
SETF 16,1,0 ;WORD SIGN EXTEND
|
||
DIE
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BLOW_PART - DESTROY A PART WITH EXPLOSIONS AND FRAGMENTS *
|
||
* *
|
||
* PASS: *
|
||
* A1 = RIGHT MINIMUM X VELOCITY (LEFT IF UNFLIPPED) *
|
||
* A2 = RIGHT MAXIMUM X VELOCITY (LEFT IF UNFLIPPED) *
|
||
* A3 = MINIMUM Y VELOCITY *
|
||
* A4 = MAXIMUM Y VELOCITY *
|
||
* A5 = RIGHT [Y, X] PIXEL OFFSET FROM ANIMATION POINT (LEFT IF UNFLIPPED)*
|
||
* A6 = SHAKE RADIUS *
|
||
* A7 = FRAGMENT SCRIPT *
|
||
* A8 = OBJECT TO DESTROY *
|
||
* A9 = NUMBER OF TIME TO BLOW *
|
||
* A10= CALL THIS ROUTINE AFTER BLOWN (DELETE PART IF ZERO) *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DUP_PART
|
||
PUSH A1
|
||
MOVI DUP_PART_ANIM,A1
|
||
JRUC BP_GO
|
||
BLOW_PART
|
||
PUSH A1
|
||
MOVI BLOW_PART_ANIM,A1
|
||
BP_GO
|
||
CALLA STRT_ANIM
|
||
PULLQ A1
|
||
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ BP_NOPROC
|
||
CALLA KILL
|
||
BP_NOPROC
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
INC A14
|
||
MOVE A14,@DESTROYING_PARTS,W
|
||
|
||
MOVI DUMRETS,A14
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
MOVI DUMCOLL,A14
|
||
MOVE A14,*A8(OCVECT),L
|
||
|
||
; CLR A14
|
||
; MOVB A14,*A8(OPARTID)
|
||
|
||
MOVE A8,A14
|
||
ADDI OMINXVEL+020H,A14
|
||
MMTM A14,A1,A2,A3,A4,A5,A6,A7,A10
|
||
|
||
MOVB A9,*A8(AnimLoop)
|
||
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
|
||
MOVE A6,A6
|
||
JRZ BP_NOSTOP ;BR=NO SHAKE, NO STOP
|
||
CLR A14
|
||
MOVE A14,*A0(OXVEL),L
|
||
MOVE A14,*A0(OYVEL),L
|
||
MOVE A14,*A0(OZVEL),L
|
||
MOVE A14,*A0(OYACCEL),W ;YOU BIG DUMMY!
|
||
BP_NOSTOP
|
||
MOVE *A0(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1
|
||
CMPI ZMAX_KLUDGE,A1
|
||
JRGT BP_DONE ;BR=NOT BEFORE THE CLOSEST Z
|
||
MOVE *A0(OXVAL),A1,L
|
||
MOVE *A0(OYVAL),A2,L
|
||
MOVI ZMAX_REAL,A3 ;PLACE ON SCREEN
|
||
MOVE A8,A4
|
||
MOVE A0,A8
|
||
CALLA SET_ANIPU ;MOVE COPTER THERE
|
||
MOVE A4,A8
|
||
BP_DONE
|
||
RETS
|
||
|
||
BLOW_PART_ANIM
|
||
LWL 1,0|AFunc,A_BLOW_PART
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,BLOW_PART_ANIM
|
||
LWL 1,1|AFunc,A_BLOWN_PART
|
||
|
||
DUP_PART_ANIM
|
||
LWL 1,0|AFunc,A_BLOW_DUP
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,DUP_PART_ANIM
|
||
LWL 1,1|AFunc,A_BLOWN_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOWN_PART - PART IS BLOWN SO DELETE IT *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_BLOWN_PART
|
||
MOVE @DESTROYING_PARTS,A14,W
|
||
DEC A14
|
||
MOVE A14,@DESTROYING_PARTS,W
|
||
MOVE *A8(OBLOWN_ROUTINE),A1,L
|
||
JAZ DELETE_OBJ ;BR=NO ROUTINE, JUST DELETE
|
||
CALLA PULL_ANIM
|
||
JUMP A1
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_DUP - BLOW A DUPLICATE PART FROM THE ORIGINAL *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT TO BLOW *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_BLOW_DUP
|
||
MOVI 512,A0
|
||
CALLA RANDPER
|
||
JRC A_BLOW_PART ;BR=MAKE AN EXPLOSION THIS TIME
|
||
|
||
MOVE *A8(OZVAL),A9,L
|
||
SUBK 32,A9
|
||
|
||
MOVE @ZBASE,A10,L
|
||
SUB A10,A9
|
||
CMPI ZMAX_KLUDGE,A9
|
||
JRLT ABP_ABORT ;BR=BEFORE CLOSEST Z
|
||
|
||
MOVE *A8(ODUP_INIT),A5,L
|
||
CALLA CREATE_OBJ
|
||
JRZ ABP_ABORT
|
||
|
||
MOVE *A8(OXVAL),*A0(OXVAL),L
|
||
MOVE *A8(OYVAL),*A0(OYVAL),L
|
||
MOVE *A8(OZVAL),*A0(OZVAL),L
|
||
|
||
MOVE A0,A7
|
||
|
||
MOVE A8,A14
|
||
ADDI OFRAG_SCRIPT,A14
|
||
MMFM A14,A0,A1,A2,A3,A4,A6,A11 ;A4 IS NOT USED
|
||
|
||
SLL 1,A0
|
||
SLL 1,A1
|
||
SLL 1,A2
|
||
SLL 1,A3
|
||
|
||
CALLA RANGERND
|
||
MOVE *A8(OCTRL),A14,W
|
||
ANDI M_FLIPH|M_FLIPV,A14
|
||
MOVE *A7(OCTRL),A4,W
|
||
OR A14,A4
|
||
MOVE A4,*A7(OCTRL),W
|
||
|
||
BTST B_FLIPH,A4
|
||
JRNZ ABD_SET_XVEL ;BR=FLIPPED, DIRECTIONS OK
|
||
NEG A0 ;LEFT X VELOCITY
|
||
NEG A1 ;LEFT X VELOCITY
|
||
NEGX A4 ;LEFT X OFFSET
|
||
ABD_SET_XVEL
|
||
MOVE A0,*A7(OXVEL),L
|
||
|
||
MOVE A3,A0
|
||
MOVE A2,A1
|
||
CALLA RANGERND
|
||
MOVE A0,*A7(OYVEL),L
|
||
|
||
MOVE A7,A0
|
||
|
||
CALLA INSOBJ
|
||
|
||
JRUC ABP_FRAG
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_PART - MAKE ONE EXPLOSION *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT TO BLOW *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_BLOW_PART
|
||
MOVE A8,A0
|
||
CALLA GETHEADPART
|
||
MOVE A0,B8
|
||
|
||
MOVE *A8(OZVAL),A9,L
|
||
SUBK 32,A9
|
||
|
||
MOVE @ZBASE,A10,L
|
||
SUB A10,A9
|
||
CMPI ZMAX_KLUDGE,A9
|
||
JRLT ABP_ABORT ;BR=BEFORE CLOSEST Z
|
||
|
||
MOVI EXPLO_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JRZ ABP_ABORT
|
||
|
||
MOVE A0,A7
|
||
|
||
MOVE A8,A14
|
||
ADDI OFRAG_SCRIPT,A14
|
||
MMFM A14,A0,A1,A2,A3,A4,A6,A11
|
||
|
||
CALLA RANGERND
|
||
MOVE *A8(OCTRL),A5,W
|
||
BTST B_FLIPH,A5
|
||
JRNZ ABP_SET_XVEL ;BR=FLIPPED, DIRECTIONS OK
|
||
NEG A0 ;LEFT X VELOCITY
|
||
NEG A1 ;LEFT X VELOCITY
|
||
NEGX A4 ;LEFT X OFFSET
|
||
ABP_SET_XVEL
|
||
MOVE *B8(OXVEL),B14,L
|
||
MOVE B14,A14
|
||
ADD A14,A0
|
||
|
||
MOVE A0,*A7(OXVEL),L
|
||
|
||
MOVE A3,A0
|
||
MOVE A2,A1
|
||
CALLA RANGERND
|
||
|
||
MOVE *B8(OYVEL),B14,L
|
||
MOVE B14,A14
|
||
ADD A14,A0
|
||
|
||
MOVE A0,*A7(OYVEL),L
|
||
|
||
MOVE A4,A4
|
||
JRNZ ABP_NOBOX ;BR=WE HAVE AN OFFSET
|
||
MOVE *A8(OIMG),A1,L ;PICK POINT INSIDE BOX
|
||
MOVE *A1(IANIOFF),A2,L
|
||
MOVE *A1(ISIZE),A3,L
|
||
BTST B_FLIPH,A5
|
||
JRZ ABP_NOBOXFLIP ;BR=NO FLIP FOR X
|
||
NEGX A2
|
||
NEGX A3
|
||
ABP_NOBOXFLIP
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE A2,A14
|
||
SEXT A14,W
|
||
SLL 15+1,A14 ;PLUS ONE FOR DOUBLE SCALE
|
||
SUB A14,A1
|
||
MOVE A1,A0
|
||
MOVE A3,A14
|
||
SEXT A14,W
|
||
SLL 15+1,A14
|
||
ADD A14,A0
|
||
CALLA RANGERND
|
||
MOVE A0,*A7(OXVAL),L
|
||
|
||
MOVE *A8(OYVAL),A1,L
|
||
SRA 16,A2
|
||
SLL 15+1,A2 ;PLUS ONE FOR DOUBLE SCALE
|
||
SUB A2,A1
|
||
MOVE A1,A0
|
||
SRA 16,A3
|
||
SLL 15+1,A3
|
||
ADD A3,A0
|
||
CALLA RANGERND
|
||
MOVE A0,*A7(OYVAL),L
|
||
|
||
MOVE A7,A0
|
||
JRUC ABP_SETZ
|
||
ABP_NOBOX
|
||
MOVE A7,A0
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE A4,A14
|
||
SEXT A14,W
|
||
SLL 15,A14
|
||
ADD A14,A1 ;X OFFSET
|
||
MOVE A1,*A0(OXVAL),L
|
||
MOVE *A8(OYVAL),A1,L
|
||
SRA 16,A4
|
||
SLL 15,A4
|
||
ADD A4,A1 ;Y OFFSET
|
||
MOVE A1,*A0(OYVAL),L
|
||
ABP_SETZ
|
||
MOVE A9,A5
|
||
ADD A10,A9
|
||
MOVE A9,*A0(OZVAL),L
|
||
|
||
MOVE A8,A9
|
||
MOVE A0,A8
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
ORI M_MANSCALE,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
SRA Z2SCALE+1,A5
|
||
MOVE A5,A14
|
||
SRL 4,A14
|
||
SUB A14,A5
|
||
CALLA SET_SCALE_MANUAL
|
||
MOVE A9,A8
|
||
|
||
CALLA INSOBJ
|
||
ABP_FRAG
|
||
MOVE A11,B14
|
||
JRZ ABP_SHAKE ;BR=NO FRAGMENTS HERE BUDDY
|
||
MOVI 040000H,A0
|
||
CLR A3
|
||
CALLA PreFrag_Box
|
||
MOVI -0100H,B9
|
||
MOVI -01H,B10
|
||
MOVE A11,B14
|
||
CALLA Fragger
|
||
|
||
CMPI FRAG_CS4,A11
|
||
JRNE ABP_COPYPAL ;BR=NOT GLASS JUST COPY PALETTE
|
||
|
||
MOVI SHARDPAL1,A14 ;SILVER PALETTE
|
||
MOVE A14,*A0(FPDATA),L ;SET PALETTE
|
||
JRUC ABP_SHAKE
|
||
ABP_COPYPAL
|
||
MOVE *A8(OIMG),A1,L
|
||
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
|
||
ABP_SHAKE
|
||
MOVE A6,A5
|
||
JRZ ABP_SLEEP ;BR=NO SHAKE
|
||
SLL 15,A5 ;WORLD SHAKE RADIUS
|
||
MOVE *A8(OPART1),A8,L
|
||
CALLR ASC_FINAL ;SHAKE
|
||
MOVE A9,A8
|
||
ABP_SLEEP
|
||
MOVK 4,A0 ;RANDOM SLEEP
|
||
CALLA RANDU
|
||
MOVE A0,A14
|
||
SLL 8,A14
|
||
OR A14,A0
|
||
MOVE A0,*A8(AnimSLP),W
|
||
ABP_ABORT
|
||
RETS
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_FRAG_PART - MAKE FRAGMENTS COME FROM A PART *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PART TO BASE FRAG *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_FRAG_PART
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1
|
||
CMPI ZMAX_KLUDGE,A1
|
||
JRLT AFP_ABORT
|
||
|
||
MOVI 040000H,A0
|
||
CLR A3
|
||
CALLA PreFrag_Box
|
||
MOVI -0100H,B9
|
||
MOVI -01H,B10
|
||
MOVE *A8(OFRAG_SCRIPT),A11,L
|
||
MOVE A11,B14
|
||
CALLA Fragger
|
||
|
||
CMPI FRAG_CS4,A11
|
||
JRNE AFP_COPYPAL ;BR=NOT GLASS JUST COPY PALETTE
|
||
|
||
MOVI SHARDPAL1,A14 ;SILVER PALETTE
|
||
MOVE A14,*A0(FPDATA),L ;SET PALETTE
|
||
|
||
RETS
|
||
AFP_COPYPAL
|
||
MOVE *A8(OIMG),A1,L
|
||
MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
|
||
|
||
AFP_ABORT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER COLLISION AND GUN VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_COLL
|
||
WWL OID_PROCKET,~MASK_PLAYER,COPTER_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,COPTER_EXPLOSION_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_ROCKET_COLL *
|
||
* *
|
||
* PASS: *
|
||
* A0 = ROCKET OBJECT *
|
||
* A8 = COPTER PART OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_ROCKET_COLL
|
||
MOVE A0,*A8(OATE_ROCKET),L ;SAVE ROCKET OBJECT
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_EXPLOSION_COLL *
|
||
* *
|
||
* PASS: *
|
||
* A0 = EXPLOSION OBJECT *
|
||
* A8 = COPTER PART OBJECT *
|
||
* RETURN: *
|
||
* A0 = ROCKET DAMAGE HIT QUANTITY *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_EXPLOSION_COLL
|
||
MOVE *A8(OATE_ROCKET),A14,L
|
||
JRZ CV_DONE ;BR=NO ROCKET COLLISION
|
||
CMP A0,A14
|
||
JRNE CV_DONE ;BR=DIFFERENT EXPLOSION
|
||
|
||
MOVE *A0(RL_INTENDED_OBJ),A14,L ;DO WE HAVE THE RIGHT TARGET?
|
||
CMP A8,A14
|
||
JRNE CV_DONE ;BR=NOPE. NOT THE RIGHT TARGET.
|
||
|
||
COPTER_FLIGHT_EXPLO_COLL
|
||
CLRM *A8(OATE_ROCKET),L ;HIT! READY FOR ANOTHER!
|
||
|
||
MOVE *A0(OID),A0,W ;GET PLAYER DATA ADDRESS
|
||
CALLA POID_TO_PDATA
|
||
|
||
MOVI ROCKET_DAMAGE,A0,W ;ROCKET DAMAGE
|
||
|
||
MOVE *A8(OCOLLISION),A14,L
|
||
JRZ CC_DONE ;BR=NO COLLSION ROUTINE
|
||
JUMP A14
|
||
CC_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_HIT *
|
||
* *
|
||
* NOTE: DON'T TRASH A2! *
|
||
* NOTE: DON'T TRASH A2! *
|
||
* NOTE: DON'T TRASH A2! *
|
||
* *
|
||
* PASS: *
|
||
* A0 = DAMAGE POINTS *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* A5 = RESULTING DAMAGE RETURN STATE (0 = 10 GUN HITS OR ROCKET, *
|
||
* 1 = SINGLE GUN HIT, *
|
||
* 2 = DESTROYED) *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_HIT
|
||
.if BILL
|
||
|
||
JRUC CV_DESTROYED ;BR=COPTER DESTROYED
|
||
|
||
.endif
|
||
|
||
MOVE *A8(OHITS),A1,W
|
||
SUB A0,A1 ;DO THE DAMAGE
|
||
MOVE A1,*A8(OHITS),W
|
||
|
||
SRA 8,A0 ;THROW AWAY FRACTION
|
||
|
||
MOVE @ROW_TIME,A4,L ;TIME OF LAST HIT IN A ROW
|
||
MOVE @WAVEIRQS,A14,L
|
||
MOVE A14,A3
|
||
SUB A4,A14
|
||
CMPI 60,A14
|
||
JRLE CV_ROW ;BR=UNDER MINIMUM TIME
|
||
CLR A14 ;RESET TIME
|
||
JRUC CV_SAVE_ROW
|
||
CV_ROW
|
||
MOVE @ROW_HITS,A14,W ;GET CURRENT HITS IN A ROW
|
||
ADD A0,A14
|
||
CV_SAVE_ROW
|
||
MOVE A14,@ROW_HITS,W ;SAVE NUMBER OF HITS IN A ROW
|
||
MOVE A3,@ROW_TIME,L ;NEW LAST TIME FOR HIT IN A ROW
|
||
|
||
CLR A5 ;DEFAULT TO NULL RETURN STATE
|
||
|
||
MOVE *A8(OPART1),A14,L
|
||
.if DEBUG
|
||
LOCKON Z
|
||
.endif
|
||
MOVE *A14(OCOMMAND),A14,W
|
||
BTST B_CINVINCIBLE,A14
|
||
JRNZ CV_DONE ;BR=NO HURT
|
||
|
||
DEC A1
|
||
JRN CV_DESTROYED ;BR=COPTER DESTROYED
|
||
;CV_CHOOSE
|
||
; CLR A5 ;DEFAULT TO NULL RETURN STATE
|
||
CMPK ROCKET_DAMAGE >> 8,A0
|
||
JREQ CV_ROCKET ;BR=COPTER HIT BY FULL ROCKET
|
||
CMPK GUN_DAMAGE >> 8,A0
|
||
; JANE UNIV_FLASH ;BR=INDIRECT HIT
|
||
JRNE CV_DONE ;BR=INDIRECT HIT
|
||
CV_GUN
|
||
CLR A4 ;DEFAULT TO RESET HIT COUNT
|
||
MOVK 1,A5 ;GUN HIT RETURN STATE
|
||
|
||
MOVE *A8(OHITTIME),A14,W ;GET LAST TIME
|
||
MOVE @WAVEDISPS,A3,W ;GET CURRENT TIME
|
||
MOVE A3,*A8(OHITTIME),W ;SAVE THIS TIME AS LAST TIME
|
||
SUB A3,A14 ;CALCULATE DELTA TIME
|
||
NEG A14
|
||
CMPK 5,A14
|
||
JRGT CV_SAVE_COUNT ;BR=TOO LONG, RESET LAST TIME
|
||
MOVE *A8(OHITCOUNT),A4,W ;ANOTHER QUICK HIT
|
||
INC A4
|
||
CMPK 10,A4
|
||
JRLT CV_SAVE_COUNT ;BR=NOT HIT ENOUGH
|
||
|
||
CLR A0 ;MAKE AN EXPLOSION
|
||
CLR A3
|
||
CLR A4
|
||
CALLA PreFrag_Gun
|
||
SUBI 0100H,B0 ;PLACE IN FRONT OF COPTER
|
||
|
||
MOVI -0400H,B10 ;ZVEL INSURE IN FRONT OF COPTER
|
||
MOVE B10,B9
|
||
|
||
MOVE *A8(OPART1),A1,L
|
||
LOCKON Z
|
||
|
||
; MOVE *A1(OZVEL),A14,L
|
||
; JRNN CV_ONE_EXPLO ;BR=FLYING AWAY IN Z
|
||
; MOVE A14,B9 ;GIVE FRAGS 1.5*COPTER VELOCITY
|
||
; MOVE B9,B10
|
||
; SRA 1,B10
|
||
; ADD B10,B9
|
||
; MOVE B9,B10
|
||
;CV_ONE_EXPLO
|
||
MOVI FRAG_ONE_EXPLO,B14
|
||
CALLA Fragger
|
||
|
||
MOVE A1,A0 ;HEAD OBJECT
|
||
MOVK 10,A3 ;SHAKE RADIUS
|
||
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRZ CV_GUN_SHAKE ;BR=NOT ANIMATING
|
||
MOVB *A0(OSHAKERADIUS),A14
|
||
CMP A3,A14
|
||
JRGT CV_NO_GUN_SHAKE ;BR=A BIGGER SHAKE IS GOIN ON
|
||
CV_GUN_SHAKE
|
||
MOVK 1*3,A14 ;NUMBER OF SHAKES
|
||
MOVB A14,*A0(AnimLoop)
|
||
MOVB A3,*A0(OSHAKERADIUS)
|
||
MOVI SHAKE_ANIM,A1
|
||
CALLA STRTANIM
|
||
CV_NO_GUN_SHAKE
|
||
CLR A5 ;NULL RETURN STATE
|
||
CV_SAVE_COUNT
|
||
MOVE A4,*A8(OHITCOUNT),W
|
||
JAUC UNIV_FLASH ;FLASH AND RETURN
|
||
|
||
CV_ROCKET
|
||
CALLA UNIV_FLASH ;FLASH!
|
||
CV_ROCKET_NOFLASH
|
||
MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE 3 EXPLOSIONS
|
||
|
||
MOVI 020000H,A0
|
||
CLR A3
|
||
; CALLA PreFrag_Box
|
||
CALLA PreFrag_Center
|
||
SUBI 0100H,B0 ;PLACE IN FRONT OF COPTER
|
||
|
||
MOVI -0400H,B10 ;ZVEL INSURE IN FRONT OF COPTER
|
||
MOVE B10,B9
|
||
|
||
MOVE *A8(OPART1),A1,L
|
||
LOCKON Z
|
||
|
||
; MOVE *A1(OZVEL),A14,L
|
||
; JRNN CV_THREE_EXPLO ;BR=FLYING AWAY IN Z
|
||
; MOVE A14,B9 ;GIVE FRAGS 1.5*COPTER VELOCITY
|
||
; MOVE B9,B10
|
||
; SRA 1,B10
|
||
; ADD B10,B9
|
||
; MOVE B9,B10
|
||
;CV_THREE_EXPLO
|
||
;; MOVI -0FFH,B9
|
||
;; MOVI -01H,B10
|
||
MOVI FRAG_THREE_EXPLO,B14
|
||
CALLA Fragger
|
||
|
||
MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
|
||
MOVE A1,A0 ;HEAD OBJECT
|
||
MOVK 15,A3 ;SHAKE RADIUS
|
||
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRZ CV_ROCKET_SHAKE ;BR=NOT ANIMATION
|
||
MOVB *A0(OSHAKERADIUS),A14
|
||
CMP A3,A14
|
||
; JAGT UNIV_FLASH ;BR=A BIGGER SHAKE IN GOIN ON
|
||
JRGT CV_DONE ;BR=A BIGGER SHAKE IN GOIN ON
|
||
CV_ROCKET_SHAKE
|
||
MOVK 3*3,A14 ;NUMBER OF SHAKES
|
||
MOVB A14,*A0(AnimLoop)
|
||
MOVB A3,*A0(OSHAKERADIUS)
|
||
MOVI SHAKE_ANIM,A1
|
||
CALLA STRTANIM
|
||
; JAUC UNIV_FLASH ;FLASH AND RETURN NULL IN A5
|
||
RETS
|
||
CV_DESTROYED
|
||
MOVK 2,A5 ;DESTROYED RETURN STATE
|
||
CV_DONE
|
||
RETS
|
||
|
||
MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
;
|
||
; MOVI 010000H,A0
|
||
; CLR A3
|
||
;; CALLA PreFrag_Box
|
||
; CALLA PreFrag_Center
|
||
; SUBI 0100H,B0 ;PLACE IN FRONT OF COPTER
|
||
;
|
||
; MOVI -0400H,B10
|
||
; MOVE B10,B9
|
||
;; MOVI -0400H,B9
|
||
;
|
||
; MOVE *A8(OPART1),A1,L
|
||
; LOCKON Z
|
||
;
|
||
;; MOVE *A1(OZVEL),A14,L
|
||
;; JRNN CV_SET_ZVELS ;BR=FLYING AWAY IN Z
|
||
;;
|
||
;; MOVE A14,B9
|
||
;; MOVE B9,B10
|
||
;; ADD B9,B9 ;2*COPTER VELOCITY
|
||
;; MOVE B10,B14
|
||
;; SRA 1,B14
|
||
;; ADD B14,B10 ;1.5*COPTER VELOCITY
|
||
;;
|
||
;;; MOVE A14,B9 ;GIVE FRAGS 1.5*COPTER VELOCITY
|
||
;;; MOVE B9,B10
|
||
;;; SRA 1,B10
|
||
;;; ADD B10,B9
|
||
;;; MOVE B9,B10
|
||
;;
|
||
;; JRUC CV_DAM_EXPLO
|
||
;;CV_SET_ZVELS
|
||
;; MOVI -0100H,B10
|
||
;; MOVI -0200H,B9
|
||
;CV_DAM_EXPLO
|
||
; MOVI FRAG_DAMAGE_EXPLO,B14
|
||
; CALLA Fragger
|
||
;
|
||
; MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
;
|
||
; MOVE A1,A0 ;HEAD OBJECT
|
||
; MOVK 7*3,A14 ;NUMBER OF SHAKES
|
||
; MOVB A14,*A0(AnimLoop)
|
||
; MOVK 20,A14
|
||
; MOVB A14,*A0(OSHAKERADIUS)
|
||
; MOVI SHAKE_ANIM,A1
|
||
; CALLA STRTANIM
|
||
;
|
||
; MOVK 2,A5 ;DESTROYED RETURN STATE
|
||
;CV_DONE
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FLIGHT_GUNVECT *
|
||
* FLIGHT_HGUNVECT FLIGHT_LGUNVECT *
|
||
* FLIGHT_COLLISION *
|
||
* FLIGHT_HCOLLISION FLIGHT_LCOLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FLIGHT_HGUNVECT
|
||
SOUND1 SND_CLANG_HIGH
|
||
JRUC FLIGHT_GUNVECT
|
||
FLIGHT_LGUNVECT
|
||
SOUND1 SND_CLANG_LOW
|
||
FLIGHT_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
JRUC CV_GUN ;CHECK FOR GUN EXPLOSION
|
||
FLIGHT_HCOLLISION
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
JRUC FLIGHT_COLLISION
|
||
FLIGHT_LCOLLISION
|
||
SOUND1 SND_THUD
|
||
FLIGHT_COLLISION
|
||
CALLR PUSHBACK
|
||
JRUC CV_ROCKET ;MAKE ROCKET EXPLOSION
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FLIGHT_9S_GUNVECT *
|
||
* FLIGHT_9S_COLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FLIGHT_9S_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
SOUND1 SND_CLANG_LOW
|
||
CALLR CV_GUN ;CHECK FOR GUN EXPLOSION
|
||
JRUC F9S_GO
|
||
FLIGHT_9S_COLLISION
|
||
SOUND1 SND_THUD
|
||
CALLR PUSHBACK
|
||
CALLR CV_ROCKET ;MAKE ROCKET EXPLOSION
|
||
F9S_GO
|
||
PUSH A8 ;FIND OTHER HALF
|
||
MOVB *A8(OPARTID),A14
|
||
CMPK LEFT_FUSELAGE,A14
|
||
JREQ F9S_NEXT_FLASH ;BR=FLASH NEXT PART (RIGHT HALF)
|
||
|
||
MOVK LEFT_FUSELAGE,A1
|
||
CALLA FINDPART ;FIND LEFT HALF
|
||
LOCKON Z
|
||
MOVE A0,A8
|
||
JRUC F9S_FLASH
|
||
F9S_NEXT_FLASH
|
||
MOVE *A8(OPARTS),A8,L ;GET RIGHT HALF
|
||
F9S_FLASH
|
||
CALLA UNIV_FLASH
|
||
PULLQ A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FLIGHT_WEAPON_GUNVECT *
|
||
* FLIGHT_WEAPON_COLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FLIGHT_WEAPON_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
SOUND1 SND_CLANG_HIGH
|
||
CALLR CV_GUN ;CHECK FOR GUN EXPLOSION
|
||
MOVE A5,A5
|
||
JRZ FW_GO ;BR=YES, DAMAGE THE GUN
|
||
RETS
|
||
FLIGHT_WEAPON_COLLISION
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
CALLR PUSHBACK
|
||
CALLR CV_ROCKET ;MAKE ROCKET EXPLOSION
|
||
FW_GO
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRZ FW_DONE ;BR=IT'S NOT ANIMATING
|
||
|
||
MOVE *A8(ODAMANIM),A1,L
|
||
JRZ FW_DONE ;BR=NOT DAMAGE ANIMATION
|
||
|
||
MOVE *A8(AnimScr),A14,L
|
||
CMP A14,A1
|
||
JREQ FW_DONE ;BR=WE'RE IN THE DAMAGE ANIM
|
||
|
||
CALLA DELETE_FLASH ;KILL DA FLASH
|
||
|
||
MOVE *A8(OATTACKANIM),A3,L ;SET UP FOR RETURN
|
||
MOVE A3,*A8(AnimRetScr),L
|
||
MOVE *A8(OFIREANIMOFF),A14,W
|
||
ADD A14,A3 ;RETURN TO FIRING LUPE FRAME
|
||
MOVE A3,*A8(AnimRetFrm),L
|
||
|
||
CLR A14
|
||
MOVB A14,*A8(AnimSlp)
|
||
MOVE A1,*A8(AnimScr),L
|
||
MOVE A1,*A8(AnimFrm),L
|
||
|
||
MOVE *A8(ONORMAL_PAL),A0,L
|
||
JAUC CHANGE_PAL ;USE NORMAL PALETTE
|
||
FW_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_LCLANG_FLASH_GUNVECT *
|
||
* COPTER_LCLANG_GUNVECT *
|
||
* COPTER_LCLANG_FLASH_COLLISION *
|
||
* COPTER_LCLANG_COLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_I_LCLANG_FLASH_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_LCLANG_FLASH_GUNVECT
|
||
CALLA UNIV_FLASH
|
||
JRUC COPTER_LCLANG_GUNVECT
|
||
COPTER_I_LCLANG_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_LCLANG_GUNVECT
|
||
SOUND1 SND_CLANG_LOW
|
||
CALLA COPTER_SPARK
|
||
RETS
|
||
COPTER_LCLANG_FLASH_COLLISION
|
||
CALLA UNIV_FLASH
|
||
COPTER_LCLANG_COLLISION
|
||
CALLR CV_ROCKET_NOFLASH ;MAKE ROCKET EXPLOSION
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_THUD
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_HCLANG_FLASH_GUNVECT *
|
||
* COPTER_HCLANG_GUNVECT *
|
||
* COPTER_HCLANG_FLASH_COLLISION *
|
||
* COPTER_HCLANG_COLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
|
||
COPTER_I_HCLANG_FLASH_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_HCLANG_FLASH_GUNVECT
|
||
CALLA UNIV_FLASH
|
||
JRUC COPTER_HCLANG_GUNVECT
|
||
COPTER_I_HCLANG_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_HCLANG_GUNVECT
|
||
SOUND1 SND_CLANG_HIGH
|
||
CALLA COPTER_SPARK
|
||
RETS
|
||
COPTER_HCLANG_FLASH_COLLISION
|
||
CALLA UNIV_FLASH
|
||
COPTER_HCLANG_COLLISION
|
||
CALLR CV_ROCKET_NOFLASH ;MAKE ROCKET EXPLOSION
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_GCLANG_FLASH_GUNVECT *
|
||
* COPTER_GCLANG_GUNVECT *
|
||
* COPTER_GCLANG_FLASH_COLLISION *
|
||
* COPTER_GCLANG_COLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_I_GCLANG_FLASH_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_GCLANG_FLASH_GUNVECT
|
||
CALLA UNIV_FLASH
|
||
JRUC COPTER_GCLANG_GUNVECT
|
||
COPTER_I_GCLANG_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_GCLANG_GUNVECT
|
||
SOUND1 SND_CLANG_GEAR
|
||
CALLA COPTER_SPARK
|
||
RETS
|
||
COPTER_GCLANG_FLASH_COLLISION
|
||
CALLA UNIV_FLASH
|
||
COPTER_GCLANG_COLLISION
|
||
CALLR CV_ROCKET_NOFLASH ;MAKE ROCKET EXPLOSION
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPTER_BCLANG_FLASH_GUNVECT *
|
||
* COPTER_BCLANG_GUNVECT *
|
||
* COPTER_BCLANG_FLASH_COLLISION *
|
||
* COPTER_BCLANG_COLLISION *
|
||
* *
|
||
* MAKE SOME NOISE, EXPLOSION EFFECTS, AND/OR GIVE A LITTE PUSH DURING *
|
||
* THE FLIGHT TO THE FINAL BATTLE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COPTER_I_BCLANG_FLASH_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_BCLANG_FLASH_GUNVECT
|
||
CALLA UNIV_FLASH
|
||
JRUC COPTER_BCLANG_GUNVECT
|
||
COPTER_I_BCLANG_GUNVECT
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
COPTER_BCLANG_GUNVECT
|
||
SOUND1 SND_RICOCHET
|
||
CALLA COPTER_SPARK
|
||
RETS
|
||
COPTER_BCLANG_FLASH_COLLISION
|
||
CALLA UNIV_FLASH
|
||
COPTER_BCLANG_COLLISION
|
||
CALLR CV_ROCKET_NOFLASH ;MAKE ROCKET EXPLOSION
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PUSHBACK - PUSH THE COPTER BACK IN Z *
|
||
* *
|
||
* NOTE: DON'T TRASH A2! *
|
||
* NOTE: DON'T TRASH A2! *
|
||
* NOTE: DON'T TRASH A2! *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
PUSHBACK
|
||
MOVE *A8(OPART1),A1,L
|
||
LOCKON Z
|
||
MOVE *A1(OCOMMAND),A14,W
|
||
BTST B_CHOVER,A14
|
||
JRZ PB_DONE ;BR=NOT HOVERING, DON'T TOUCH
|
||
|
||
MOVE *A1(OZVAL),A5,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A5
|
||
MOVE *A1(OHZWPOS),A3,L
|
||
MOVE A3,A4
|
||
CMPI 020000H,A5
|
||
JRLE PB_CHECK_RANGE ;BR=WITHIN FARTHEST WORLD Z
|
||
CLR A14
|
||
JRUC PB_SET_ZVEL
|
||
PB_CHECK_RANGE
|
||
ADDI 08000H,A3
|
||
CMP A3,A5
|
||
JRGT PB_DONE ;BR=EXCEEDS THE PUSH RANGE
|
||
|
||
MOVE *A1(OZVEL),A14,L ;GIVE IT A PUSH
|
||
ADDI 0200H,A14
|
||
PB_SET_ZVEL
|
||
MOVE A14,*A1(OZVEL),L
|
||
|
||
MOVE A4,*A1(OHZFLYTO),L ;FLAG HOVER ROUTINE TO COME BACK
|
||
move *A1(OHZACCEL),A14,W ;NEGATIVE Z HOVER ACCELERATION
|
||
ABS A14
|
||
NEG A14
|
||
MOVE A14,*A1(OHZACCEL),W
|
||
PB_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WING_WEAPON VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
WING_WEAPON_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_HIGH
|
||
JRUC WWV_GO
|
||
WING_WEAPON_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
WWV_GO
|
||
CMPK 2,A5
|
||
JREQ WWV_DESTROYED ;BR=TRASHED!
|
||
MOVE A5,A5
|
||
JRNZ WWV_DONE
|
||
CALLR FW_GO ;FUCK UP DA DIRECTION
|
||
WWV_DONE
|
||
RETS
|
||
WWV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
|
||
CALLR MAKE_DAMAGE_SPEECH
|
||
|
||
MOVK LEFT_GUN,A4
|
||
MOVK LEFT_ROCKET,A3
|
||
MOVK LEFT_WING,A1
|
||
; MOVK LEFT_FUSE_GUN,A5
|
||
MOVB *A8(OPARTID),A6
|
||
CMP A3,A6
|
||
JRLE WWV_CHECK_SIDE ;BR=THIS IS THE LEFT SIDE
|
||
MOVK RGHT_GUN,A4
|
||
MOVK RGHT_ROCKET,A3
|
||
MOVK RGHT_WING,A1
|
||
; MOVK RGHT_FUSE_GUN,A5
|
||
WWV_CHECK_SIDE
|
||
CALLA FINDPART ;GET WING PART
|
||
LOCKON Z
|
||
MOVE A0,A7 ;SAVE WING PART
|
||
MOVE A4,A1 ;GET GUN PART
|
||
CMP A1,A6
|
||
JRNE WWV_FIND_WEAPON ;BR=THIS IS THE ROCKET LAUNCHER
|
||
MOVE A3,A1 ;NO, IT'S THE GAT GUN
|
||
WWV_FIND_WEAPON
|
||
CALLA FINDPART
|
||
JRNZ WWV_SPARKS ;BR=THE OTHER PART STILL EXISTS
|
||
|
||
; MOVI COPTER_COLL,A14 ;ACTIVATE WING VECTORS
|
||
; MOVE A14,*A7(OCVECT),L
|
||
MOVI WING_GUNVECT,A14 ;ACTIVATE WING VECTORS
|
||
MOVE A14,*A7(OGUNVECT),L
|
||
MOVI WING_COLLISION,A14
|
||
MOVE A14,*A7(OCOLLISION),L
|
||
|
||
JRUC WWV_DELETE
|
||
|
||
; MOVE A5,A1
|
||
; CALLA FINDPART
|
||
; LOCKON Z
|
||
;
|
||
; MOVI COPTER_COLL,A14 ;ACTIVATE FUSE GUN VECTORS
|
||
; MOVE A14,*A0(OCVECT),L
|
||
; MOVI FUSEGUN_GUNVECT,A14
|
||
; MOVE A14,*A0(OGUNVECT),L
|
||
; MOVI FUSEGUN_COLLISION,A14
|
||
; MOVE A14,*A0(OCOLLISION),L
|
||
|
||
; MOVI PART_FIRE_ANIM,A1 ;AND ANIMATION
|
||
; MOVE A1,*A0(OATTACKANIM),L
|
||
; CALLA STRTANIM
|
||
|
||
WWV_SPARKS
|
||
MOVE A7,A0
|
||
MOVI WING_SPARKS_ANIM,A1
|
||
CALLA STRTANIM
|
||
WWV_DELETE
|
||
; MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
;
|
||
; MOVI 040000H,A0
|
||
; CLR A3
|
||
; CALLA PreFrag_Box
|
||
; MOVI -0FFH,B9
|
||
; MOVI -01H,B10
|
||
; MOVI FRAG_C5,B14
|
||
; CALLA Fragger
|
||
;
|
||
; MOVE *A8(OIMG),A1,L
|
||
; MOVE *A1(ICMAP),*A0(FPDATA),L ;SET PALETTE
|
||
;
|
||
; MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
|
||
CMPK LEFT_ROCKET,A6
|
||
JREQ WWV_NOFLASH ;BR=NO FLASH OBJECT
|
||
CMPK RGHT_ROCKET,A6
|
||
JREQ WWV_NOFLASH ;BR=NO FLASH OBJECT
|
||
CALLR DELETE_FLASH
|
||
WWV_NOFLASH
|
||
MOVE *A8(ONORMAL_PAL),A0,L
|
||
JRZ WWV_DESTROY
|
||
CALLA CHANGE_PAL
|
||
WWV_DESTROY
|
||
PUSH A2
|
||
MOVI -040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI 010000H,A3 ;MIN Y VEL
|
||
MOVI 060000H,A4 ;MAX Y VEL
|
||
MOVI [15*2,0],A5 ;RIGHT BLOW OFFSET
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVK 32,A9 ;NUMBER OF BLOWS
|
||
CLR A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
CLR A14
|
||
MOVB A14,*A8(OPARTID) ;PART IS DEAD
|
||
|
||
CALLR CHECK_NOSE ;CHECK ON NOSE
|
||
RETS
|
||
|
||
WING_SPARKS_ANIM
|
||
LWL 1,1|AFunc,A_WING_SPARKS
|
||
.long 0
|
||
|
||
WING_SPARK_INIT
|
||
.LONG FWORKS1, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, -3
|
||
.LONG C_STRTANIM
|
||
.LONG FRAG_FZZZ_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_WING_SPARKS - SPARK HANGING WIRES FROM WING *
|
||
* *
|
||
* PASS: *
|
||
* A8 = WING OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_WING_SPARKS
|
||
; RETS
|
||
|
||
MOVI 60,A1
|
||
MOVI 127,A0
|
||
CALLA RANGERND
|
||
MOVB A0,*A8(AnimSlp)
|
||
|
||
MOVK LEFT_GUN,A3
|
||
MOVI [-56*2,-76*2],A4 ;GUN SPARK OFFSET
|
||
MOVK LEFT_ROCKET,A5
|
||
MOVI [-67*2,-115*2],A6 ;ROCKET SPARK OFFSET
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ AWS_CHOOSE ;BR=THIS IS THE LEFT
|
||
|
||
MOVK RGHT_GUN,A3 ;STUFF FOR THE RIGHT WING
|
||
NEGX A4
|
||
MOVK RGHT_ROCKET,A5
|
||
NEGX A6
|
||
AWS_CHOOSE
|
||
MOVI 512,A0
|
||
CALLA RANDPER
|
||
JRC AWS_SPARK_ROCKET
|
||
AWS_SPARK_GUN
|
||
MOVE A3,A1
|
||
CALLA FINDPART ;LOOK FOR GAT GUN
|
||
JRNZ AWS_SPARK_ROCKET ;BR=GUN EXISTS, SPARK ROCKET
|
||
MOVE A4,A9
|
||
JRUC AWS_SPARK_GO
|
||
AWS_SPARK_ROCKET
|
||
MOVE A5,A1
|
||
CALLA FINDPART ;LOOK FOR GAT GUN
|
||
JRNZ AWS_SPARK_GUN ;BR=ROCKET EXISTS, SPARK GUN
|
||
MOVE A6,A9
|
||
AWS_SPARK_GO
|
||
MOVI WING_SPARK_INIT,A5
|
||
|
||
MOVE @RAND,A10,W ;RANDOM HFLIP
|
||
ANDI M_FLIPH,A10
|
||
|
||
JRUC ADD_FIRE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WING VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
WING_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_LOW
|
||
JRUC WV_GO
|
||
WING_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_THUD
|
||
WV_GO
|
||
CMPK 2,A5
|
||
JREQ WV_DESTROYED_SCORE ;BR=TRASHED!
|
||
RETS
|
||
WV_DESTROYED_SCORE
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
WV_DESTROYED
|
||
CALLR MAKE_DAMAGE_SPEECH
|
||
|
||
MOVE @WING_COUNT,A14,W ;MINUS ONE WING
|
||
DEC A14
|
||
MOVE A14,@WING_COUNT,W
|
||
|
||
PUSH A2
|
||
MOVI 010000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI 010000H,A3 ;MIN Y VEL
|
||
MOVI 060000H,A4 ;MAX Y VEL
|
||
MOVI [-105*2,50*2],A5 ;RIGHT BLOW OFFSET
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
MOVI FRAG_C2,A7 ;FRAGMENT SCRIPT
|
||
MOVK 32,A9 ;NUMBER OF BLOWS
|
||
CLR A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
CLR A14
|
||
MOVB A14,*A8(OPARTID) ;PART IS DEAD
|
||
|
||
RETS
|
||
|
||
; MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
;
|
||
; MOVI 040000H,A0
|
||
; CLR A3
|
||
; CALLA PreFrag_Box
|
||
;
|
||
; MOVE B5,B6
|
||
; ADDI 25 >> (16-15),B6 ;WING BOX AREA
|
||
;
|
||
; MOVI -0FFH,B9
|
||
; MOVI -01H,B10
|
||
; MOVI FRAG_C10,B14
|
||
; CALLA Fragger
|
||
;
|
||
; MOVI yGRAD2Yp,A5
|
||
; MOVE A5,*A0(FPDATA),L ;SET PALETTE
|
||
;
|
||
; MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
; JAUC DEL_PROC_AND_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BELLY_WEAPON VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
BELLY_WEAPON_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_HIGH
|
||
JRUC BWV_GO
|
||
BELLY_WEAPON_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
BWV_GO
|
||
CMPK 2,A5
|
||
JREQ BWV_DESTROYED_SCORE ;BR=TRASHED!
|
||
MOVE A5,A5
|
||
JRNZ BWV_DONE
|
||
CALLR FW_GO ;FUCK UP DA DIRECTION
|
||
BWV_DONE
|
||
RETS
|
||
BWV_DESTROYED_SCORE
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
BWV_DESTROYED
|
||
CALLR MAKE_DAMAGE_SPEECH
|
||
|
||
CALLR DELETE_FLASH
|
||
|
||
MOVE *A8(ONORMAL_PAL),A0,L
|
||
JRZ BWV_DESTROY
|
||
CALLA CHANGE_PAL
|
||
BWV_DESTROY
|
||
PUSH A2
|
||
MOVI -040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI 010000H,A3 ;MIN Y VEL
|
||
MOVI 060000H,A4 ;MAX Y VEL
|
||
MOVI [15*2,0],A5 ;RIGHT BLOW OFFSET
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVK 32,A9 ;NUMBER OF BLOWS
|
||
CLR A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
CLR A14
|
||
MOVB A14,*A8(OPARTID) ;PART IS DEAD
|
||
|
||
; MOVE *A8(OPART1),A0,L ;GET HEAD PART
|
||
; LOCKON Z
|
||
; CALLA DEL_PROC_AND_OBJ
|
||
;; CALLR CHECK_NOSE ;CHECK ON NOSE
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* CHECK_NOSE - CHECK IF WE SHOULD ACTIVATE THE NOSE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = PART *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FIREBALL_HALF_MISSLETIME_TABLE
|
||
.WORD 15, 10, 5
|
||
FIREBALL_MISSLETIME_TABLE
|
||
.WORD 30, 20, 10
|
||
|
||
CHECK_NOSE
|
||
PUSH A8
|
||
MOVE *A8(OPART1),A8,L
|
||
LOCKON Z ;NO HEAD. THIS IS BAD!
|
||
MOVK LEFT_ROCKET,A1
|
||
CALLA FINDPART
|
||
JRNZ CN_DONE ;BR=LEFT LAUNCHER STILL ACTIVE
|
||
MOVK RGHT_ROCKET,A1
|
||
CALLA FINDPART
|
||
JRNZ CN_DONE ;BR=RIGHT LAUNCHER STILL ACTIVE
|
||
|
||
MOVK NOSE_GUN,A1
|
||
CALLA FINDPART
|
||
JRZ CN_DONE ;BR=NO NOSE! SHOULD NEVER HAPPEN!
|
||
|
||
MOVE A0,A3
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_ANIM,A14
|
||
JRNZ CN_GATS ;BR=ALREADY ANIMATIN'
|
||
|
||
MOVI FIREBALL_MISSLETIME_TABLE,A14
|
||
MOVE A14,@MISSLETIME_TABLE,L
|
||
|
||
MOVI NOSE_GUN_ANIM,A1 ;START NOSE ANIMATION
|
||
MOVE A1,*A0(OATTACKANIM),L
|
||
CALLA STRTANIM
|
||
MOVI 240,A14
|
||
MOVB A14,*A0(AnimSlp) ;SLEEP BEFORE SHOOTING
|
||
CN_GATS
|
||
MOVK LEFT_GUN,A1
|
||
CALLA FINDPART
|
||
JRNZ CN_DONE ;BR=LEFT GAT GUN STILL ACTIVE
|
||
MOVK RGHT_GUN,A1
|
||
CALLA FINDPART
|
||
JRNZ CN_DONE ;BR=RIGHT GAT GUN STILL ACTIVE
|
||
|
||
; MOVI COPTER_COLL,A14 ;STUFF VECTORS
|
||
; MOVE A14,*A3(OCVECT),L
|
||
MOVI DUM_NOSEGUN_GUNVECT,A14 ;ACTIVATE DUM NOSE GUN VECTORS
|
||
MOVE A14,*A3(OGUNVECT),L
|
||
MOVI DUM_NOSEGUN_COLLISION,A14
|
||
MOVE A14,*A3(OCOLLISION),L
|
||
|
||
MOVK LEFT_FUSELAGE,A1
|
||
CALLA FINDPART
|
||
JRZ CN_RGHT ;BR=NO LEFT FUSELAGE!
|
||
|
||
; MOVI COPTER_COLL,A14 ;STUFF VECTORS
|
||
; MOVE A14,*A0(OCVECT),L
|
||
MOVI FUSELAGE_GUNVECT,A3 ;ACTIVATE FUSELAGE VECTORS
|
||
MOVE A3,*A0(OGUNVECT),L
|
||
MOVI FUSELAGE_COLLISION,A4
|
||
MOVE A4,*A0(OCOLLISION),L
|
||
CN_RGHT
|
||
MOVK RGHT_FUSELAGE,A1
|
||
CALLA FINDPART
|
||
JRZ CN_DONE ;BR=NO RIGHT FUSELAGE!
|
||
MOVE A3,*A0(OGUNVECT),L
|
||
MOVE A4,*A0(OCOLLISION),L
|
||
CN_DONE
|
||
PULLQ A8
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COCKPIT_GUNVECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
COCKPIT_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
|
||
CMPK 2,A5
|
||
JREQ CPV_DESTROYED ;BR=TRASHED!
|
||
|
||
MOVB *A8(OPARTID),A6
|
||
MOVI SND_CLANG_HIGH,A3 ;METAL FRAME HIT SOUND
|
||
MOVI TOP_COCKPIT_BOX_TBL,A0 ;TOP COCKPIT CHECK
|
||
CMPK TOP_COCKPIT,A6
|
||
JREQ CPV_CHK_BOX ;BR=THIS IS THE TOP
|
||
MOVI BOT_COCKPIT_BOX_TBL,A0 ;BOTTOM COCKPIT CHECK
|
||
CPV_CHK_BOX
|
||
CALLA TABLE_BOX_CHECK
|
||
JRZ CPV_HIT_SND ;BR=DON'T HIT NO WINDOW
|
||
MOVI SND_WINDOW_CRACK,A3 ;WINDOW HIT SOUND
|
||
CPV_HIT_SND
|
||
MOVE A3,A0
|
||
; CALLA ONESND_Z
|
||
CALLA ONESND
|
||
RETS
|
||
COCKPIT_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
CPV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
CPV_NOSHAKE_DESTROYED
|
||
SOUND1 SND_WINDOW_BREAK
|
||
|
||
PUSH A2
|
||
MOVI -040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI -040000H,A3 ;MIN Y VEL
|
||
MOVI 040000H,A4 ;MAX Y VEL
|
||
MOVI [-120*2,0],A5 ;RIGHT BLOW OFFSET FOR TOP
|
||
MOVB *A8(OPARTID),A7
|
||
CMPK TOP_COCKPIT,A7
|
||
JREQ CPV_OFFOK ;BR=THIS IS THE TOP COCKPIT
|
||
MOVI [-90*2,0],A5 ;RIGHT BLOW OFFSET FOR BOTTOM
|
||
CPV_OFFOK
|
||
MOVI FRAG_CS4,A7 ;FRAGMENT SCRIPT
|
||
MOVK 4,A9 ;NUMBER OF BLOWS
|
||
MOVI CPV_DAMAGE,A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
RETS
|
||
|
||
CPV_DAMAGE
|
||
CLR A14 ;NO MORE COLLISIONS
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVI COPTER_HCLANG_GUNVECT,A14 ;CLANG ON METAL FRAME
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
|
||
MOVE *A8(OFLAGS),A14,W ;TURN ON PIXEL SCANNING
|
||
ANDNI M_NOPIXSCAN,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVE *A8(OCTRL),A4,W
|
||
MOVI CPTFSEC6sd,A1 ;TOP DAMAGE
|
||
|
||
MOVB *A8(OPARTID),A6
|
||
CMPK TOP_COCKPIT,A6
|
||
; MOVE *A8(OIMG),A6,L
|
||
; CMPI CPTFSEC6s,A6
|
||
JREQ CPV_ANI ;BR=THIS IS THE TOP
|
||
|
||
MOVI CPTFSEC7sd,A1 ;BOTTOM DAMAGE
|
||
CPV_ANI
|
||
CALLA ANI
|
||
CALLA SET_SCALE_WARREN ;SCALE THE MOTHER
|
||
CALLA SET_ODAG ;COMPUTE ODAG AGAIN
|
||
|
||
RETS
|
||
|
||
; MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
;
|
||
; MOVI 040000H,A0
|
||
; CLR A3
|
||
; CALLA PreFrag_Center
|
||
; MOVI -0FFH,B9
|
||
; MOVI -01H,B10
|
||
; MOVI FRAG_S10,B14
|
||
; CALLA Fragger
|
||
;
|
||
; MOVI SHARDPAL1,A5 ;SILVER PALETTE
|
||
; MOVE A5,*A0(FPDATA),L ;SET PALETTE
|
||
;
|
||
;; MOVE *A8(OIHOFF),A14,W
|
||
;; JRNZ CC_FRAG_DONE ;BR=DON'T MAKE SMALL PIECES
|
||
;;
|
||
;; MOVI FRAG_SS5,B14
|
||
;; CALLA Fragger
|
||
;;
|
||
;; MOVE A5,*A0(FPDATA),L ;SET PALETTE
|
||
;;CC_FRAG_DONE
|
||
; MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
|
||
; MOVE A8,A0
|
||
; MOVE *A0(OPART1),A8,L
|
||
; LOCKON Z
|
||
; CALLA PULLPART
|
||
; CALLA INSPART
|
||
; MOVE A0,A8
|
||
;
|
||
; RETS
|
||
|
||
TOP_COCKPIT_BOX_TBL
|
||
.LONG [4*2,13*2],[6*2,40*2] ;TOP WINDOW PIECE
|
||
.LONG [11*2,16*2],[27*2,37*2] ;MAIN WINDOW
|
||
.LONG -1
|
||
|
||
BOT_COCKPIT_BOX_TBL
|
||
.LONG [4*2,11*2],[6*2,42*2] ;TOP WINDOW PIECE
|
||
.LONG [9*2,13*2],[20*2,40*2] ;MAIN WINDOW
|
||
.LONG -1
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INTRO_COCKBLOW_GUNVECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
INTRO_COCKBLOW_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
|
||
CMPK 2,A5
|
||
JREQ ICV_DESTROYED ;BR=TRASHED!
|
||
|
||
MOVB *A8(OPARTID),A6
|
||
MOVI SND_CLANG_HIGH,A3 ;METAL FRAME HIT SOUND
|
||
|
||
MOVI SIDE_TOP_COCKPIT_BOX_TBL,A0 ;TOP COCKPIT CHECK
|
||
CMPK SIDE_TOP_COCKPIT,A6
|
||
JREQ ICV_CHK_BOX ;BR=THIS IS THE TOP
|
||
MOVI SIDE_BOT_COCKPIT_BOX_TBL,A0 ;BOTTOM COCKPIT CHECK
|
||
ICV_CHK_BOX
|
||
CALLA TABLE_BOX_CHECK
|
||
JRZ ICV_HIT_SND ;BR=DON'T HIT NO WINDOW
|
||
MOVI SND_WINDOW_CRACK,A3 ;WINDOW HIT SOUND
|
||
ICV_HIT_SND
|
||
MOVE A3,A0
|
||
; CALLA ONESND_Z
|
||
CALLA ONESND
|
||
RETS
|
||
INTRO_COCKBLOW_COLLISION
|
||
CALLR COPTER_HIT
|
||
; CALLA PUSHBACK
|
||
ICV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
|
||
SOUND1 SND_WINDOW_BREAK
|
||
|
||
PUSH A2
|
||
MOVI -020000H,A1 ;MIN X VEL
|
||
MOVI 020000H,A2 ;MAX X VEL
|
||
MOVI -020000H,A3 ;MIN Y VEL
|
||
MOVI 020000H,A4 ;MAX Y VEL
|
||
MOVI [-38*2,-71*2],A5 ;RIGHT BLOW OFFSET FOR TOP
|
||
CLR A6 ;NO SHAKE
|
||
MOVB *A8(OPARTID),A7
|
||
CMPK TOP_COCKPIT,A7
|
||
JREQ ICV_OFFOK ;BR=THIS IS THE TOP COCKPIT
|
||
MOVI [-13*2,-113*2],A5 ;RIGHT BLOW OFFSET FOR BOTTOM
|
||
ICV_OFFOK
|
||
MOVI FRAG_CS4,A7 ;FRAGMENT SCRIPT
|
||
MOVK 4,A9 ;NUMBER OF BLOWS
|
||
MOVI ICV_DAMAGE,A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
RETS
|
||
|
||
ICV_DAMAGE
|
||
CLR A14 ;NO MORE COLLISIONS
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVI COPTER_HCLANG_GUNVECT,A14 ;CLANG ON METAL FRAME
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
|
||
MOVE *A8(OFLAGS),A14,W ;TURN ON PIXEL SCANNING
|
||
ANDNI M_NOPIXSCAN,A14
|
||
MOVE A14,*A8(OFLAGS),W
|
||
|
||
MOVE *A8(OCTRL),A4,W
|
||
MOVI CPTSSEC7sd,A1 ;TOP DAMAGE
|
||
|
||
MOVB *A8(OPARTID),A6
|
||
CMPK SIDE_TOP_COCKPIT,A6
|
||
; MOVE *A8(OIMG),A6,L
|
||
; CMPI CPTFSEC6s,A6
|
||
JREQ CPV_ANI ;BR=THIS IS THE TOP
|
||
|
||
MOVI CPTSSEC8sd,A1 ;BOTTOM DAMAGE
|
||
JRUC CPV_ANI
|
||
|
||
SIDE_TOP_COCKPIT_BOX_TBL
|
||
.LONG [9*2,12*2],[21*2,34*2] ;TOP WINDOW PIECE
|
||
.LONG [28*2,34*2],[35*2,47*2] ;MAIN WINDOW
|
||
.LONG -1
|
||
|
||
SIDE_BOT_COCKPIT_BOX_TBL
|
||
.LONG [11*2,13*2],[17*2,21*2] ;TOP WINDOW PIECE
|
||
.LONG [19*2,14*2],[25*2,38*2] ;MAIN WINDOW
|
||
.LONG -1
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INTRO_PARTBLOW_GUNVECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
INTRO_PARTBLOW_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
|
||
MOVB *A8(OPARTID),A6
|
||
|
||
CMPK 2,A5
|
||
JREQ IPV_DESTROYED ;BR=TRASHED!
|
||
|
||
MOVI SND_CLANG_LOW,A0
|
||
CMPK SIDE_ENGINE,A6
|
||
JRNE IPV_CLANG ;BR=NOT DA ENGINE
|
||
MOVI SND_CLANG_HIGH,A0
|
||
IPV_CLANG
|
||
CALLA ONESND
|
||
RETS
|
||
INTRO_PARTBLOW_COLLISION
|
||
CALLR COPTER_HIT
|
||
|
||
MOVI SND_THUD,A0
|
||
MOVB *A8(OPARTID),A6
|
||
CMPK SIDE_ENGINE,A6
|
||
JRNE IPV_BOOM ;BR=NOT DA ENGINE
|
||
MOVI SND_METALLIC_FUCKUP,A0
|
||
IPV_BOOM
|
||
CALLA ONESND
|
||
|
||
CMPK 2,A5
|
||
JREQ IPV_DESTROYED ;BR=TRASHED!
|
||
RETS
|
||
|
||
IPV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
|
||
PUSH A2
|
||
MOVI COPTER_LCLANG_GUNVECT,A1 ;CLANG ON METAL FRAME
|
||
|
||
CMPK SIDE_FUSELAGE,A6
|
||
JRNE IPV_CHECK_TAIL
|
||
|
||
MOVI CPTSSEC1sdx,A2
|
||
MOVI [-60*2,152*2],A3 ;FIRE OFFSET
|
||
MOVI [23*2,-127*2],A5 ;RIGHT BLOW OFFSET
|
||
|
||
MOVK SIDE_NOSE_GUN,A1
|
||
CALLA FINDPART
|
||
JRZ IPV_BLOW ;BR=NO NOSE GUN
|
||
MMTM SP,A1,A2,A3,A5,A8
|
||
MOVE A0,A8
|
||
CALLR IDV_DESTROYED_NOSCORE ;BLOW AND DELETE NOSE GUN
|
||
MMFM SP,A1,A2,A3,A5,A8
|
||
JRUC IPV_BLOW
|
||
|
||
IPV_CHECK_TAIL
|
||
MOVI CPTSSEC5sdx,A2
|
||
MOVI [-108*2,-166*2],A3 ;FIRE OFFSET
|
||
MOVI [-17*2,197*2],A5 ;RIGHT BLOW OFFSET
|
||
|
||
CMPK SIDE_LONG_TAIL,A6
|
||
JREQ IPV_BLOW
|
||
|
||
MOVI COPTER_HCLANG_GUNVECT,A1 ;CLANG ON METAL FRAME
|
||
MOVI CPTSSEC9sd,A2
|
||
MOVI [-126*2,-59*2],A3 ;FIRE OFFSET
|
||
MOVI [-40*2,80*2],A5 ;RIGHT BLOW OFFSET
|
||
IPV_BLOW
|
||
CLR A14 ;NO MORE COLLISIONS
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVE A1,*A8(OGUNVECT),L
|
||
|
||
MOVE A2,*A8(ODAMFRAME),L
|
||
MOVE A3,*A8(OFIREOFF),L
|
||
|
||
MOVI -020000H,A1 ;MIN X VEL
|
||
MOVI 020000H,A2 ;MAX X VEL
|
||
MOVI -020000H,A3 ;MIN Y VEL
|
||
MOVI 020000H,A4 ;MAX Y VEL
|
||
|
||
CLR A6 ;NO SHAKE
|
||
|
||
MOVI FRAG_C2,A7 ;FRAGMENT SCRIPT
|
||
MOVK 10,A9 ;NUMBER OF BLOWS
|
||
MOVI IPV_DAMAGE,A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
RETS
|
||
|
||
IPV_DAMAGE
|
||
MOVI SIDE_FIRE_INIT,A5
|
||
MOVE *A8(OFIREOFF),A9,L
|
||
MOVE *A8(OCTRL),A4,W
|
||
MOVE A4,A10
|
||
ANDI M_FLIPH,A10
|
||
JRZ IPV_FIRE ;FLIP FIRE X
|
||
NEGX A9
|
||
IPV_FIRE
|
||
CALLA ADD_FIRE
|
||
|
||
MOVE *A8(ODAMFRAME),A1,L
|
||
MOVE *A1(ICMAP),A0,L
|
||
CALLA CHANGE_PAL
|
||
JRUC CPV_ANI
|
||
|
||
**************************************************************************
|
||
* *
|
||
* INTRO_DELBLOW_GUNVECT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
INTRO_DELBLOWH_GUNVECT
|
||
MOVI SND_CLANG_HIGH,A0
|
||
JRUC IDG_GO
|
||
INTRO_DELBLOWL_GUNVECT
|
||
MOVI SND_CLANG_LOW,A0
|
||
IDG_GO
|
||
CALLA ONESND
|
||
|
||
CALLA COPTER_SPARK
|
||
|
||
MOVK GUN_POINTS,A0
|
||
CALLA CHECK_FREAK_SPEECH
|
||
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
|
||
CMPK 2,A5
|
||
JREQ IDV_DESTROYED ;BR=TRASHED!
|
||
RETS
|
||
INTRO_DELBLOWH_COLLISION
|
||
MOVI SND_METALLIC_FUCKUP,A0
|
||
JRUC IDC_GO
|
||
INTRO_DELBLOWL_COLLISION
|
||
MOVI SND_THUD,A0
|
||
IDC_GO
|
||
CALLA ONESND
|
||
|
||
MOVI ROCKET_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
|
||
CMPK 2,A5
|
||
JREQ IDV_DESTROYED ;BR=TRASHED!
|
||
RETS
|
||
|
||
IDV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
IDV_DESTROYED_NOSCORE
|
||
MOVB *A8(OPARTID),A1
|
||
CMPK SIDE_GUN,A1
|
||
JRNE IDV_CHECK_WING
|
||
|
||
MOVK SIDE_ROCKET,A1
|
||
CALLA FINDPART
|
||
JRZ IDV_CHECK_WING
|
||
|
||
MOVI INTRO_DELBLOWH_COLLISION,A14
|
||
MOVE A14,*A0(OCOLLISION),L
|
||
MOVI INTRO_DELBLOWH_GUNVECT,A14
|
||
MOVE A14,*A0(OGUNVECT),L
|
||
|
||
JRUC IDV_GO
|
||
IDV_CHECK_WING
|
||
CMPK SIDE_ROCKET,A1
|
||
JRNE IDV_GO
|
||
|
||
MOVK SIDE_WING,A1
|
||
CALLA FINDPART
|
||
JRZ IDV_GO
|
||
|
||
MOVI INTRO_DELBLOWL_COLLISION,A14
|
||
MOVE A14,*A0(OCOLLISION),L
|
||
MOVI INTRO_DELBLOWL_GUNVECT,A14
|
||
MOVE A14,*A0(OGUNVECT),L
|
||
|
||
IDV_GO
|
||
CLR A14 ;NO MORE COLLISIONS
|
||
MOVE A14,*A8(OCVECT),L
|
||
MOVI DUMRETS,A14
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
|
||
PUSH A2
|
||
|
||
MOVI -020000H,A1 ;MIN X VEL
|
||
MOVI 020000H,A2 ;MAX X VEL
|
||
MOVI -020000H,A3 ;MIN Y VEL
|
||
MOVI 020000H,A4 ;MAX Y VEL
|
||
|
||
CLR A5 ;DO THE BOX THING
|
||
CLR A6 ;NO SHAKE
|
||
MOVI FRAG_C2,A7 ;FRAGMENT SCRIPT
|
||
MOVK 10,A9 ;NUMBER OF BLOWS
|
||
CLR A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FUSEGUN VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FUSEGUN_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_LOW
|
||
JRUC FGV_GO
|
||
FUSEGUN_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_THUD
|
||
FGV_GO
|
||
CMPK 2,A5
|
||
JREQ FGV_DESTROYED ;BR=TRASHED!
|
||
; MOVE A5,A5
|
||
; JRNZ FGV_DONE
|
||
; CALLR FW_GO ;FUCK UP DA DIRECTION
|
||
;FGV_DONE
|
||
RETS
|
||
FGV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
FGV_NOSHAKE_DESTROYED
|
||
PUSH A2
|
||
MOVI 020000H,A1 ;MIN X VEL
|
||
MOVI 080000H,A2 ;MAX X VEL
|
||
MOVI -010000H,A3 ;MIN Y VEL
|
||
MOVI 060000H,A4 ;MAX Y VEL
|
||
MOVI [-31*2,33*2],A5 ;RIGHT BLOW OFFSET
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVK 8,A9 ;NUMBER OF BLOWS
|
||
MOVI FGV_MAKE_FIRE,A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
RETS
|
||
|
||
FGV_MAKE_FIRE
|
||
; MOVE *A8(OPART1),A0,L ;GET HEAD
|
||
; MOVE *A0(OPARTS),A0,L ;GET 2ND PART
|
||
; MOVB *A0(OPARTID),A14
|
||
; CMPK BELLY_GUN,A14
|
||
; JRNE FGV_CHECK_FLIP ;BR=THIS IS NOT THE BELLY GUN
|
||
; MOVE *A0(OPARTS),A0,L ;GET NOSE PART
|
||
; CALLR CN_START_NOSE ;START NOSE GUN
|
||
;FGV_CHECK_FLIP
|
||
MOVE *A8(OCTRL),A14,W
|
||
ANDI M_FLIPH,A14
|
||
MOVI [-79*2,-23*2],A1
|
||
BTST B_FLIPH,A14
|
||
JRZ FGV_FIRE ;BR=NOT FLIPPED
|
||
NEGX A1
|
||
FGV_FIRE
|
||
MOVE A1,*A8(OPARTSXY),L
|
||
|
||
; CALLR DELETE_FLASH
|
||
;
|
||
; CLR A14
|
||
; MOVE A14,*A8(OCVECT),L
|
||
; MOVI DUMRETS,A14
|
||
; MOVE A14,*A8(OGUNVECT),L
|
||
;
|
||
; MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
;
|
||
; MOVI 040000H,A0
|
||
; CLR A3
|
||
; CALLA PreFrag_Box
|
||
; MOVI -0FFH,B9
|
||
; MOVI -01H,B10
|
||
; MOVI FRAG_C5,B14
|
||
; CALLA Fragger
|
||
;
|
||
; MOVI yGRAD2Yp,A5
|
||
; MOVE A5,*A0(FPDATA),L ;SET PALETTE
|
||
;
|
||
; MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
|
||
MOVE A8,A0 ;REPLACE WITH FIRE
|
||
MOVE A2,A4
|
||
CALLA GET_HEAD_PART
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
CALLA SETOFFPU
|
||
MOVE A4,A2
|
||
|
||
CALLA PULLPART
|
||
CALLA INSPART
|
||
|
||
MOVI FUSE_FIRE_START_ANIM,A1
|
||
MOVI FUSE_FIRE_ANIM,A14
|
||
JAUC STRTANIM_OFF
|
||
|
||
**************************************************************************
|
||
* *
|
||
* NOSEGUN VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GRILL_MISSLETIME_TABLE
|
||
.WORD 20, 15, 15
|
||
|
||
DUM_NOSEGUN_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
SOUND1 SND_CLANG_HIGH
|
||
CALLR CV_GUN ;CHECK FOR GUN EXPLOSION
|
||
MOVI GUN_DAMAGE/8,A3,W
|
||
JRUC DNV_GO
|
||
DUM_NOSEGUN_COLLISION
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
CALLR PUSHBACK
|
||
CALLR CV_ROCKET ;MAKE ROCKET EXPLOSION
|
||
MOVI ROCKET_DAMAGE/8,A3,W
|
||
DNV_GO
|
||
MOVI NOSEGUN_DUMMY_DAMAGE_TABLE,A4
|
||
MOVK 3,A5
|
||
CALLR DUMMY_DAMAGE ;FIND A PART TO DAMAGE
|
||
JRNC DNV_DONE ;BR=DAMAGED A PART
|
||
|
||
MOVI NOSEGUN_GUNVECT,A14 ;ACTIVATE NOSE GUN VECTORS
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
MOVI NOSEGUN_COLLISION,A14
|
||
MOVE A14,*A8(OCOLLISION),L
|
||
DNV_DONE
|
||
RETS
|
||
|
||
NOSEGUN_DUMMY_DAMAGE_TABLE
|
||
WL LEFT_WING, WV_DESTROYED
|
||
WL RGHT_WING, WV_DESTROYED
|
||
WL BELLY_GUN, BWV_DESTROYED
|
||
|
||
NOSEGUN_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_HIGH
|
||
JRUC NV_GO
|
||
NOSEGUN_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_METALLIC_FUCKUP
|
||
NV_GO
|
||
CMPK 2,A5
|
||
JREQ NV_DESTROYED ;BR=TRASHED!
|
||
MOVE A5,A5
|
||
JRNZ NV_DONE
|
||
CALLR FW_GO ;FUCK UP DA DIRECTION
|
||
NV_DONE
|
||
RETS
|
||
NV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
|
||
SOUND1 SND_SHES_BREAKIN_UP
|
||
|
||
MMTM SP,A2,A8
|
||
|
||
MOVK 2,A11 ;2 PARTS TO DAMAGE
|
||
NV_F_LUPE
|
||
MOVE A11,A1
|
||
ADDK RGHT_FUSELAGE-2,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVE A0,A8
|
||
MOVI 010000H,A1 ;MIN X VEL
|
||
MOVI 060000H,A2 ;MAX X VEL
|
||
MOVI -040000H,A3 ;MIN Y VEL
|
||
MOVI 040000H,A4 ;MAX Y VEL
|
||
MOVI [-55*2,0],A5 ;RIGHT BLOW OFFSET
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVK 32,A9 ;NUMBER OF BLOWS
|
||
MOVI FUSELAGE_DAMAGE,A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
|
||
DSJ A11,NV_F_LUPE
|
||
|
||
MOVI COPDAM2,A8
|
||
MOVK 24,A9
|
||
MOVK 31,A10
|
||
MOVK 4,A11
|
||
CREATE PID_COLOR,CYCLE16
|
||
|
||
MOVI PARTS_TO_FUCKUP_TABLE,A4
|
||
CLR A6 ;SHAKE RADIUS
|
||
NV_DAM_LUPE
|
||
MOVE *SP,A8,L ;GET TOP OF STACK (OBJECT ADDR)
|
||
MOVE *A4+,A1,W
|
||
JRZ NV_DAM_DONE ;BR=NO MORE
|
||
CALLA FINDPART
|
||
JRZ NV_DAM_NEXT ;BR=NOT HERE
|
||
|
||
MOVE A0,A8
|
||
MOVE *A4,A14,L
|
||
PUSH A4
|
||
CALL A14 ;DAMAGE THE PART
|
||
PULLQ A4
|
||
NV_DAM_NEXT
|
||
ADDK 020H,A4
|
||
DSJ A5,NV_DAM_LUPE
|
||
NV_DAM_DONE
|
||
MMFM SP,A2,A8
|
||
|
||
MOVK GRILL,A1 ;FIND DA GRILL
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVI FIREBALL_MISSLETIME_TABLE,A14
|
||
MOVE A14,@MISSLETIME_TABLE,L
|
||
|
||
MOVI GRILL_ANIM,A1 ;START IT UP
|
||
CALLA STRTANIM
|
||
|
||
MOVI GRILL_GUNVECT,A14 ;ACTIVATE GRILL VECTORS
|
||
MOVE A14,*A0(OGUNVECT),L
|
||
MOVI GRILL_COLLISION,A14
|
||
MOVE A14,*A0(OCOLLISION),L
|
||
|
||
JAUC DEL_PROC_AND_OBJ
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FUSELAGE_DAMAGE - DAMAGE FUSELAGE PART *
|
||
* *
|
||
* PASS: *
|
||
* A8 = FUSELAGE PART *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FUSELAGE_DAMAGE
|
||
move *A8(OCTRL),A4,W
|
||
MOVI CPTFSEC9sd,A1
|
||
CALLA ANI
|
||
CALLA SET_SCALE_WARREN ;SCALE THE MOTHER
|
||
CALLA SET_ODAG ;COMPUTE ODAG AGAIN
|
||
MOVI COPDAM2,A0
|
||
CALLA CHANGE_PAL
|
||
|
||
MOVI COPTER_LCLANG_GUNVECT,A14 ;DEACTIVATE DAMAGE VECTORS
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
MOVI COPTER_LCLANG_COLLISION,A14
|
||
MOVE A14,*A8(OCOLLISION),L
|
||
RETS
|
||
|
||
PARTS_TO_FUCKUP_TABLE
|
||
WL LEFT_FUSE_GUN, FGV_NOSHAKE_DESTROYED
|
||
WL RGHT_FUSE_GUN, FGV_NOSHAKE_DESTROYED
|
||
WL LEFT_ENGINE_COVER, EV_NOSHAKE_DESTROYED
|
||
WL RGHT_ENGINE_COVER, EV_NOSHAKE_DESTROYED
|
||
WL TOP_COCKPIT, CPV_NOSHAKE_DESTROYED
|
||
WL BOTTOM_COCKPIT, CPV_NOSHAKE_DESTROYED
|
||
.WORD 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* GRILL VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GRILL_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_LOW
|
||
JRUC GV_GO
|
||
GRILL_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_THUD
|
||
GV_GO
|
||
CMPK 2,A5
|
||
JREQ GV_DESTROYED ;BR=TRASHED!
|
||
RETS
|
||
GV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
|
||
; MOVK 1,A14
|
||
; MOVE A14,@GUNS_OFF,W ;NO MORE SHOOTIN'
|
||
|
||
SOUND1 SND_WERE_GOIN_DOWN
|
||
|
||
SOUND1 SND_CHAN3_OFF
|
||
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
|
||
MOVE A2,*A0(OPLAYER),L
|
||
|
||
CALLA DEL_PROC_AND_OBJ
|
||
|
||
MOVE A0,A8
|
||
|
||
CALLA CLR_VEL
|
||
|
||
MOVE *A8(OPLINK),A0,L
|
||
JRZ GV_NO_PROC ;BR=NO PROCESS HERE
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OPLINK),L
|
||
MOVE A14,@COPTER_OBJ,L
|
||
|
||
MOVI M_CHOVER,A14
|
||
MOVE A14,*A8(OCOMMAND),L ;SHAKE TOWARDS THE CENTER
|
||
|
||
MOVI 32,A14 ;NUMBER OF SHAKES
|
||
MOVB A14,*A8(AnimLoop)
|
||
MOVK 25,A14 ;SHAKE RADIUS
|
||
MOVB A14,*A8(OSHAKERADIUS)
|
||
MOVI FINAL_SHAKE_ANIM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
CALLA KILL
|
||
GV_NO_PROC
|
||
MMTM SP,A2,A8
|
||
|
||
CLR A6 ;SHAKE RADIUS
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVI 127,A9 ;NUMBER OF BLOWS
|
||
MOVI DUMRETS,A10 ;BLOWN ROUTINE
|
||
|
||
MOVK 2,A11 ;2 PARTS TO DAMAGE
|
||
GV_LUPE
|
||
MOVE A11,A1
|
||
ADDK RGHT_FUSELAGE-2,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVE A0,A8
|
||
MOVI 08000H,A1 ;MIN X VEL
|
||
MOVI 060000H,A2 ;MAX X VEL
|
||
MOVI -040000H,A3 ;MIN Y VEL
|
||
MOVI 060000H,A4 ;MAX Y VEL
|
||
MOVI [-55*2,0],A5 ;RIGHT BLOW OFFSET
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
|
||
MOVE A11,A1
|
||
ADDK RGHT_ENGINE-2,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVE A0,A8
|
||
MOVI 010000H,A1 ;MIN X VEL
|
||
MOVI 080000H,A2 ;MAX X VEL
|
||
MOVI -040000H,A3 ;MIN Y VEL
|
||
MOVI 040000H,A4 ;MAX Y VEL
|
||
MOVI [-125*2,50*2],A5 ;RIGHT BLOW OFFSET
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
|
||
DSJ A11,GV_LUPE
|
||
|
||
MOVK GEAR,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVE A0,A8
|
||
MOVI -040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI -060000H,A3 ;MIN Y VEL
|
||
MOVI -010000H,A4 ;MAX Y VEL
|
||
MOVI [0,0],A5 ;RIGHT BLOW OFFSET
|
||
CLR A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
|
||
; MOVK TOP_COCKPIT,A1
|
||
; CALLA FINDPART
|
||
; LOCKON Z
|
||
;
|
||
; MOVE A0,A8
|
||
; MOVI -040000H,A1 ;MIN X VEL
|
||
; MOVI 040000H,A2 ;MAX X VEL
|
||
; MOVI -040000H,A3 ;MIN Y VEL
|
||
; MOVI 040000H,A4 ;MAX Y VEL
|
||
; MOVI [-120*2,0],A5 ;RIGHT BLOW OFFSET FOR TOP
|
||
; CLR A7 ;FRAGMENT SCRIPT
|
||
; CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
;
|
||
; MOVK BOTTOM_COCKPIT,A1
|
||
; CALLA FINDPART
|
||
; LOCKON Z
|
||
;
|
||
; MOVE A0,A8
|
||
; MOVI -040000H,A1 ;MIN X VEL
|
||
; MOVI 040000H,A2 ;MAX X VEL
|
||
; MOVI -040000H,A3 ;MIN Y VEL
|
||
; MOVI 040000H,A4 ;MAX Y VEL
|
||
; MOVI [-90*2,0],A5 ;RIGHT BLOW OFFSET FOR BOTTOM
|
||
; CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
|
||
MMFM SP,A2,A8
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_DUPING *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_START_DUPING
|
||
MOVK 2,A14 ;NUMBER OF SHAKES FOR PART 2
|
||
MOVB A14,*A8(AnimLoop)
|
||
|
||
; MOVE @WAVEIRQS,A14,L
|
||
; MOVE A14,*A8(OCDATA),L
|
||
|
||
MOVK 2,A11 ;2 PARTS TO DAMAGE
|
||
ASD_LUPE
|
||
MOVE A11,A1
|
||
ADDK RGHT_FUSELAGE-2,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVI FUSELAGE_INIT,A14
|
||
MOVE A14,*A0(ODUP_INIT),L
|
||
|
||
MOVI 040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI -020000H,A3 ;MIN Y VEL
|
||
MOVI 020000H,A4 ;MAX Y VEL
|
||
|
||
MOVE A0,A14
|
||
ADDI OMINXVEL+020H,A14
|
||
MMTM A14,A1,A2,A3,A4
|
||
|
||
MOVI DUP_PART_ANIM,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVE A11,A1
|
||
ADDK RGHT_ENGINE-2,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVI ENGINE_INIT,A14
|
||
MOVE A14,*A0(ODUP_INIT),L
|
||
|
||
MOVI 040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI -030000H,A3 ;MIN Y VEL
|
||
MOVI 020000H,A4 ;MAX Y VEL
|
||
|
||
MOVE A0,A14
|
||
ADDI OMINXVEL+020H,A14
|
||
MMTM A14,A1,A2,A3,A4
|
||
|
||
MOVI DUP_PART_ANIM,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVE A11,A1
|
||
ADDK RGHT_TOP_FUSELAGE-2,A1
|
||
CALLA FINDPART
|
||
LOCKON Z
|
||
|
||
MOVE A0,A8
|
||
|
||
MOVI TOP_FUSELAGE_INIT,A14
|
||
MOVE A14,*A8(ODUP_INIT),L
|
||
|
||
MOVI 040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI -020000H,A3 ;MIN Y VEL
|
||
MOVI 030000H,A4 ;MAX Y VEL
|
||
MOVI [-105*2,10*2],A5 ;RIGHT BLOW OFFSET
|
||
CLR A6 ;SHAKE RADIUS
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVI 127,A9 ;NUMBER OF BLOWS
|
||
CLR A10 ;BLOWN ROUTINE
|
||
CALLR DUP_PART ;MAKE A BIG THING ABOUT IT
|
||
|
||
DSJ A11,ASD_LUPE
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* THROW_EXPLOS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_THROW_EXPLO
|
||
; MOVE *A8(OCDATA),A1,L
|
||
; MOVE @WAVEIRQS,A14,L
|
||
; MOVE A14,A3
|
||
; SUB A1,A14
|
||
;
|
||
; CMPK 16,A14
|
||
; JRLT ATE_DONE
|
||
;
|
||
; MOVE A3,*A8(OCDATA),L
|
||
|
||
MOVI EXPLO_INIT,A5
|
||
CALLA CREATE_OBJ
|
||
JRZ ATE_DONE
|
||
|
||
MOVE A0,A7
|
||
|
||
MOVE *A7(OFLAGS),A14,W
|
||
ORI M_DBLSCL,A14
|
||
MOVE A14,*A7(OFLAGS),W
|
||
|
||
MOVE *A8(OXVAL),A2,L
|
||
MOVE A2,*A7(OXVAL),L
|
||
|
||
MOVE *A8(OYVAL),A4,L
|
||
SUBI 70*2 << 15,A4
|
||
MOVE A4,*A7(OYVAL),L
|
||
|
||
MOVE *A8(OZVAL),A5,L
|
||
SUBK 32,A5
|
||
MOVE A5,*A7(OZVAL),L
|
||
|
||
MOVI -0800H,A1
|
||
MOVI -0100H,A0
|
||
CALLA RANGERND
|
||
MOVE A0,*A7(OZVEL),L
|
||
|
||
MOVI -010000H,A1
|
||
MOVI 040000H,A0
|
||
CALLA RANGERND
|
||
MOVE A0,*A7(OYVEL),L
|
||
|
||
MOVI -080000H,A1
|
||
MOVI 080000H,A0
|
||
CALLA RANGERND
|
||
MOVE A0,*A7(OXVEL),L
|
||
|
||
MOVE A7,A0
|
||
|
||
CALLA INSOBJ
|
||
ATE_DONE
|
||
RETS
|
||
|
||
FUSELAGE_INIT
|
||
.LONG CPTFSEC9sd, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, 0
|
||
.LONG C_STRTANIM
|
||
.LONG DUP_TIMEOUT_ANIM
|
||
|
||
ENGINE_INIT
|
||
.LONG CPTFSEC3s, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, 0
|
||
.LONG C_STRTANIM
|
||
.LONG DUP_TIMEOUT_ANIM
|
||
|
||
TOP_FUSELAGE_INIT
|
||
.LONG CPTFSEC5s, 0
|
||
.WORD OID_JUNK, DMAWNZ, M_DBLSCL, 0
|
||
.LONG C_STRTANIM
|
||
.LONG DUP_TIMEOUT_ANIM
|
||
|
||
DUP_TIMEOUT_ANIM
|
||
LW 1,60
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
|
||
FINAL_SHAKE_ANIM
|
||
LWL 1,1|AFunc,A_SHAKE_COPTER
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,4
|
||
LWLL 1,0|AFunc,A_Anim_DSJ+2,FINAL_SHAKE_ANIM
|
||
|
||
LWL 1,1|AFunc,A_START_DUPING
|
||
|
||
FINAL_SHAKE_ANIM_PART2
|
||
LWL 1,1|AFunc,A_SHAKE_COPTER
|
||
LWL 1,1|AFunc,A_THROW_EXPLO
|
||
LWL 1,1|AFunc,A_THROW_EXPLO
|
||
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,2
|
||
|
||
; LWLL 1,0|AFunc,A_AnimFrm+2,FINAL_SHAKE_ANIM_PART2
|
||
|
||
LWLL 1,0|AFunc,A_Anim_DSJ+2,FINAL_SHAKE_ANIM_PART2
|
||
|
||
LWL 1,1|AFunc,A_FINAL_EXPLO_COPTER
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_FINAL_EXPLO_COPTER - COPTER GO BOOM! *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_FINAL_EXPLO_COPTER
|
||
SOUND1 SND_FINAL_EXPLO_COPTER1
|
||
SOUND1 SND_FINAL_EXPLO_COPTER2
|
||
SOUND1 SND_FINAL_EXPLO_COPTER3
|
||
CREATE PID_IND, PROC_SKY_FLASH
|
||
JRUC A_DELETE_COPTER
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ENGINE VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
ENGINE_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
MOVI GUN_DAMAGE,A0,W
|
||
CALLR COPTER_HIT
|
||
SOUND1 SND_CLANG_LOW
|
||
JRUC EV_GO
|
||
ENGINE_COLLISION
|
||
CALLR COPTER_HIT
|
||
CALLA PUSHBACK
|
||
SOUND1 SND_THUD
|
||
EV_GO
|
||
CMPK 2,A5
|
||
JREQ EV_DESTROYED ;BR=TRASHED!
|
||
RETS
|
||
EV_DESTROYED
|
||
MOVI 10000,A1
|
||
CALLA SCORE
|
||
MOVK 20,A6 ;SHAKE RADIUS
|
||
EV_NOSHAKE_DESTROYED
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
MOVE *A0(OSTUTTER),A14,W ;INCREASE STUTTER CHANCE
|
||
ADDK 32,A14
|
||
MOVE A14,*A0(OSTUTTER),W
|
||
|
||
PUSH A2
|
||
MOVI -040000H,A1 ;MIN X VEL
|
||
MOVI 040000H,A2 ;MAX X VEL
|
||
MOVI -040000H,A3 ;MIN Y VEL
|
||
MOVI 040000H,A4 ;MAX Y VEL
|
||
MOVI [-117*2,51*2],A5 ;RIGHT BLOW OFFSET
|
||
MOVI FRAG_C1,A7 ;FRAGMENT SCRIPT
|
||
MOVK 8,A9 ;NUMBER OF BLOWS
|
||
MOVI EV_MAKE_FIRE,A10 ;BLOWN ROUTINE
|
||
CALLR BLOW_PART ;MAKE A BIG THING ABOUT IT
|
||
PULLQ A2
|
||
|
||
RETS
|
||
|
||
EV_MAKE_FIRE
|
||
MOVB *A8(OPARTID),A14
|
||
MOVE A8,A3
|
||
MOVI gGRAD2cy,A8 ;LEFT PALETTE
|
||
CMPK RGHT_ENGINE_COVER,A14
|
||
JRNE EV_ENG_CYCLE ;BR=THIS IS NOT THE RIGHT ONE
|
||
MOVI gGRAD2cy2,A8 ;RIGHT PALETTE
|
||
EV_ENG_CYCLE
|
||
MOVK 18,A9 ;COLOR CYCLE ON ENGINE
|
||
MOVK 31,A10
|
||
MOVK 2,A11
|
||
CREATE PID_COLOR,CYCLE16
|
||
MOVE A3,A8
|
||
|
||
MOVE *A8(OCTRL),A10,W
|
||
ANDI M_FLIPH,A10
|
||
MOVI [-107*2,-48*2],A9
|
||
MOVI ENGINE_FIRE_INIT,A5
|
||
BTST B_FLIPH,A10
|
||
JRZ EV_FIRE ;BR=NOT FLIPPED
|
||
NEGX A9
|
||
EV_FIRE
|
||
CALLR ADD_FIRE ;FIRE GOOD!
|
||
|
||
CALLA DELETE_OBJ
|
||
|
||
RETS
|
||
|
||
; MMTM SP,B1,B2,B4,B5,B6,B8,B9 ;MAKE FRAGMENTS
|
||
;
|
||
; MOVI 040000H,A0
|
||
; CLR A3
|
||
; CALLA PreFrag_Box
|
||
; MOVI -0FFH,B9
|
||
; MOVI -01H,B10
|
||
; MOVI FRAG_C5,B14
|
||
; CALLA Fragger
|
||
;
|
||
; MOVI yGRAD2Yp,A5
|
||
; MOVE A5,*A0(FPDATA),L ;SET PALETTE
|
||
;
|
||
; MMFM SP,B1,B2,B4,B5,B6,B8,B9
|
||
;
|
||
; JAUC DEL_PROC_AND_OBJ
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FUSELAGE VECTORS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
FUSELAGE_GUNVECT
|
||
CALLA COPTER_SPARK
|
||
SOUND1 SND_CLANG_LOW
|
||
CALLR CV_GUN ;CHECK FOR GUN EXPLOSION
|
||
MOVI GUN_DAMAGE/8,A3,W
|
||
JRUC FV_GO
|
||
FUSELAGE_COLLISION
|
||
SOUND1 SND_THUD
|
||
CALLR PUSHBACK
|
||
CALLR CV_ROCKET ;MAKE ROCKET EXPLOSION
|
||
MOVI ROCKET_DAMAGE/8,A3,W
|
||
FV_GO
|
||
MOVI FUSELAGE_DUMMY_DAMAGE_TABLE,A4
|
||
; MOVK 4,A5
|
||
MOVK 3,A5
|
||
CALLR DUMMY_DAMAGE ;FIND A PART TO DAMAGE
|
||
JRNC FV_DONE ;BR=DAMAGED A PART
|
||
|
||
MOVI FLIGHT_9S_GUNVECT,A14
|
||
MOVE A14,*A8(OGUNVECT),L
|
||
MOVI FLIGHT_9S_COLLISION,A14
|
||
MOVE A14,*A8(OCOLLISION),L
|
||
FV_DONE
|
||
JRUC F9S_GO ;FLASH OTHER HALF
|
||
|
||
FUSELAGE_DUMMY_DAMAGE_TABLE
|
||
WL LEFT_WING, WV_DESTROYED
|
||
WL RGHT_WING, WV_DESTROYED
|
||
WL BELLY_GUN, BWV_DESTROYED
|
||
; WL NOSE_GUN, NV_DESTROYED
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DUMMY_DAMAGE - DAMAGE A PART INDIRECTLY FROM A TABLE OF POSSIBLE PARTS *
|
||
* *
|
||
* PASS: *
|
||
* A0 = DAMAGE AMOUNT *
|
||
* A4 = TABLE *
|
||
* A5 = NUMBER OF TABLE ENTRIES *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* C SET IF NO PART DAMAGED, CLEAR IF DAMAGE *
|
||
* *
|
||
**************************************************************************
|
||
|
||
DUMMY_DAMAGE
|
||
PUSH A8
|
||
DD_LUPE
|
||
MOVE *A4+,A1,W
|
||
CALLA FINDPART
|
||
JRNZ DD_HIT ;BR=FOUND A PART TO HIT
|
||
ADDK 020H,A4
|
||
DSJ A5,DD_LUPE
|
||
SETC ;FLAG NO DAMAGE
|
||
JRUC DD_DONE
|
||
DD_HIT
|
||
PUSH A4
|
||
MOVE A0,A8
|
||
MOVE A3,A0
|
||
CALLA COPTER_HIT
|
||
PULLQ A4
|
||
CMPK 2,A5
|
||
JRNE DD_NOT_DESTROYED ;BR=NOT TRASHED
|
||
MOVE *A4,A14,L
|
||
CALL A14
|
||
DD_NOT_DESTROYED
|
||
CLRC ;FLAG DAMAGE
|
||
DD_DONE
|
||
PULLQ A8
|
||
RETS
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* ********************************************************************** *
|
||
* * *
|
||
* * ******************************************************************** *
|
||
* * * *
|
||
* * * THE FOLLOWING GUN AND COLLISION ROUTINES MUST BE REDONE! *
|
||
* * * *
|
||
* * ******************************************************************** *
|
||
* * *
|
||
* ********************************************************************** *
|
||
* *
|
||
**************************************************************************
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* COPTER_DUM_GUNVECT *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;COPTER_DUM_GUNVECT
|
||
; JRUC CDG_GUNHIT ;THESE INSTRUCTIONS MUST BE THE
|
||
; NOP ; LENGTH OF A LONG WORD
|
||
;;COLLISION ENTRY POINT
|
||
;CDG_COLLISION
|
||
; MOVI ROCKET_DAMAGE/4,A0,W
|
||
;CDG_GO
|
||
; MOVE A8,A1
|
||
; PUSH A8
|
||
; MOVE *A8(OPART1),A8,L
|
||
; LOCKON Z
|
||
; MOVE *A8(OPARTS),A8,L
|
||
;
|
||
; MOVB *A8(OPARTID),A14
|
||
; CMPK LEFT_FUSELAGE,A14
|
||
; JRGE CDG_NOMORE
|
||
;
|
||
; .if DEBUG
|
||
; CMP A1,A8
|
||
; LOCKON EQ
|
||
; .endif
|
||
;
|
||
; MOVE *A8(OGUNVECT),A14,L
|
||
; ADDI 020H,A14 ;OFFSET TO COLLISION ENTRY POINT
|
||
;
|
||
; CALL A14
|
||
;
|
||
; PULLQ A8
|
||
;CDG_DONE
|
||
; RETS
|
||
;CDG_GUNHIT
|
||
; MOVI GUN_DAMAGE/4,A0,W
|
||
; JRUC CDG_GO
|
||
;CDG_NOMORE
|
||
; CLR A14
|
||
; MOVE A14,*A1(OCVECT),L
|
||
; MOVI DUMRETS,A14
|
||
; MOVE A14,*A1(OGUNVECT),L
|
||
; PULLQ A8
|
||
; RETS
|
||
;
|
||
;;CDG_CHECK_TIME
|
||
;; MOVE *A8(OHITTIME),A14,W ;GET LAST TIME
|
||
;; MOVE @WAVEDISPS,A3,W ;GET CURRENT TIME
|
||
;; SUB A3,A14 ;CALCULATE DELTA TIME
|
||
;; NEG A14
|
||
;; CMPK 5,A14
|
||
;; JRLE CDG_DONE ;BR=TOO SHORT, DON'T HIT
|
||
;; MOVE A3,*A8(OHITTIME),W ;SAVE THIS TIME AS LAST TIME
|
||
;; JRUC CDG_GO
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_COMMAND - CHECK IF BITS SET IN OCOMMAND WORD, JUMP IF NOT *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* AARG+,W = BITS TO CHECK *
|
||
* AARG+,L = ADDRESS TO JUMP TO IF NOT SET *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_CHECK_COMMAND
|
||
MOVE *A8(OPART1),A1,L
|
||
LOCKON Z
|
||
MOVE *A1(OCOMMAND),A1,W
|
||
CALLA GETAFARG_WORD
|
||
AND A0,A1
|
||
XOR A0,A1
|
||
JRZ ACA_DONE ;BR=BITS ARE SET
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L
|
||
ACA_DONE
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DAM_RETURN - RETURN FROM DAMAGE SUBROUTINE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_DAM_RETURN
|
||
MOVE *A8(AnimRetScr),A14,L
|
||
JAZ PULL_ANIM ;BR=FLAG SET TO PULL ANIMATION
|
||
MOVE A14,*A8(AnimScr),L
|
||
MOVE *A8(AnimRetFrm),*A8(AnimFrm),L
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_RESTORE_FLIPH - RETURN FLIPH BIT TO IT'S ORIGINAL VALUE *
|
||
* *
|
||
* PASS: *
|
||
* A8 = OBJECT *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_RESTORE_FLIPH
|
||
MOVE *A8(OPART1),A0,L
|
||
LOCKON Z
|
||
MOVE *A0(OCTRL),A14,W
|
||
ANDI M_FLIPH,A14 ;GET FLIPH BIT FROM HEAD
|
||
MOVE *A8(OCTRL),A1,W
|
||
ANDNI M_FLIPH,A1
|
||
OR A14,A1 ;GIVE THE PART THE SAME FLIPH
|
||
MOVE A1,*A8(OCTRL),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_DOOROFFX - SET DOOR X OFFSET FROM COPTER ANIMATION POINT *
|
||
* *
|
||
* PASS: *
|
||
* A8 = DOOR OBJECT *
|
||
* AARG+,W = X OFFSET FOR UNFLIPPED COPTER *
|
||
* *
|
||
* RETURN: *
|
||
* NUTIN' *
|
||
* *
|
||
**************************************************************************
|
||
|
||
A_SET_DOOROFFX
|
||
CALLA GETAFARG_WORD ;GET X OFFSET
|
||
MOVE *A8(OCTRL),A14,W
|
||
BTST B_FLIPH,A14
|
||
JRZ ASD_SET_OPARTSX ;BR=NOT FLIPPED IN X
|
||
NEG A0
|
||
ASD_SET_OPARTSX
|
||
MOVE A0,*A8(OPARTSXY),W
|
||
MOVE A8,A0
|
||
MOVE *A8(OPART1),A8,L ;NICE HEAD!
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
JAUC SETOFFPU
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SIDE_COPTER_INIT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SIDE_COPTER_INIT
|
||
.byte 20, 0, 0, 7 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long yGRAD2Yp ;IMGPAL
|
||
.long gGRAD2Gp ;IMGPAL
|
||
.long gunGRADp ;IMGPAL
|
||
.long gunGRAD2p ;IMGPAL
|
||
.long PROPAL1s ;IMGPAL
|
||
.long COPDAM2 ;IMGPAL
|
||
.LONG PILOT_P ;IMGPAL
|
||
;OID, GLOBAL_OPTIONS
|
||
.word OID_COPTER, OM_COLL|OM_POS|OM_INSERT
|
||
.LONG COPTER_COLL
|
||
.LONG 039189B4H, -04000000H, 02742FH
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
|
||
LWWWW CPTSSEC2s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV
|
||
.LONG COPTER_LCLANG_FLASH_GUNVECT
|
||
LWWWW CPTGATGN1s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [31*2,21*2]
|
||
.LONG FLIGHT_WEAPON_GUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG gunGRAD2p ;NORMAL PAL
|
||
.LONG gnGRAD2pX ;HILITE PAL
|
||
.LONG GAT_GUN_ANIM0 ;ATTACK ANIMATION
|
||
.WORD GGA_LUPE-GAT_GUN_ANIM0 ;FIRE ANIMATION OFFSET
|
||
.LONG SND_GAT_GUN ;SOUND
|
||
.LONG GAT_SWING_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG GATFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [18*2,0] ;FLASH OFFSET
|
||
.WORD 20 << 8 ;HIT POINTS
|
||
LWWWW CPTROKIT1s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [6*2,21*2]
|
||
.LONG FLIGHT_HGUNVECT
|
||
.LONG C_INIT_LAUNCHER
|
||
.LONG LAUNCHER_ANIM
|
||
.WORD 20 << 8 ;HIT POINTS
|
||
LWWWW CPTNZGN1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [46*2,-120*2]
|
||
.LONG FLIGHT_WEAPON_GUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG gunGRADp ;NORMAL PAL
|
||
.LONG gunGRADpb ;HILITE PAL
|
||
.LONG BELLY_GUN_ANIM0 ;ATTACK ANIMATION
|
||
.WORD BGA_LUPE-BELLY_GUN_ANIM0 ;FIRE ANIMATION OFFSET
|
||
.LONG SND_BELLY_GUN ;SOUND
|
||
.LONG BELLY_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG BELLYFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [22*2,0] ;FLASH OFFSET
|
||
.WORD 20 << 8 ;HIT POINTS
|
||
LWWWW CPTSSEC10s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_GUNV
|
||
.LONG FLIGHT_HGUNVECT
|
||
LWWWW CPTSSEC11s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_GUNV
|
||
.LONG FLIGHT_LGUNVECT
|
||
LWWWW CPTSSEC7s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_PRVGUNV
|
||
LWWWW CPTSSEC8s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_PRVGUNV
|
||
LWWWW CPTSSEC1s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
|
||
LWWWW CPTSSEC3s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC4sx, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC5s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC6s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC9s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_GUNV
|
||
.LONG FLIGHT_HGUNVECT
|
||
|
||
LWWWW CPTSDOR1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_GUNV
|
||
; .LONG [13*2,-53*2]
|
||
.LONG FLIGHT_LGUNVECT
|
||
|
||
; LWWWW CPTLNDGR1a, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,31*2]
|
||
; LWWWW CPTLNDGR1b, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,31*2]
|
||
; LWWWW CPTLNDGR1a, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,-93*2]
|
||
; LWWWW CPTLNDGR1b, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,-93*2]
|
||
|
||
LWWWW CPTGEAR1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_COLL|OM_GUNV|OM_ANIM
|
||
.LONG [-46*2,-20*2]
|
||
.LONG DUMCOLL
|
||
.LONG COPTER_GCLANG_GUNVECT
|
||
.LONG BLADE_ANIM
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPV, M_DBLSCL, 2, OM_OPARTS|OM_COLL|OM_GUNV
|
||
.LONG [-72*2,-20*2]
|
||
.LONG DUMCOLL
|
||
.LONG COPTER_BCLANG_GUNVECT
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPH, M_DBLSCL, 2, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [-72*2,-20*2]
|
||
.LONG DUMCOLL
|
||
LWWWW SIDEPILOT, DMAWNZ|M_FLIPH, 0, 2, OM_OPARTS|OM_COLL|OM_GUNV
|
||
.LONG [-27,-135]
|
||
.LONG DUMCOLL
|
||
.LONG DUMRETS
|
||
LWWWW SIDEPILOT, DMAWNZ|M_FLIPH, 0, 1, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [28,-220]
|
||
.LONG DUMCOLL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SIDE_COPTER_ONTOP_INIT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SIDE_COPTER_ONTOP_INIT
|
||
.byte 18, 0, 0, 6 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long yGRAD2Yp ;IMGPAL
|
||
.long gGRAD2Gp ;IMGPAL
|
||
.long gunGRADp ;IMGPAL
|
||
.long gunGRAD2p ;IMGPAL
|
||
.long PROPAL1s ;IMGPAL
|
||
.long COPDAM2 ;IMGPAL
|
||
;OID, GLOBAL_OPTIONS
|
||
.word OID_COPTER, OM_DUMCOLL|OM_INSERT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
|
||
LWWWW CPTSSEC1s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV
|
||
.LONG COPTER_LCLANG_GUNVECT
|
||
LWWWW CPTSSEC2s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC3s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC4sx, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC5s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC6s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC9s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_PRVGUNV
|
||
LWWWW CPTSSEC11s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_PRVGUNV
|
||
|
||
LWWWW CPTSSEC7s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_GUNV
|
||
.LONG DUMRETS
|
||
LWWWW CPTSSEC8s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_PRVGUNV
|
||
|
||
LWWWW CPTSSEC10s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_GUNV
|
||
.LONG COPTER_HCLANG_GUNVECT
|
||
|
||
LWWWW CPTLNDGR1a, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_GUNV
|
||
.LONG [52*2,31*2]
|
||
.LONG COPTER_LCLANG_GUNVECT
|
||
LWWWW CPTLNDGR1a, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
.LONG [52*2,-93*2]
|
||
LWWWW CPTLNDGR1b, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_GUNV
|
||
.LONG [52*2,31*2]
|
||
.LONG COPTER_GCLANG_GUNVECT
|
||
LWWWW CPTLNDGR1b, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
.LONG [52*2,-93*2]
|
||
|
||
LWWWW CPTGEAR1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_GUNV|OM_ANIM
|
||
.LONG [-46*2,-20*2]
|
||
.LONG COPTER_GCLANG_GUNVECT
|
||
.LONG BLADE_ANIM
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPV, M_DBLSCL, 2, OM_OPARTS|OM_GUNV
|
||
.LONG [-72*2,-20*2]
|
||
.LONG COPTER_BCLANG_GUNVECT
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPH, M_DBLSCL, 2, OM_OPARTS|OM_PRVGUNV
|
||
.LONG [-72*2,-20*2]
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SIDE_COPTER_INTRO_INIT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
SIDE_COPTER_INTRO_INIT
|
||
.byte 20, 0, 0, 7 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long yGRAD2Yp ;IMGPAL
|
||
.long gGRAD2Gp ;IMGPAL
|
||
.long gunGRADp ;IMGPAL
|
||
.long gunGRAD2p ;IMGPAL
|
||
.long PROPAL1s ;IMGPAL
|
||
.long COPDAM2 ;IMGPAL
|
||
.LONG PILOT_P ;IMGPAL
|
||
;OID, GLOBAL_OPTIONS
|
||
.word OID_COPTER, OM_COLL|OM_INSERT
|
||
.LONG COPTER_INTRO_CVECT
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
|
||
LWWWW CPTSSEC2s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV
|
||
.LONG COPTER_I_LCLANG_GUNVECT
|
||
LWWWW CPTGATGN1s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [31*2,21*2]
|
||
.LONG INTRO_DELBLOWH_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTROKIT1s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [6*2,21*2]
|
||
.LONG COPTER_I_HCLANG_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTNZGN1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [46*2,-120*2]
|
||
.LONG INTRO_DELBLOWH_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTSSEC10s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_GUNV|OM_CFUNC
|
||
.LONG INTRO_DELBLOWH_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTSSEC11s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_GUNV|OM_CFUNC
|
||
.LONG COPTER_I_LCLANG_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTSSEC7s, DMAWNZ|M_FLIPH, M_DBLSCL|M_NOPIXSCAN, -1, OM_GUNV|OM_CFUNC
|
||
.LONG INTRO_COCKBLOW_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTSSEC8s, DMAWNZ|M_FLIPH, M_DBLSCL|M_NOPIXSCAN, -1, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
LWWWW CPTSSEC1s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV|OM_CFUNC
|
||
.LONG INTRO_PARTBLOW_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 20 << 8
|
||
|
||
LWWWW CPTSSEC3s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV
|
||
.LONG COPTER_I_LCLANG_GUNVECT
|
||
LWWWW CPTSSEC4sx, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_PRVGUNV
|
||
LWWWW CPTSSEC5s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV|OM_CFUNC
|
||
.LONG INTRO_PARTBLOW_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 20 << 8
|
||
LWWWW CPTSSEC6s, DMAWNZ|M_FLIPH, M_DBLSCL, 0, OM_GUNV
|
||
.LONG COPTER_I_LCLANG_GUNVECT
|
||
LWWWW CPTSSEC9s, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_GUNV|OM_CFUNC
|
||
.LONG INTRO_PARTBLOW_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 20 << 8
|
||
|
||
LWWWW CPTSDOR1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_GUNV|OM_CFUNC
|
||
; .LONG [13*2,-53*2]
|
||
.LONG INTRO_DELBLOWL_GUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD 5 << 8
|
||
; .LONG COPTER_DOOR_ANIM
|
||
|
||
; LWWWW CPTLNDGR1a, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,31*2]
|
||
; LWWWW CPTLNDGR1b, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,31*2]
|
||
; LWWWW CPTLNDGR1a, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,-93*2]
|
||
; LWWWW CPTLNDGR1b, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_PRVGUNV
|
||
; .LONG [52*2,-93*2]
|
||
|
||
LWWWW CPTGEAR1s, DMAWNZ|M_FLIPH, M_DBLSCL, 1, OM_OPARTS|OM_COLL|OM_GUNV|OM_ANIM
|
||
.LONG [-46*2,-20*2]
|
||
.LONG DUMCOLL
|
||
.LONG COPTER_I_GCLANG_GUNVECT
|
||
.LONG BLADE_ANIM
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPV, M_DBLSCL, 2, OM_OPARTS|OM_COLL|OM_GUNV
|
||
.LONG [-72*2,-20*2]
|
||
.LONG DUMCOLL
|
||
.LONG COPTER_I_BCLANG_GUNVECT
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPH, M_DBLSCL, 2, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [-72*2,-20*2]
|
||
.LONG DUMCOLL
|
||
LWWWW SIDEPILOT, DMAWNZ|M_FLIPH, 0, 2, OM_OPARTS|OM_COLL|OM_GUNV
|
||
.LONG [-27,-135]
|
||
.LONG DUMCOLL
|
||
.LONG DUMRETS
|
||
LWWWW SIDEPILOT, DMAWNZ|M_FLIPH, 0, 1, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [28,-220]
|
||
.LONG DUMCOLL
|
||
|
||
SIDE_COPTER_INTRO_COLLISIONS
|
||
.LONG COPTER_LCLANG_COLLISION, INTRO_DELBLOWH_COLLISION
|
||
.LONG COPTER_HCLANG_COLLISION, INTRO_DELBLOWH_COLLISION
|
||
.LONG INTRO_DELBLOWH_COLLISION, COPTER_LCLANG_COLLISION
|
||
.LONG INTRO_COCKBLOW_COLLISION, INTRO_COCKBLOW_COLLISION
|
||
.LONG INTRO_PARTBLOW_COLLISION, COPTER_LCLANG_COLLISION
|
||
.LONG COPTER_LCLANG_COLLISION, INTRO_PARTBLOW_COLLISION
|
||
.LONG COPTER_LCLANG_COLLISION, INTRO_PARTBLOW_COLLISION
|
||
.LONG INTRO_DELBLOWL_COLLISION, 0, 0, 0, 0, 0
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* WEAPON FLASH INITS AND ANIMS *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GATFLASH_INIT
|
||
.LONG GATFIRE1a, 0
|
||
.WORD OID_JUNK, DMAGO, M_DBLSCL, -7
|
||
.LONG C_RESTART_GAT_ANIM
|
||
; .LONG C_STRTANIM
|
||
; .LONG GATFLASH_ANIM
|
||
|
||
GATFLASH_ANIM
|
||
LWWL GATFIRE1a,3|AFlip|AFunc,0,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE2a,3|AFlip|AFunc,0,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE3a,3|AFlip|AFunc,0,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE4a,3|AFlip|AFunc,0,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE1a,3|AFlip|AFunc,M_FLIPH|M_FLIPV,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE2a,3|AFlip|AFunc,M_FLIPH|M_FLIPV,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE3a,3|AFlip|AFunc,M_FLIPH|M_FLIPV,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
LWWL GATFIRE4a,3|AFlip|AFunc,M_FLIPH|M_FLIPV,A_HIT_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
.long 0
|
||
|
||
NOSEFLASH_INIT
|
||
.LONG FNZGNFLWR1, 0
|
||
.WORD OID_JUNK, DMAGO, M_DBLSCL, -10
|
||
.LONG C_STRTANIM
|
||
.LONG GENERIC_FLASH_ANIM
|
||
|
||
BELLYFLASH_INIT
|
||
.LONG COPNZFLWR1, 0
|
||
.WORD OID_JUNK, DMAGO, M_DBLSCL, -6
|
||
.LONG C_STRTANIM
|
||
.LONG GENERIC_FLASH_ANIM
|
||
|
||
FUSEFLASH_INIT
|
||
.LONG SEC8FLWR1, 0
|
||
.WORD OID_JUNK, DMAGO, M_DBLSCL, -6
|
||
.LONG C_STRTANIM
|
||
.LONG GENERIC_FLASH_ANIM
|
||
|
||
GENERIC_FLASH_ANIM
|
||
LWL 1,3|AFunc,A_HIT_FLIP_ON
|
||
LWL 1,3|AFunc,OBJ_OFF
|
||
.long 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* FRONT_COPTER_INIT *
|
||
* *
|
||
**************************************************************************
|
||
|
||
GUN_HIT_POINTS EQU 33 << 8 ; 50 << 8
|
||
ROCKET_HIT_POINTS EQU 50 << 8 ; 75 << 8
|
||
NOSE_HIT_POINTS EQU 50 << 8 ; 75 << 8
|
||
GRILL_HIT_POINTS EQU 66 << 8 ;100 << 8
|
||
ENGINE_HIT_POINTS EQU 10 << 8
|
||
COCKPIT_HIT_POINTS EQU 5 << 8
|
||
SIDE_HIT_POINTS EQU 10 << 8
|
||
WING_HIT_POINTS EQU 33 << 8 ; 50 << 8
|
||
|
||
FRONT_COPTER_INIT
|
||
.byte 27, 0, 0, 8 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long yGRAD2Yp ;IMGPAL
|
||
.long gGRAD2cy ;IMGPAL
|
||
.long gGRAD2Gp ;IMGPAL
|
||
.long PROPAL1s ;IMGPAL
|
||
.long gunGRADp ;IMGPAL
|
||
.long gunGRAD2p ;IMGPAL
|
||
.LONG gGRAD2cy2 ;IMGPAL
|
||
.LONG PILOT_P ;IMGPAL
|
||
;OID, GLOBAL_OPTIONS
|
||
.word OID_COPTER, OM_COLL|OM_POS|OM_INSERT
|
||
.LONG COPTER_COLL
|
||
.LONG 031CA1B4H,-015F13FCH,0189C7H
|
||
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF
|
||
* .word OPTIONS
|
||
|
||
LWWWW CPTFSEC1s, DMAWNZ, M_DBLSCL, 0, OM_GUNV
|
||
.LONG COPTER_LCLANG_GUNVECT
|
||
LWWWW CPTGATGN4s, DMAWNZ, M_DBLSCL, -6, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [-65*2,-75*2]
|
||
; .LONG WING_WEAPON_GUNVECT
|
||
.LONG FLIGHT_WEAPON_GUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG gunGRAD2p ;NORMAL PAL
|
||
.LONG gnGRAD2pX ;HILITE PAL
|
||
.LONG GAT_PART_FIRE_ANIM ;ATTACK ANIMATION
|
||
.WORD 0 ;FIRE ANIMATION OFFSET
|
||
.LONG SND_GAT_GUN ;SOUND
|
||
.LONG GAT_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG GATFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [18*2,0] ;FLASH OFFSET
|
||
.WORD GUN_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTROKIT4s, DMAWNZ, M_DBLSCL, -7, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [-75*2,-116*2]
|
||
; .LONG WING_WEAPON_GUNVECT
|
||
.LONG FLIGHT_HGUNVECT
|
||
.LONG C_INIT_LAUNCHER
|
||
.LONG ROCKET_LAUNCHER_ANIM
|
||
.WORD ROCKET_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTGATGN4s, DMAWNZ|M_FLIPH, M_DBLSCL, -6, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [-65*2,75*2]
|
||
; .LONG WING_WEAPON_GUNVECT
|
||
.LONG FLIGHT_WEAPON_GUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG gunGRAD2p ;NORMAL PAL
|
||
.LONG gnGRAD2pX ;HILITE PAL
|
||
.LONG GAT_PART_FIRE_ANIM ;ATTACK ANIMATION
|
||
.WORD 0 ;FIRE ANIMATION OFFSET
|
||
.LONG SND_GAT_GUN ;SOUND
|
||
.LONG GAT_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG GATFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [18*2,0] ;FLASH OFFSET
|
||
.WORD GUN_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTROKIT4s, DMAWNZ|M_FLIPH, M_DBLSCL, -7, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [-75*2,116*2]
|
||
; .LONG WING_WEAPON_GUNVECT
|
||
.LONG FLIGHT_HGUNVECT
|
||
.LONG C_INIT_LAUNCHER
|
||
.LONG ROCKET_LAUNCHER_ANIM
|
||
.WORD ROCKET_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTNZGN4sb, DMAWNZ, M_DBLSCL, -5, OM_OPARTS|OM_GUNV|OM_CFUNC
|
||
.LONG [-14*2,0]
|
||
; .LONG BELLY_WEAPON_GUNVECT
|
||
.LONG FLIGHT_WEAPON_GUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG gunGRADp ;NORMAL PAL
|
||
.LONG gunGRADpb ;HILITE PAL
|
||
.LONG BELLY_PART_FIRE_ANIM ;ATTACK ANIMATION
|
||
.WORD 0 ;FIRE ANIMATION OFFSET
|
||
.LONG SND_BELLY_GUN ;SOUND
|
||
.LONG BELLY_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG BELLYFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [22*2,0] ;FLASH OFFSET
|
||
.WORD GUN_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC10s, DMAWNZ, M_DBLSCL, -9, OM_GUNV|OM_CFUNC
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_HCLANG_GUNVECT
|
||
.LONG FLIGHT_HGUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG gGRAD2Gp ;NORMAL PAL
|
||
.LONG PUDD2Gp ;HILITE PAL
|
||
.LONG 0 ;PART_FIRE_ANIM ;ATTACK ANIMATION
|
||
.WORD 0 ;FIRE ANIMATION OFFSET
|
||
.LONG 0 ;SND_NOSE_GUN ;SOUND
|
||
.LONG PART_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG NOSEFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [-48*2,0] ;FLASH OFFSET
|
||
.WORD NOSE_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC4s, DMAWNZ, M_DBLSCL, -4, OM_GUNV|OM_CFUNC
|
||
; .LONG ENGINE_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD ENGINE_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC4s, DMAWNZ|M_FLIPH, M_DBLSCL, -4, OM_GUNV|OM_CFUNC
|
||
; .LONG ENGINE_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD ENGINE_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC2s, DMAWNZ, M_DBLSCL, -2, OM_GUNV|OM_CFUNC
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_LCLANG_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD WING_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC2s, DMAWNZ|M_FLIPH, M_DBLSCL, -2, OM_GUNV|OM_CFUNC
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_LCLANG_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD WING_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC6s, DMAWNZ, M_DBLSCL|M_NOPIXSCAN, -8, OM_GUNV|OM_CFUNC
|
||
; .LONG COCKPIT_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD COCKPIT_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC7s, DMAWNZ, M_DBLSCL|M_NOPIXSCAN, -7, OM_GUNV|OM_CFUNC
|
||
; .LONG COCKPIT_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD COCKPIT_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC8s, DMAWNZ, M_DBLSCL, -5, OM_GUNV|OM_CFUNC
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_LCLANG_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG yGRAD2Yp ;NORMAL PAL
|
||
.LONG yGRAD2Ypz ;HILITE PAL
|
||
.LONG 0 ;PART_FIRE_ANIM ;ATTACK ANIMATION
|
||
.WORD 0 ;FIRE ANIMATION OFFSET
|
||
.LONG 0 ;SND_FUSE_GUN ;SOUND
|
||
.LONG PART_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG FUSEFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [-38*2,-41*2] ;FLASH OFFSET
|
||
.WORD SIDE_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC8s, DMAWNZ|M_FLIPH, M_DBLSCL, -5, OM_GUNV|OM_CFUNC
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_LCLANG_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_INIT_GUN
|
||
.LONG yGRAD2Yp ;NORMAL PAL
|
||
.LONG yGRAD2Ypz ;HILITE PAL
|
||
.LONG 0 ;PART_FIRE_ANIM ;ATTACK ANIMATION
|
||
.WORD 0 ;FIRE ANIMATION OFFSET
|
||
.LONG 0 ;SND_FUSE_GUN ;SOUND
|
||
.LONG PART_DAM_ANIM ;DAMAGE ANIMATION
|
||
.LONG FUSEFLASH_INIT ;FLASH INIT TABLE
|
||
.LONG [-38*2,41*2] ;FLASH OFFSET
|
||
.WORD SIDE_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC11a, DMAWNZ, M_DBLSCL, -9, OM_GUNV|OM_CFUNC
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_LCLANG_GUNVECT
|
||
.LONG FLIGHT_LGUNVECT
|
||
.LONG C_SET_HITS
|
||
.WORD GRILL_HIT_POINTS ;HIT POINTS
|
||
LWWWW CPTFSEC9s, DMAWNZ, M_DBLSCL, -8, OM_GUNV
|
||
; .LONG COPTER_DUM_GUNVECT ;COPTER_LCLANG_GUNVECT
|
||
.LONG FLIGHT_9S_GUNVECT
|
||
LWWWW CPTFSEC9s, DMAWNZ|M_FLIPH, M_DBLSCL, -8, OM_PRVGUNV
|
||
|
||
LWWWW CPTFSEC3s, DMAWNZ, M_DBLSCL, -3, OM_GUNV
|
||
.LONG COPTER_HCLANG_GUNVECT
|
||
LWWWW CPTFSEC3s, DMAWNZ|M_FLIPH, M_DBLSCL, -3, OM_PRVGUNV|OM_CFUNC
|
||
.LONG C_CHANGE_ENGINE_PAL
|
||
LWWWW CPTFSEC5s, DMAWNZ, M_DBLSCL, -4, OM_GUNV
|
||
.LONG COPTER_LCLANG_GUNVECT
|
||
LWWWW CPTFSEC5s, DMAWNZ|M_FLIPH, M_DBLSCL, -4, OM_PRVGUNV
|
||
LWWWW CPTGEAR1s, DMAWNZ|M_FLIPH, M_DBLSCL, -2, OM_OPARTS|OM_COLL|OM_GUNV|OM_ANIM
|
||
.LONG [-140*2,0]
|
||
.LONG DUMCOLL
|
||
.LONG COPTER_GCLANG_GUNVECT
|
||
.LONG BLADE_ANIM
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPV, M_DBLSCL, -1, OM_OPARTS|OM_COLL|OM_GUNV
|
||
.LONG [-166*2,0]
|
||
.LONG DUMCOLL
|
||
.LONG COPTER_BCLANG_GUNVECT
|
||
LWWWW CPTPROPh1, DMAWNZ|M_FLIPH, M_DBLSCL, -1, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [-166*2,0]
|
||
.LONG DUMCOLL
|
||
LWWWW FRONTPILOT, DMAWNZ, 0, -5, OM_OPARTS|OM_COLL|OM_GUNV
|
||
.LONG [-190,0]
|
||
.LONG DUMCOLL
|
||
.LONG DUMRETS
|
||
LWWWW FRONTPILOT, DMAWNZ, 0, -6, OM_OPARTS|OM_COLL|OM_PRVGUNV
|
||
.LONG [-140,0]
|
||
.LONG DUMCOLL
|
||
|
||
;COPTER_DOOR_ANIM
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,43*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,33*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,23*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,13*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,3*2
|
||
;
|
||
; LWL 1,1|AFunc,A_COPTER_DOORBOY
|
||
;
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,13*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,23*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,33*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,43*2
|
||
; LWLW 1,6|AFunc,A_SET_DOOROFFX+1,53*2
|
||
; .long 0
|
||
;
|
||
;**************************************************************************
|
||
;* *
|
||
;* A_COPTER_DOORBOY *
|
||
;* *
|
||
;**************************************************************************
|
||
;
|
||
;;FROM GXNONBOY.H
|
||
;OEFLAGS EQU ODATA+060H ;UHW ENEMY FLAGS
|
||
;
|
||
;B_BW EQU 2 ;BEHIND WALL
|
||
;M_BW EQU 00004H ;BEHIND WALL
|
||
;
|
||
;B_SIDE EQU 15 ;DIRECTION
|
||
; ;0 = HEADON MOTHER FUCKER
|
||
; ;1 = SIDEWAYS MELLOW DUDE
|
||
;M_SIDE EQU 08000H
|
||
;
|
||
;A_COPTER_DOORBOY
|
||
; MOVE A8,A9
|
||
;
|
||
; MOVE *A9(ODOORBOY),A14,L
|
||
; JRNZ ACD_LUPEANIM ;BR=DOORBOY ALREADY EXISTS
|
||
;
|
||
; MOVE *A9(OFLAGS),A14,W
|
||
; BTST B_OFSCRN,A14
|
||
; JRNZ ACD_DONE ;BR=DOOR IS OFF DA SCREEN
|
||
;
|
||
;; MOVI 1024/2,A0
|
||
;; CALLA RANDPER
|
||
;; JRNC ACD_DONE ;BR=STOP MAKIN' DOORBOYS
|
||
;
|
||
; MOVI COPTER_DOORBOY_INIT,A5 ;ALLOCATE OBJECT
|
||
; CALLA CREATE_OBJ
|
||
; JRZ ACD_LUPEANIM ;BR = ERROR! ERROR!
|
||
;
|
||
; MOVE A0,A8
|
||
; CALLA CLR_ODATA
|
||
;
|
||
; MOVE A8,*A9(ODOORBOY),L
|
||
;
|
||
; MOVI COPTER_DOORBOY_ANIM,A1
|
||
; CALLA STRT_ANIM ;START ANIMATION
|
||
;
|
||
; MOVI M_BW|M_SIDE,A14
|
||
; MOVE A14,*A8(OEFLAGS),W ;SET TYPE
|
||
;
|
||
; MOVE @RAND,A0,W
|
||
; ANDI M_FLIPH,A0
|
||
; CLR A0
|
||
; MOVE *A8(OCTRL),A14,W ;SET OCTRL
|
||
; OR A0,A14
|
||
; MOVE A14,*A8(OCTRL),W
|
||
;
|
||
; MOVI [100,85],A0
|
||
; MOVE *A9(OCTRL),A14,W
|
||
; BTST B_FLIPH,A14
|
||
; JRZ ACD_SET_OPARTSXY ;BR=COPTER NOT FLIPPED
|
||
; NEGX A0
|
||
;ACD_SET_OPARTSXY
|
||
; MOVE A0,*A8(OPARTSXY),L
|
||
;
|
||
; MOVI -20 << 15,A14
|
||
; MOVE A14,*A8(OGRNDOFF),L ;SET GROUND OFFSET FOR FALL
|
||
;
|
||
; CALLR INC_ENEMY_COUNT ;COUNT ENEMY
|
||
;
|
||
; MOVE A8,A0
|
||
; MOVE A9,A8
|
||
;
|
||
; MOVE *A8(OXVAL),A1,L ;SET POSITION
|
||
; MOVE *A8(OYVAL),A2,L
|
||
; MOVE *A8(OZVAL),A3,L
|
||
; CALLA SETOFFPU
|
||
;
|
||
; CALLA INSPART ;INSERT
|
||
; CALLA INSOBJ
|
||
;ACD_LUPEANIM
|
||
; MOVE *A9(AnimFrm),A14,L
|
||
; SUBI 050H,A14
|
||
; MOVE A14,*A9(AnimFrm),L
|
||
;ACD_DONE
|
||
; RETS
|
||
;
|
||
;COPTER_DOORBOY_INIT
|
||
; .LONG G_B5SPxSHA4, DUMCOLL
|
||
; .WORD OID_NONBOY, DMAWNZ, 0, 2
|
||
; .LONG 0
|
||
;
|
||
;COPTER_DOORBOY_ANIM
|
||
; LW 1,3
|
||
; LW G_B5SPxSHA5,3
|
||
; LWL G_B5SPxSHA6,3|AFunc,A_TOGGLE_DIR
|
||
; LWLWW G_B1SHOOTA1,1|AFunc,A_RAND_AnimSLP+2,5,20
|
||
; LW 1,0
|
||
;COPTER_DOORBOY_SHOOT_ANIM
|
||
; LW G_B1SHOOTA1,1
|
||
;; LWLWW 1,5|AFunc,A_PART_FIRE_FNC+2,-24,-80
|
||
; LW 1,5
|
||
; LW G_B1SHOOTA2,6
|
||
; LWLWL 1,1|AFunc,A_RAND_BRANCH+3,512,COPTER_DOORBOY_SHOOT_ANIM
|
||
; LWL G_B5SPxSHA6,3|AFunc,A_TOGGLE_DIR
|
||
; LW G_B5SPxSHA5,3
|
||
; LW G_B5SPxSHA4,3
|
||
; .long 0
|
||
;; LWL 1,1|AFunc,A_DEL_NONBOY
|
||
|
||
|
||
GRILL_ANIM
|
||
LW 1,127
|
||
LWLL 1,127|AFunc,A_AnimScr+2,GRILL_LAUNCH
|
||
GRILL_LAUNCH
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CMISSLE,GRILL_LAUNCH
|
||
LWLL CPTFSEC11b,4|AFunc,A_SOUNDZ+2,SND_GRILL_OPENCLOSE
|
||
LW CPTFSEC11c,4
|
||
GRILL_LAUNCH_AGAIN
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,0,-23*2,1 ;-8*2,-23*2,0
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,0,-23*2,0
|
||
LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,0,-23*2,1 ;8*2,-23*2,0
|
||
LWLWL 1,10|AFunc,A_RAND_BRANCH+3,64,GRILL_LAUNCH_AGAIN
|
||
LWLL CPTFSEC11b,4|AFunc,A_SOUNDZ+2,SND_GRILL_OPENCLOSE
|
||
LW CPTFSEC11a,30
|
||
.long 0
|
||
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
; LW CPTFSEC11a,0
|
||
; .long 0
|
||
|
||
|
||
BLADE_ANIM
|
||
LWWL CPTGEAR2s,1|AMulti|AFlip|AFunc,M_FLIPH,A_CHECK_STUTTER
|
||
LWWLL CPTPROPh2,1|AMulti|AFlip|AFunc,M_FLIPV,A_CHANGE_PAL+2,PROPAL1sd
|
||
LWW CPTPROPh2,1|AFlip,M_FLIPH
|
||
|
||
LW 1,0
|
||
|
||
LWWL CPTGEAR3s,1|AMulti|AFlip|AFunc,0,A_CHECK_STUTTER
|
||
LWWLL CPTPROPh1,1|AMulti|AFlip|AFunc,0,A_CHANGE_PAL+2,PROPAL1s
|
||
LW CPTPROPh1,1
|
||
|
||
LW 1,0
|
||
|
||
LWL CPTGEAR2s,1|AMulti|AFunc,A_CHECK_STUTTER
|
||
LW CPTPROPh2,1|AMulti
|
||
LWWLL CPTPROPh2,1|AFunc|AFlip,M_FLIPV|M_FLIPH,A_CHANGE_PAL+2,PROPAL1sd
|
||
|
||
LW 1,0
|
||
|
||
LWL CPTGEAR1s,1|AMulti|AFunc,A_CHECK_STUTTER
|
||
LW CPTPROPh3,1|AMulti
|
||
LWWLL CPTPROPh3,1|AFlip|AFunc,M_FLIPH,A_CHANGE_PAL+2,PROPAL1s
|
||
|
||
LWL 1,0|AFunc,A_RESET_STUTTER
|
||
|
||
.long 0
|
||
|
||
BELLY_GUN_ANIM0
|
||
LWLL CPTNZGN1s,1|AFunc,A_AnimGo+2,BELLY_GUN_ANIM
|
||
BELLY_GUN_ANIM
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CGUNS,BELLY_GUN_ANIM
|
||
LWLL CPTNZGN2s,4|AFunc,A_SOUNDZ+2,SND_BELLY_TURN
|
||
LW CPTNZGN3s,4
|
||
LW CPTNZGN4sb,1
|
||
BGA_LUPE
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CGUNS,BGA_TURNBACK
|
||
LWLL 1,1|AFunc,A_CREATE_FLASH+2,BGA_NAP
|
||
BGA_FIRE
|
||
LWL 1,3|AFunc,A_FIRE_SND_PAL
|
||
LWL 1,2|AFunc,A_NORMAL_PAL
|
||
LWLL 1,1|AFunc,A_DELETE_FLASH+2,BGA_FIRE
|
||
BGA_NAP
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
LWLL 1,0|AFunc,A_AnimFrm+2,BGA_LUPE
|
||
BGA_TURNBACK
|
||
LWLL CPTNZGN3s,4|AFunc,A_SOUNDZ+2,SND_BELLY_TURN
|
||
LW CPTNZGN2s,4
|
||
LW CPTNZGN1s,1
|
||
.long 0
|
||
|
||
BELLY_DAM_ANIM
|
||
LWLW 1,1|AFunc,A_RAND_FLIP_OCTRL+1,M_FLIPH
|
||
; LWL CPTNZGN3s,4|AFunc,A_NORMAL_PAL
|
||
LW CPTNZGN3s,4
|
||
LW CPTNZGN2s,60
|
||
LWLL CPTNZGN3s,4|AFunc,A_SOUNDZ+2,SND_BELLY_TURN
|
||
LW CPTNZGN4sb,4
|
||
LWLW 1,1|AFunc,A_TOGGLE_OCTRL+1,M_FLIPH
|
||
LW CPTNZGN3s,4
|
||
LW CPTNZGN2s,4
|
||
LW CPTNZGN3s,4
|
||
LWL 1,1|AFunc,A_RESTORE_FLIPH
|
||
LW CPTNZGN4sb,60
|
||
LWLWW 1,1|AFunc,A_Set_Rel_Word+2,OHITCOUNT,0
|
||
LWL 1,1|AFunc,A_DAM_RETURN
|
||
|
||
LAUNCHER_ANIM
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CMISSLE,LAUNCHER_ANIM
|
||
LWLL CPTROKIT2s,4|AFunc,A_SOUNDZ+2,SND_BELLY_TURN
|
||
LW CPTROKIT3s,4
|
||
LW CPTROKIT4s,1
|
||
|
||
LAUNCHER_LUPE
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CMISSLE,LAUNCHER_TURNBACK
|
||
LWLL 1,1|AFunc,A_GOSUB+2,MISSLE_LAUNCH_SUB_ANIM
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
LWLL 1,0|AFunc,A_AnimFrm+2,LAUNCHER_LUPE
|
||
LAUNCHER_TURNBACK
|
||
LWLL CPTROKIT3s,4|AFunc,A_SOUNDZ+2,SND_BELLY_TURN
|
||
LW CPTROKIT2s,4
|
||
LW CPTROKIT1s,1
|
||
.long 0
|
||
|
||
GAT_GUN_ANIM0
|
||
LWLL CPTGATGN1s,1|AFunc,A_AnimGo+2,GAT_GUN_ANIM
|
||
GAT_GUN_ANIM
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CGUNS,GAT_GUN_ANIM
|
||
LWLL CPTGATGN2s,4|AFunc,A_SOUNDZ+2,SND_GAT_TURN
|
||
LW CPTGATGN3s,4
|
||
LW CPTGATGN4s,1
|
||
GGA_LUPE
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CGUNS,GGA_TURNBACK
|
||
LWLL 1,1|AFunc,A_CREATE_FLASH+2,GGA_NAP
|
||
GGA_FIRE
|
||
LWL 1,3|AFunc,A_FIRE_SND_PAL
|
||
LWL 1,2|AFunc,A_NORMAL_PAL
|
||
LWLL 1,1|AFunc,A_DELETE_FLASH+2,GGA_FIRE
|
||
GGA_NAP
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
LWLL 1,0|AFunc,A_AnimFrm+2,GGA_LUPE
|
||
|
||
; LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CGUNS,GAT_GUN_TURNBACK
|
||
; LWLL 1,1|AFunc,A_GOSUB+2,GAT_FIRE_SUB_ANIM
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
; LWLL 1,0|AFunc,A_AnimFrm+2,GAT_GUN_LUPE
|
||
|
||
GGA_TURNBACK
|
||
LWLL CPTGATGN3s,4|AFunc,A_SOUNDZ+2,SND_GAT_TURN
|
||
LW CPTGATGN2s,4
|
||
LW CPTGATGN1s,1
|
||
.long 0
|
||
|
||
;GAT_FIRE_ANIM
|
||
; LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CGUNS,GAT_FIRE_ANIM
|
||
; LWLL 1,1|AFunc,A_GOSUB+2,GAT_FIRE_SUB_ANIM
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
; LW 1,0
|
||
; .long 0
|
||
;
|
||
;GAT_FIRE_SUB_ANIM
|
||
; LWLL 1,1|AFunc,A_CREATE_FLASH+2,GFSA_RETURN
|
||
;GFSA_FIRE
|
||
; LWL 1,3|AFunc,A_FIRE_SND_PAL
|
||
; LWL 1,2|AFunc,A_NORMAL_PAL
|
||
; LWLL 1,1|AFunc,A_DELETE_FLASH+2,GFSA_FIRE
|
||
; LWL 1,1|AFunc,A_HILITE_PAL
|
||
;GFSA_RETURN
|
||
; LWL 1,1|AFunc,A_RETURN
|
||
|
||
GAT_DAM_ANIM
|
||
; LWL CPTGATGN3s,60|AFunc,A_NORMAL_PAL
|
||
LW CPTGATGN3s,60
|
||
LWLL CPTGATGN4s,60|AFunc,A_SOUNDZ+2,SND_GAT_TURN
|
||
LWLWW 1,1|AFunc,A_Set_Rel_Word+2,OHITCOUNT,0
|
||
LWL 1,1|AFunc,A_DAM_RETURN
|
||
|
||
GAT_SWING_DAM_ANIM
|
||
LWLW 1,1|AFunc,A_RAND_FLIP_OCTRL+1,M_FLIPH
|
||
; LWL CPTGATGN3s,4|AFunc,A_NORMAL_PAL
|
||
LW CPTGATGN3s,4
|
||
LW CPTGATGN2s,60
|
||
LWLL CPTGATGN3s,4|AFunc,A_SOUNDZ+2,SND_GAT_TURN
|
||
LW CPTGATGN4s,4
|
||
LWLW 1,1|AFunc,A_TOGGLE_OCTRL+1,M_FLIPH
|
||
LW CPTGATGN3s,4
|
||
LW CPTGATGN2s,4
|
||
LW CPTGATGN3s,4
|
||
LWL 1,1|AFunc,A_RESTORE_FLIPH
|
||
LW CPTGATGN4s,60
|
||
LWLWW 1,1|AFunc,A_Set_Rel_Word+2,OHITCOUNT,0
|
||
LWL 1,1|AFunc,A_DAM_RETURN
|
||
|
||
GAT_PART_FIRE_ANIM
|
||
LWLL CPTGATGN4s,1|AFunc,A_AnimGo+2,PART_FIRE_ANIM
|
||
BELLY_PART_FIRE_ANIM
|
||
LWLL CPTNZGN4sb,1|AFunc,A_AnimGo+2,BELLY_LUPE
|
||
BELLY_LUPE
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CFINAL|M_CHOVER,PART_FIRE_ANIM
|
||
; LWLWL 1,1|AFunc,A_RAND_BRANCH+3,922,PART_FIRE_ANIM
|
||
LWLWL 1,1|AFunc,A_RAND_BRANCH+3,768,PART_FIRE_ANIM
|
||
LWLW 1,1|AFunc,A_RAND_FLIP_OCTRL+1,M_FLIPH
|
||
LWLL CPTNZGN3s,4|AFunc,A_SOUNDZ+2,SND_BELLY_TURN
|
||
LW CPTNZGN2s,4
|
||
LW CPTNZGN3s,4
|
||
LW CPTNZGN4sb,4
|
||
LWLW 1,1|AFunc,A_TOGGLE_OCTRL+1,M_FLIPH
|
||
LW CPTNZGN3s,4
|
||
LW CPTNZGN2s,4
|
||
LW CPTNZGN3s,4
|
||
LWL 1,1|AFunc,A_RESTORE_FLIPH
|
||
LW CPTNZGN4sb,1
|
||
PART_FIRE_ANIM
|
||
LWLL 1,1|AFunc,A_CREATE_FLASH+2,PFA_NAP
|
||
PFA_FIRE
|
||
LWL 1,3|AFunc,A_FIRE_SND_PAL
|
||
LWL 1,2|AFunc,A_NORMAL_PAL
|
||
LWLL 1,1|AFunc,A_DELETE_FLASH+2,PFA_FIRE
|
||
PFA_NAP
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
LW 1,0
|
||
.long 0
|
||
|
||
PART_DAM_ANIM
|
||
; LWL 1,120|AFunc,A_NORMAL_PAL
|
||
LW 1,120
|
||
LWLWW 1,1|AFunc,A_Set_Rel_Word+2,OHITCOUNT,0
|
||
LWL 1,1|AFunc,A_DAM_RETURN
|
||
|
||
NOSE_GUN_ANIM
|
||
LWLWL 1,1|AFunc,A_CHECK_COMMAND+3,M_CMISSLE,NOSE_GUN_ANIM
|
||
|
||
; LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,0,-46*2,1
|
||
; LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,0,-46*2,0
|
||
; LWLWWW 1,0|AFunc,A_LAUNCH_ROCKET+3,0,-46*2,1
|
||
|
||
LWLL 1,0|AFunc,A_MAKE_FIREBALL+2,NOSE_GUN_ANIM
|
||
LWLL 1,0|AFunc,A_MAKE_FIREBALL+2,NOSE_GUN_ANIM
|
||
LWLL 1,0|AFunc,A_MAKE_FIREBALL+2,NOSE_GUN_ANIM
|
||
|
||
; LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,30
|
||
; LW 1,0
|
||
LW 1,30
|
||
.long 0
|
||
|
||
PROPAL1sd:
|
||
.word 16
|
||
.word 00000h,00000h,00000h,00000h,00000h,00000h,00000h,00000h
|
||
.word 00000h,00000h,01484h,01cc6h,00000h,00000h,02508h,00000h
|
||
|
||
;gunGRD2pd:
|
||
; .word 31
|
||
; .word 07fffh,0358bh,0316ah,02928h,02507h,020e6h,01cc5h,018a4h
|
||
; .word 01483h,01062h,00c41h,00820h,00400h,00000h,00000h,00000h
|
||
; .word 00000h,00000h,00000h,00000h,00000h,00000h,00000h,00000h
|
||
; .word 00000h,00000h,00000h,00000h,00000h,00000h,00000h
|
||
;
|
||
;gunGRADpB:
|
||
; .word 31
|
||
; .word 07fffh,07fbah,07b99h,07357h,06f36h,06b15h,066f4h,062d3h
|
||
; .word 05eb2h,05a91h,05670h,0524fh,04e2eh,04a0dh,045ech,041cbh
|
||
; .word 03daah,03989h,03568h,03147h,02d26h,02905h,024e4h,020c3h
|
||
; .word 00842h,01061h,00000h,00000h,00000h,00000h,00000h
|
||
;
|
||
;PUDD2Gp:
|
||
; .word 31
|
||
; .word 00000h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh
|
||
; .word 07fffh,07fffh,07fffh,07fffh,07fffh,06f7bh,06318h,05ef7h
|
||
; .word 05ad6h,04e73h,04a52h,04631h,04210h,035adh,0318ch,02d6bh
|
||
; .word 0294ah,018c6h,014a5h,00c63h,00000h,00000h,03820h ;,07c60h
|
||
;
|
||
;yGRAD2Ypz:
|
||
; .word 31
|
||
; .word 00000h,07fafh,07fafh,07f4ch,07b2bh,0770ah,072e9h,06ec8h
|
||
; .word 06aa7h,06686h,06265h,05e44h,05a23h,05602h,051e2h,04dc2h
|
||
; .word 049a2h,07ee9h,07ec4h,05e42h,05a22h,05602h,051e2h,04dc2h
|
||
; .word 049a2h,04582h,04182h,03d82h,03582h,03182h,048a2h ;07ce2h
|
||
|
||
gnGRAD2pX:
|
||
.word 32
|
||
.word 00000h,07fffh,07fffh,07fddh,07fdch,0777ah,07758h,07337h
|
||
.word 06b16h,066d5h,066f5h,05e92h,06a2ah,051a9h,03148h,02d27h
|
||
.word 018a3h,01482h,01062h,00c62h,00c62h,00421h,00421h,00421h
|
||
.word 00421h,00421h,00421h,00421h,00421h,00421h,00421h,05272h
|
||
|
||
gunGRADpb:
|
||
.word 32
|
||
.word 00000h,07fffh,07b99h,07357h,06f36h,06b15h,066f4h,062d3h
|
||
.word 05eb2h,05a91h,05670h,0524fh,04e2eh,04a0dh,045ech,041cbh
|
||
.word 03daah,03989h,03568h,03147h,02d26h,02905h,024e4h,020c3h
|
||
.word 00842h,01061h,00000h,00000h,00000h,00000h,00000h,07fbah
|
||
|
||
PUDD2Gp:
|
||
.word 32
|
||
.word 00000h,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh,07fffh
|
||
.word 07fffh,07fffh,07fffh,07fffh,07fffh,06f7bh,06318h,05ef7h
|
||
.word 05ad6h,04e73h,04a52h,04631h,04210h,035adh,0318ch,02d6bh
|
||
.word 0294ah,018c6h,014a5h,00c63h,00000h,00000h,03820h,07c60h
|
||
|
||
yGRAD2Ypz:
|
||
.word 32
|
||
.word 00000h,07fffh,07fafh,07f4ch,07b2bh,0770ah,072e9h,06ec8h
|
||
.word 06aa7h,06686h,06265h,05e44h,05a23h,05602h,051e2h,04dc2h
|
||
.word 049a2h,07ee9h,07ec4h,05e42h,05a22h,05602h,051e2h,04dc2h
|
||
.word 049a2h,04582h,04182h,03d82h,03582h,03182h,048a2h,07ce2h
|
||
|
||
gGRAD2cy2:
|
||
.word 32
|
||
.word 00000h,04210h,03defh,039ceh,035adh,0318ch,02d6bh,0294ah
|
||
.word 02529h,02108h,01ce7h,018c6h,014a5h,01084h,00c63h,00842h
|
||
.word 00421h,00000h,07d60h,07c60h,05c00h,04400h,02820h,01400h
|
||
.word 00c00h,00400h,00c00h,01800h,02800h,03800h,06420h,07c60h
|
||
|
||
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
**************************************************************************
|
||
|
||
.end
|
||
|
||
|
||
|