5103 lines
129 KiB
NASM
5103 lines
129 KiB
NASM
.MLIB "GXMACS.LIB"
|
||
.FILE "GXDESK.ASM"
|
||
.TITLE "<<< REVOLUTION X -- NEW JAPAN TECHNOLOGY - THE MECH DESK >>>"
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
**************************************************************************
|
||
* *
|
||
* COPYRIGHT (C) 1993 MIDWAY MANUFACTURING COMPANY. *
|
||
* ALL RIGHTS RESERVED. *
|
||
* *
|
||
**************************************************************************
|
||
|
||
.INCLUDE "GXENEMY.INC" ;SYSTEM EQUATES
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "GXCONTRL.H"
|
||
.INCLUDE "GXSTRING.H"
|
||
.INCLUDE "GXS.H"
|
||
.INCLUDE "GXMONDOR.H" ;The desk is modelled after him
|
||
.INCLUDE "GXDESK.TBL"
|
||
|
||
*
|
||
*Symbols from the desk
|
||
*
|
||
.DEF DESK_PROC, DESK_XFORM_FLAG, SPAWN_FIRE
|
||
.DEF ANIM_SMALL_SHAKE, ANIM_MEDIUM_SHAKE, ANIM_BIG_SHAKE
|
||
.DEF DGV_FRAG_SPARK, F_EXPLOSION_OUT, TAB_METAL_SOUNDS
|
||
.DEF SNUM_NIGHTMARE, A_ADD_YPOS, JOSH_SIT_FLAG
|
||
.DEF FRAG_DESK_EXPLOSION, FRAG_DESK_METAL, FRAG_DESK_RAIN
|
||
.DEF SND_FINAL_EXPLODE1, SND_FINAL_EXPLODE2, SND_FINAL_EXPLODE3
|
||
.DEF A_MULTI_METAL_CHUNK, A_NOSCALE_NOSHAD, F_EXPLOSION_OUT_2X
|
||
.DEF INIT_SPARK, C_DESK, FRAG_SMALL_OUT_EXP
|
||
|
||
*
|
||
*Symbols from around the GLOBE
|
||
*
|
||
|
||
***** from GXRAM.ASM
|
||
|
||
.REF ENEMY_QUOTA, GAME_STATE, SOUNDSUP, CURPLYRS, WAVETIME, RAND
|
||
.REF GUNS_OFF, BASE_HIT
|
||
|
||
***** from GXAFUNC.ASM
|
||
|
||
.REF A_Anim_DSJ, A_PreFrag_Box, A_PreFrag_Center, A_INIT_AnimSLP
|
||
.REF A_Set_AnimLoop, SetAnim, A_SET_OZVEL, A_CREATEP, A_PreFrag_Rain
|
||
.REF A_Set_Rel_Byte_Head, A_SOUND, A_SOUNDZ, A_RAND_SOUNDZ
|
||
.REF A_Set_Var_Word, A_OBJ_ON_CHANGE_PAL, A_INC_AnimSLP
|
||
.REF A_Set_Rel_Word_Head, A_Set_Rel_Long, A_Anim_Rel_DSJ
|
||
.REF A_Set_Rel_Byte, SetAnim_AFARG, A_BRANCH_IF_FALSE
|
||
|
||
***** from GXSND.ASM
|
||
|
||
.REF ONESND_Z, ONESND, SND_BGND1_OFF, SND_BGND2_OFF, IS_SOUND
|
||
|
||
***** from GXD.ASM
|
||
|
||
.REF SETOFFPU, XBASE, YBASE, ZBASE, YHALF, GET_SHAD_MULTI
|
||
.REF SET_ANIPXU, SET_OBJSU, EASYMAKE, SET_ONGRND, GETOFFPU
|
||
.REF GETSUPP_FROM_OID, SET_ANIPU, SET_SCRN_POS
|
||
.REF DELETE_OBJ_PROC, GET_HEAD_PART_A0, OBJCONST, SETANIPU
|
||
.REF GETHEADPART
|
||
|
||
***** from GXUNILNK.ASM
|
||
|
||
.REF BG_TO_FG
|
||
|
||
***** from GXUTIL.ASM
|
||
|
||
.REF SET_VECTORS, SLINEVEL_LOAD_3D, PASTE_ON_DAMAGE
|
||
|
||
***** from GXCONTRL.ASM
|
||
|
||
.REF BFLASH0_ANIM, bulit9
|
||
|
||
***** from GXPALL.ASM
|
||
|
||
.REF A_CHANGE_PAL
|
||
|
||
***** from GXPLAYER.ASM
|
||
|
||
.REF ANY_BOMBS, CK_PLAYER_HIT, GET_PLAYER_EXTENTS, PLAYER_HIT
|
||
|
||
***** from GXENEMY.ASM
|
||
|
||
.REF INSERT_ENEMY, CREATE_ENEMY, DELETE_ENEMY
|
||
|
||
***** from GXCOG.asm
|
||
|
||
.REF HIT_ENEMY
|
||
|
||
***** from GXMONDOR.ASM
|
||
|
||
.REF A_GET_SHAD_MULTI
|
||
|
||
***** from GXMONDR2.ASM
|
||
|
||
.REF FRAG_EXPLOSION, F_CHUNK, A_CHUNK_ONSCREEN, MONDOR_PROC
|
||
.REF PROC_SKY_FLASH, A_CHECK_MISSLE_SCREEN_HIT, BLOW_PART
|
||
.REF PROJECTILE_ROCKET_COLL, F_CHUNK_RAIN, PART_EXPLOSION
|
||
.REF PROC_TEMP_ENDING
|
||
|
||
***** from GXUNIJAP.ASM
|
||
|
||
.REF NO_CHARITY
|
||
|
||
|
||
*
|
||
*DESK RAM
|
||
*
|
||
.BSS DESK_XFORM_FLAG,16
|
||
.BSS DESK_TOTAL,16 ;Set if Desk was totally destroyed.
|
||
.BSS JOSH_SIT_FLAG,16
|
||
.BSS UNUSED_WORD,16 ;For alignment purposes
|
||
|
||
.TEXT
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DESK_PROC *
|
||
* *
|
||
* Process to create the mech desk. Searches the background *
|
||
* for the existing desk pieces and replaces them with a new *
|
||
* desk, ready to transform once DESK_XFORM_FLAG is set. *
|
||
* *
|
||
**************************************************************************
|
||
DESK_PROC
|
||
MOVI OID_DESK,A0
|
||
CALLA GET_ENEMY_COUNT
|
||
CMPK 1,A0
|
||
JAHS SUCIDE
|
||
|
||
CLRM @DESK_XFORM_FLAG,W
|
||
|
||
MOVI (OID_UNIV|ID_30)&~MASK_SUPP,A0 ;This is the desks I.D. in the universe
|
||
MOVI ~MASK_SUPP,A1
|
||
; CALLA EXISTOBJ_ALL
|
||
CALLA EXISTOBJ
|
||
JAZ SUCIDE ;BR = No, just die
|
||
|
||
PUSH A0 ;Save the ptr to the desk object
|
||
|
||
MOVI DESK_INIT,B0 ;Allocate the desk
|
||
CALLA CREATE_ENEMY
|
||
PULL A0 ;Restore background desk image ptr.
|
||
JAZ SUCIDE ;BR = No desk available? Blow out
|
||
|
||
CLRM @DESK_TOTAL,W ;Clear the total destruction flag
|
||
|
||
MOVE *A0(OXVAL),A1,L ;Grab positions of desk in universe
|
||
MOVE *A0(OYVAL),A2,L
|
||
MOVE *A0(OZVAL),A3,L
|
||
|
||
CALLA SET_ANIPU ;Set the new desk there
|
||
|
||
PUSHP A0 ;Save this part of the desk placeholder
|
||
|
||
CALLA INSERT_ENEMY ;INSERT AND COUNT ENEMY
|
||
|
||
CALLA GET_SHAD_MULTI ;Setup his shadow
|
||
|
||
SLEEP 1 ;Wait a frame
|
||
|
||
PUSH A8 ;Save desk ptr on system stack
|
||
|
||
PULLP A8 ;Pull placeholder from process stack
|
||
|
||
CALLA BG_TO_FG ;Get place holder out of Bgnd
|
||
CALLA DELETE_OBJ ;And get rid of it
|
||
|
||
MOVI (OID_UNIV|ID_30)&~MASK_SUPP,A0 ;This is the desks I.D. in the universe
|
||
MOVI ~MASK_SUPP,A1
|
||
; CALLA EXISTOBJ_ALL ;Get the other half of the desk
|
||
CALLA EXISTOBJ ;Get the other half of the desk
|
||
JRZ DESK_READY_AND_WAITING ;Other half is gone?
|
||
|
||
MOVE A0,A8
|
||
CALLA BG_TO_FG ;Get place holder out of Bgnd
|
||
CALLA DELETE_OBJ ;Second half is now gone
|
||
|
||
DESK_READY_AND_WAITING
|
||
PULLQ A8 ;Get the desk ptr back
|
||
|
||
MOVE A13,*A8(OPLINK),L
|
||
|
||
DESK_WAIT
|
||
SLEEP 1
|
||
MOVE @DESK_XFORM_FLAG,A14,W ;Should we start the transform?
|
||
JRZ DESK_WAIT ;BR = Not yet, let's just wait a little
|
||
|
||
MOVI ANIM_TRANSFORM,A1
|
||
CALLA STRT_ANIM
|
||
|
||
*
|
||
*We will hang here and motor him around
|
||
*
|
||
MOVE @WAVETIME,A14,L
|
||
MOVE A14,*A13(PDATA),L ;Save the create time
|
||
|
||
MOVK 20,A10 ;Update accelerators every x ticks
|
||
|
||
DESK_WATCH_LOOP
|
||
DEC A10
|
||
JRGT DESK_EVERY_TICK
|
||
MOVK 20,A10
|
||
|
||
MOVE @WAVETIME,A14,L
|
||
MOVE *A13(PDATA),A1,L
|
||
SUB A14,A1
|
||
|
||
SRA 3,A1
|
||
|
||
ADDI 1024,A1 ;Create a percentage chance to pause
|
||
|
||
CMPI 100,A1
|
||
JRGE DWL_MISS_PERC_OK
|
||
|
||
MOVI 100,A1
|
||
DWL_MISS_PERC_OK
|
||
|
||
MOVE A1,*A8(OMISSLE_PERC),W ;% chance that we will pause before firing
|
||
|
||
*
|
||
*Shit to do every tick. Don't trash A10.
|
||
*
|
||
DESK_EVERY_TICK
|
||
MOVE A8,A0
|
||
;Stuff for head part only
|
||
MOVB *A0(OCLRNOSETZVEL),A14 ;Clear the NOSET_ZVEL flag?
|
||
JRZ DET_HEAD_1 ;BR = Not timing currently
|
||
DEC A14 ;Down a tick
|
||
MOVB A14,*A0(OCLRNOSETZVEL) ;Save it
|
||
JRNZ DET_HEAD_1 ;BR = Didn't hit 0 yet
|
||
MOVB A14,*A0(ONOSET_ZVEL) ;Clear dat flag
|
||
DET_HEAD_1
|
||
MOVB *A0(OXBURN),A14 ;Clear the X acceleration?
|
||
JRZ DET_HEAD_2 ;BR = Not timing currently
|
||
DEC A14 ;Down a tick
|
||
MOVB A14,*A0(OXBURN) ;Save it
|
||
JRNZ DET_HEAD_2 ;BR = Didn't hit 0 yet
|
||
MOVE A14,*A0(OXACCEL),W ;Clear that acceleration
|
||
DET_HEAD_2
|
||
MOVB *A0(OYBURN),A14 ;Clear the Y acceleration?
|
||
JRZ DET_HEAD_3 ;BR = Not timing currently
|
||
DEC A14 ;Down a tick
|
||
MOVB A14,*A0(OYBURN) ;Save it
|
||
JRNZ DET_HEAD_3 ;BR = Didn't hit 0 yet
|
||
MOVE A14,*A0(OYACCEL),W ;Clear that acceleration
|
||
DET_HEAD_3
|
||
MOVB *A0(OZBURN),A14 ;Clear the Z acceleration?
|
||
JRZ DET_HEAD_4 ;BR = Not timing currently
|
||
DEC A14 ;Down a tick
|
||
MOVB A14,*A0(OZBURN) ;Save it
|
||
JRNZ DET_HEAD_4 ;BR = Didn't hit 0 yet
|
||
MOVE A14,*A0(OZACCEL),W ;Clear that acceleration
|
||
DET_HEAD_4
|
||
MOVB *A0(OCLRCENTER),A14 ;Clear the Center flag?
|
||
JRZ DET_HEAD_5 ;BR = Not timing currently
|
||
DEC A14 ;Down a tick
|
||
MOVB A14,*A0(OCLRCENTER) ;Save it
|
||
JRNZ DET_HEAD_5 ;BR = Didn't hit 0 yet
|
||
MOVE A14,*A0(OCENTER_FLAG),W ;Clear that flag
|
||
DET_HEAD_5
|
||
MOVE *A0(OTALK_WAIT),A14,W ;Are we waiting to talk again?
|
||
JRZ DET_HEAD_6 ;BR = No
|
||
DEC A14 ;Decrement the wait timer
|
||
MOVE A14,*A0(OTALK_WAIT),W
|
||
DET_HEAD_6
|
||
MOVB *A0(OCLRFDAM),A14 ;Clear the FDAM_GOING flag?
|
||
JRZ DET_HEAD_7 ;BR = Not timing currently
|
||
DEC A14 ;Down a tick
|
||
MOVB A14,*A0(OCLRFDAM) ;Save it
|
||
JRNZ DET_HEAD_7 ;BR = Didn't hit 0 yet
|
||
MOVB A14,*A0(OFDAM_GOING) ;Clear that flag
|
||
DET_HEAD_7
|
||
MOVB *A0(OPROJ_CK_TIME),A14 ;Check for a projectile hit?
|
||
JRZ DET_HEAD_7a ;BR = Not timing currently
|
||
DEC A14 ;Down one
|
||
MOVB A14,*A0(OPROJ_CK_TIME) ;Save it
|
||
JRNZ DET_HEAD_8 ;BR = Not time to check yet
|
||
MOVB *A0(OPROJ_HIT),A14 ;Did any projectiles score a hit?
|
||
JRZ DET_HEAD_8 ;BR = No
|
||
PUSH A0
|
||
MOVI 256,A0
|
||
CALLA RANDPER
|
||
JRNC DET_SKIP_TAUNT
|
||
MOVI NUM_JOSH,A1
|
||
CALLA FINDPART
|
||
MOVE A0,A6
|
||
MOVK NUM_TAUNTS,A0 ;Do a little taunting
|
||
CALLA RAND0
|
||
SLL 3,A0
|
||
ADDI TAUNT_TABLE,A0
|
||
MOVB *A0,A0
|
||
MOVB A0,*A6(OTALK_FLAG)
|
||
DET_SKIP_TAUNT
|
||
PULLQ A0
|
||
CLR A14
|
||
DET_HEAD_7a
|
||
MOVB A14,*A0(OPROJ_HIT)
|
||
DET_HEAD_8
|
||
MOVE *A0(OGAT_WAIT),A14,W ;Are we waiting to do another arm action?
|
||
JRZ DET_HEAD_9 ;BR = No
|
||
DEC A14 ;Decrement the wait timer
|
||
MOVE A14,*A0(OGAT_WAIT),W
|
||
DET_HEAD_9
|
||
MOVB *A0(OGATS_GONE),A14
|
||
CMPK 2,A14 ;Are both his arms missing?
|
||
JRLO DET_HEAD_10 ;BR = No
|
||
INCM *A0(ONOGAT_TIME),W
|
||
DET_HEAD_10
|
||
MOVE *A0(OMISSLE_WAIT),A14,W ;Waiting to open next missle bay?
|
||
JRZ DET_HEAD_11 ;BR = No
|
||
DEC A14 ;Decrement the wait timer
|
||
MOVE A14,*A0(OMISSLE_WAIT),W
|
||
JRNZ DET_HEAD_11 ;BR = Didn't hit zero yet
|
||
MOVB A14,*A0(OMISSLE_VULNER) ;Clear the missle vulnerable flag
|
||
DET_HEAD_11
|
||
|
||
;Check all parts for un-tick
|
||
DET_ALL_PARTS
|
||
MOVK NUM_DESK_USED_PARTS,A6 ;Double check number 'cause of gun flashes
|
||
CLR A5 ;Offscreen counter
|
||
|
||
DET_TICK_LOOP
|
||
MOVB *A0(OFLASHTIME),A14 ;Is this part flashing?
|
||
JRZ DET_FLASH_NEXT ;BR = No
|
||
DEC A14 ;Decrement the flash time
|
||
MOVB A14,*A0(OFLASHTIME) ;Stuff it back for future
|
||
JRNZ DET_FLASH_NEXT ;BR = Not time to unflash
|
||
MOVB A14,*A0(O_BEING_DAMAGED) ;No longer being damaged
|
||
|
||
; MOVE *A0(OCTRL),A14,W
|
||
; SLL 28,A14 ;Is this object still on?
|
||
; JRZ DET_FLASH_NEXT ;BR = No
|
||
|
||
move *a0(OFLAGS),a14 ; NEW METHOD - NODISP FLAG
|
||
btst B_NODISP,a14
|
||
JRNZ DET_FLASH_NEXT ;BR = No
|
||
|
||
CALLA OBJWNZ ;Unflash
|
||
DET_FLASH_NEXT
|
||
MOVB *A0(OCLRROCKETHIT),A14 ;Do we need to clear this part?
|
||
JRZ DET_ROCKHIT_NEXT ;BR = No
|
||
DEC A14 ;Decrement the clear time
|
||
MOVB A14,*A0(OCLRROCKETHIT) ;Stuff it back for future
|
||
JRNZ DET_ROCKHIT_NEXT ;BR = Not time to clear
|
||
MOVB A14,*A0(OROCKETHIT) ;No longer being hit by a rocket
|
||
DET_ROCKHIT_NEXT
|
||
MOVB *A0(OFLAGS),A14
|
||
JRNN DET_OFFSCREEN_NEXT
|
||
INC A5 ;Click another part offscreen
|
||
DET_OFFSCREEN_NEXT
|
||
MOVE *A0(OPARTS),A0,L ;Get the next part
|
||
JRZ DET_SLEEP ;BR = We've lost parts somehow?
|
||
DSJ A6,DET_TICK_LOOP
|
||
|
||
DET_SLEEP
|
||
CLR A4 ;Assume onscreen
|
||
CMPK NUM_DESK_USED_PARTS,A5 ;Are all of the parts offscreen?
|
||
JRLO DET_SOME_ONSCREEN ;BR = No
|
||
MOVE *A8(OFFSCRN_TIME),A4,W
|
||
INC A4 ;Click another tick offscreen
|
||
DET_SOME_ONSCREEN
|
||
MOVE A4,*A8(OFFSCRN_TIME),W
|
||
|
||
SLOOP 1,DESK_WATCH_LOOP ;Here we wait for shit to happen
|
||
|
||
NUM_TAUNTS .EQU 1
|
||
|
||
TAUNT_TABLE
|
||
.BYTE SNUM_SORRY
|
||
.EVEN
|
||
|
||
;**************************************************************************
|
||
;* *
|
||
;* JOSH_PROC *
|
||
;* *
|
||
;* Process to find and handle the Josh Manager in the *
|
||
;* Japanese office. *
|
||
;* *
|
||
;**************************************************************************
|
||
;JOSH_PROC
|
||
; CLRM @JOSH_SIT_FLAG,W
|
||
;
|
||
; MOVI (OID_UNIV|ID_2)&~MASK_SUPP,A0 ;This is Josh's I.D. in the universe
|
||
; CALLA EXISTOBJ_ALL ;Did we find him
|
||
; JAZ SUCIDE ;BR = No, just die
|
||
;
|
||
; MOVE A0,A8
|
||
;
|
||
; CALLA BG_TO_FG ;Get Josh out of Bgnd
|
||
;
|
||
; CALLA CREATE_COPY ;We need a copy for the talking head
|
||
; JRZ JP_NO_HEAD
|
||
;
|
||
; CALLA OBJOFF
|
||
; CALLA INSPART
|
||
; CALLR UPDATE_OPARTIDS
|
||
; CALLA INSOBJ
|
||
;
|
||
;JP_NO_HEAD
|
||
; MOVI ANIM_JOSH_BOW,A1
|
||
; CALLA STRT_ANIM ;And start him doing his thang
|
||
;
|
||
; DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* UPDATE_OPARTIDS *
|
||
* *
|
||
* Update all OPARTIDs of objects in Multi-parter to reflect *
|
||
* the current order of things. *
|
||
* *
|
||
* A8 = Ptr to head part *
|
||
* *
|
||
**************************************************************************
|
||
UPDATE_OPARTIDS
|
||
MMTM SP,A7,A8
|
||
MOVK 1,A7
|
||
MOVE *A8(OPART1),A8,L
|
||
JRZ UO_X
|
||
UO_LOOP
|
||
MOVB A7,*A8(OPARTID)
|
||
INC A7
|
||
MOVE *A8(OPARTS),A8,L
|
||
JRNZ UO_LOOP
|
||
UO_X
|
||
MMFM SP,A7,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_STRTANIM_PART *
|
||
* *
|
||
* Anim func to start the animation of a given part. *
|
||
* *
|
||
* A8 = Ptr to any part of multi-parter *
|
||
* AARG+,W = OPARTID of part we need to start *
|
||
* AARG+,L = Animation to start *
|
||
* *
|
||
**************************************************************************
|
||
A_STRTANIM_PART
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A2
|
||
CALLA FINDPART ;Find the part we want
|
||
JRZ ASP_X ;BR = It doesn't exist
|
||
MOVE A2,A1
|
||
JAUC STRTANIM ;Fire off the animation
|
||
ASP_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_DESK_PART_INIT *
|
||
* *
|
||
* Create Func to be run on all active desk objects. *
|
||
* *
|
||
**************************************************************************
|
||
C_DESK_PART_INIT
|
||
MOVIM DESK_FLASH_COLOR,*A0(OCONST),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Animation Functions for The Desk *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_VELOCITY_WATCH *
|
||
* *
|
||
* Anim Func to watch the Desk accelerations and do boundry *
|
||
* checks. *
|
||
* *
|
||
* A8 = Ptr to any Desk part. *
|
||
* *
|
||
**************************************************************************
|
||
A_VELOCITY_WATCH
|
||
CALLA GET_HEAD_PART ;First things first
|
||
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A0,A1,A3 ;LOAD A3:OXPOS, A1:OYPOS, A0:OZPOS
|
||
|
||
MOVI XBASE,A14
|
||
MMFM A14,A2,A4,A5 ;LOAD A5:XBASE, A4:YBASE, A2:ZBASE
|
||
|
||
sub A5,A3 ;Universe to World X
|
||
add A4,A1 ;Universe to World Y
|
||
sub A2,A0 ;Universe to World Z
|
||
|
||
MOVE A8,A14
|
||
ADDI OZVEL,A14
|
||
MMFM A14,A4,A5,A6 ;LOAD A6:OZVEL, A5:OXVEL, A4:OYVEL
|
||
|
||
CLR A2 ;Use this to clear whatever we need to clear
|
||
|
||
*Do Z boundry check
|
||
MOVB *A8(OCENTER_FLAG),A14 ;Time to center?
|
||
JRNZ AVW_STOP_AT_CENTER
|
||
|
||
CMPI DESK_ZMAX,A0 ;Did we go too far back?
|
||
JRGE AVW_HIT_ZMAX ;BR = Yes
|
||
|
||
CMPI DESK_ZMIN,A0 ;Did we come too far forward?
|
||
JRGT AVW_NO_Z_VIOLATION ;BR = No, no violations in Z
|
||
|
||
AVW_HIT_ZMIN
|
||
MOVE *A8(OZACCEL),A7,W
|
||
JREQ AVW_HZMIN_1
|
||
JRGT AVW_ADD_Z
|
||
CLR A7
|
||
MOVE A2,*A8(OZACCEL),W
|
||
AVW_HZMIN_1
|
||
MOVE A6,A6
|
||
JRGE AVW_ADD_Z
|
||
SRA SLED_ZBRAKE_SRA,A6
|
||
JRZ AVW_CLEARZ
|
||
ABS A6
|
||
MOVI SLED_ZBRAKE,A7
|
||
MOVE A7,*A8(OZACCEL),W
|
||
MOVB A6,*A8(OZBURN)
|
||
|
||
JRUC AVW_ADD_Z
|
||
|
||
AVW_HIT_ZMAX
|
||
MOVE *A8(OZACCEL),A7,W
|
||
JREQ AVW_HZMAX_1
|
||
JRLT AVW_ADD_Z
|
||
CLR A7
|
||
MOVE A2,*A8(OZACCEL),W
|
||
AVW_HZMAX_1
|
||
MOVE A6,A6
|
||
JRLE AVW_ADD_Z
|
||
SRA SLED_ZBRAKE_SRA,A6
|
||
JRZ AVW_CLEARZ
|
||
ABS A6
|
||
MOVI -SLED_ZBRAKE,A7
|
||
MOVE A7,*A8(OZACCEL),W
|
||
MOVB A6,*A8(OZBURN)
|
||
JRUC AVW_ADD_Z
|
||
|
||
AVW_CLEARZ
|
||
MOVE A2,*A8(OZVEL),L
|
||
JRUC AVW_ADD_Z
|
||
|
||
AVW_NO_Z_VIOLATION
|
||
MOVE *A8(OZACCEL),A7,W
|
||
|
||
AVW_ADD_Z
|
||
ADDRM A7,*A8(OZVEL),L
|
||
|
||
|
||
*Do X boundry check
|
||
|
||
SRA 16,A3 ;Easier to do the integer
|
||
|
||
CMPI DESK_XMAX,A3 ;Did we go too far to the right?
|
||
JRGE AVW_HIT_XMAX ;BR = Yes
|
||
|
||
CMPI DESK_XMIN,A3 ;Did we go too far to the left?
|
||
JRGT AVW_NO_X_VIOLATION ;BR = No, no violations in X
|
||
|
||
AVW_HIT_XMIN
|
||
MOVE *A8(OXACCEL),A7,W
|
||
JREQ AVW_HXMIN_1
|
||
JRGT AVW_ADD_X
|
||
CLR A7
|
||
MOVE A2,*A8(OXACCEL),W
|
||
AVW_HXMIN_1
|
||
MOVE A5,A5
|
||
JRGE AVW_ADD_X
|
||
SRA SLED_XYBRAKE_SRA,A5
|
||
JRZ AVW_CLEARX
|
||
ABS A5
|
||
MOVI SLED_XYBRAKE,A7
|
||
MOVE A7,*A8(OXACCEL),W
|
||
MOVB A5,*A8(OXBURN)
|
||
|
||
JRUC AVW_ADD_X
|
||
|
||
AVW_HIT_XMAX
|
||
MOVE *A8(OXACCEL),A7,W
|
||
JREQ AVW_HXMAX_1
|
||
JRLT AVW_ADD_X
|
||
CLR A7
|
||
MOVE A2,*A8(OXACCEL),W
|
||
AVW_HXMAX_1
|
||
MOVE A5,A5
|
||
JRLE AVW_ADD_X
|
||
SRA SLED_XYBRAKE_SRA,A5
|
||
JRZ AVW_CLEARX
|
||
ABS A5
|
||
MOVI -SLED_XYBRAKE,A7
|
||
MOVE A7,*A8(OXACCEL),W
|
||
MOVB A5,*A8(OXBURN)
|
||
|
||
JRUC AVW_ADD_X
|
||
|
||
AVW_CLEARX
|
||
MOVE A2,*A8(OXVEL),L
|
||
JRUC AVW_ADD_X
|
||
|
||
AVW_NO_X_VIOLATION
|
||
MOVE *A8(OXACCEL),A7,W
|
||
|
||
AVW_ADD_X
|
||
ADDRM A7,*A8(OXVEL),L
|
||
|
||
*Do Y boundry check
|
||
|
||
SRA 16,A1
|
||
|
||
CMPI DESK_YMAX,A1 ;Did we go too far down?
|
||
JRGE AVW_HIT_YMAX ;BR = Yes
|
||
|
||
CMPI DESK_YMIN,A1 ;Did we go too far up?
|
||
JRGT AVW_DONE ;BR = No, no violations in Y
|
||
|
||
MOVE *A8(OYACCEL),A7,W
|
||
JREQ AVW_HYMIN_1
|
||
JRGT AVW_DONE
|
||
MOVE A2,*A8(OYACCEL),W
|
||
AVW_HYMIN_1
|
||
MOVE A4,A4
|
||
JRGE AVW_DONE
|
||
|
||
JRUC AVW_YREFLECT
|
||
SRA SLED_XYBRAKE_SRA,A4
|
||
JRZ AVW_CLEARY
|
||
ABS A4
|
||
INC A4
|
||
MOVIM SLED_XYBRAKE,*A8(OYACCEL),W
|
||
MOVB A4,*A8(OYBURN)
|
||
|
||
JRUC AVW_DONE
|
||
|
||
AVW_HIT_YMAX
|
||
MOVE *A8(OYACCEL),A7,W
|
||
JREQ AVW_HYMAX_1
|
||
JRLT AVW_DONE
|
||
MOVE A2,*A8(OYACCEL),W
|
||
AVW_HYMAX_1
|
||
MOVE A4,A4
|
||
JRLE AVW_DONE
|
||
AVW_YREFLECT
|
||
NEG A4
|
||
SRA 1,A4
|
||
MOVE A4,*A8(OYVEL),L
|
||
JRUC AVW_DONE
|
||
|
||
AVW_CLEARY
|
||
MOVE A2,*A8(OYVEL),L
|
||
|
||
AVW_DONE
|
||
|
||
AVW_X
|
||
RETS
|
||
|
||
*
|
||
*Come here when you want a no nonsense stop at the center of
|
||
*the screen.
|
||
*A2 = 0 for clearing
|
||
*
|
||
AVW_STOP_AT_CENTER
|
||
*Do Z boundry check
|
||
CMPI DESK_ZMAX_C,A0 ;Did we go too far back?
|
||
JRGE AVW_SC_HIT_ZMAX ;BR = Yes
|
||
|
||
CMPI DESK_ZMIN_C,A0 ;Did we come too far forward?
|
||
JRGT AVW_SC_NO_Z_VIOLATION ;BR = No, no violations in Z
|
||
|
||
*Object is less than Z boundry
|
||
AVW_SC_HIT_ZMIN
|
||
MOVE *A8(OZVEL),A7,L ;Are we moving towards the boundry?
|
||
JRGE AVW_SC_NO_Z_VIOLATION ;BR = Yes, so let it go
|
||
JRUC AVW_SC_CLEARZ
|
||
|
||
AVW_SC_HIT_ZMAX
|
||
MOVE *A8(OZVEL),A7,L
|
||
JRLE AVW_SC_NO_Z_VIOLATION
|
||
AVW_SC_CLEARZ
|
||
MOVE A2,*A8(OZVEL),L
|
||
AVW_SC_NO_Z_VIOLATION
|
||
|
||
*Do X boundry check
|
||
|
||
SRA 16,A3 ;Easier to do the integer
|
||
|
||
CMPI DESK_XMAX_C,A3 ;Did we go too far to the right?
|
||
JRGE AVW_SC_HIT_XMAX ;BR = Yes
|
||
|
||
CMPI DESK_XMIN_C,A3 ;Did we go too far to the left?
|
||
JRGT AVW_SC_NO_X_VIOLATION ;BR = No, no violations in X
|
||
|
||
*Object is less than X boundry
|
||
MOVE *A8(OXVEL),A7,L ;Are we moving towards the boundry
|
||
JRGE AVW_SC_NO_X_VIOLATION ;BR = Yes, so let it get there
|
||
JRUC AVW_SC_CLEARX ;Otherwise, stop it
|
||
|
||
*Object is greater than X boundry
|
||
AVW_SC_HIT_XMAX
|
||
MOVE *A8(OXVEL),A7,L ;Are we moving towards the boundry
|
||
JRLE AVW_SC_NO_X_VIOLATION ;BR = Yes, so let it get there
|
||
AVW_SC_CLEARX
|
||
MOVE A2,*A8(OXVEL),L
|
||
AVW_SC_NO_X_VIOLATION
|
||
|
||
*Do Y boundry check
|
||
|
||
SRA 16,A1
|
||
|
||
CMPI DESK_YMAX_C,A1 ;Did we go too far down?
|
||
JRGE AVW_SC_HIT_YMAX ;BR = Yes
|
||
|
||
CMPI DESK_YMIN_C,A1 ;Did we go too far up?
|
||
JRGT AVW_SC_NO_Y_VIOLATION ;BR = No, no violations in Y
|
||
|
||
*Object is less than Y boundry
|
||
MOVE *A8(OYVEL),A7,L ;Are we moving towards the boundry
|
||
JRGE AVW_SC_NO_Y_VIOLATION ;BR = Yes, so let it get there
|
||
JRUC AVW_SC_CLEARY ;Otherwise, stop it
|
||
|
||
*Object is greater than Y boundry
|
||
AVW_SC_HIT_YMAX
|
||
MOVE *A8(OYVEL),A7,L ;Are we moving towards the boundry
|
||
JRLE AVW_SC_NO_Y_VIOLATION ;BR = Yes, so let it get there
|
||
AVW_SC_CLEARY
|
||
MOVE A2,*A8(OYVEL),L
|
||
AVW_SC_NO_Y_VIOLATION
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_MOVE_AROUND *
|
||
* *
|
||
* Anim Func to deal with movin' this crate around. *
|
||
* *
|
||
**************************************************************************
|
||
A_MOVE_AROUND
|
||
; RETS
|
||
CALLA GET_HEAD_PART ;Velocity only works on the head
|
||
|
||
; MOVE *A8(OFFSCRN_TIME),A14,W
|
||
; CMPI 60,A14 ;Has he been offscreen awhile?
|
||
; JRLT AMA_ONSCREEN ;BR = No
|
||
*Desk is way offscreen, time to scare the player
|
||
; MOVB *A8(OFDAM_GOING),A14 ;Is major damage going?
|
||
; JRNE AMA_ONSCREEN ;BR = Yes, no scaring
|
||
|
||
; MOVK 1,A3 ;Scream direction
|
||
; MOVI SND_KAMIKAZE,A4 ;Scream sound
|
||
; MOVI 75,A5 ;Scream duration
|
||
; MOVK 1,A6 ;Scream severity
|
||
; CALLA MAKE_MONDOR_SCREAM ;Kamikaze
|
||
|
||
; MOVE @XBASE,A1,L
|
||
; MOVE @YBASE,A2,L
|
||
; MOVE @ZBASE,A3,L
|
||
; CALLA SET_ANIPU
|
||
|
||
; MOVE A8,A14
|
||
; ADDI OXVAL,A14
|
||
; MMFM A14,A4,A5,A6 ;LOAD A6:OXPOS, A5:OYPOS, A4:OZPOS
|
||
|
||
; MOVI XBASE,A14
|
||
; MMFM A14,A1,A2,A3 ;LOAD A3:XBASE, A2:YBASE, A1:ZBASE
|
||
|
||
; SUB A3,A6 ;Universe to World X
|
||
; ADD A2,A5 ;Universe to World Y
|
||
; SUB A1,A4 ;Universe to World Z
|
||
|
||
; MOVI 10000H,A11
|
||
; CLR A9
|
||
; CLR A7
|
||
; MOVI 80,A10
|
||
|
||
; MOVIM -720,*A8(OFFSCRN_TIME),W ;This gives us time to get back
|
||
|
||
; JRUC AMA_THRUST
|
||
|
||
;AMA_ONSCREEN
|
||
MOVB *A8(OMOVE_TIMER),A14
|
||
JRZ AMA_NEXT_MOVE
|
||
DEC A14
|
||
MOVB A14,*A8(OMOVE_TIMER)
|
||
JRNZ AMA_X
|
||
|
||
AMA_NEXT_MOVE
|
||
MOVE A8,A14
|
||
ADDI OXVAL,A14
|
||
MMFM A14,A4,A5,A6 ;LOAD A6:OXPOS, A5:OYPOS, A4:OZPOS
|
||
|
||
MOVI XBASE,A14
|
||
MMFM A14,A1,A2,A3 ;LOAD A3:XBASE, A2:YBASE, A1:ZBASE
|
||
|
||
SUB A3,A6 ;Universe to World X
|
||
ADD A2,A5 ;Universe to World Y
|
||
SUB A1,A4 ;Universe to World Z
|
||
|
||
CLR B0 ;This is the emergency register for Z vel
|
||
|
||
MOVB *A8(OCENTER_FLAG),A14 ;Time to center?
|
||
JRNZ AMA_CENTER_NOW ;BR = Yes
|
||
|
||
CMPI DESK_ZMAX-100H,A4 ;Did he get put waydafucbac?
|
||
JRLT AMA_NO_EMERGENCY_Z ;BR = No, then don't call 911
|
||
|
||
MOVB *A8(OFIRING_MISSLE),A14
|
||
JRNZ AMA_NO_EMERGENCY_Z
|
||
|
||
MOVKB 1,*A8(OSHAKE_FIST)
|
||
|
||
INC B0 ;Sound the alarm
|
||
MOVI DESK_ZMIN+2000H,A0 ;Get Desk up front now!
|
||
MOVI DESK_ZMIN,A1
|
||
CALLA RANGERND
|
||
MOVE A0,A11
|
||
|
||
JRUC AMA_SELECT_X
|
||
|
||
AMA_NO_EMERGENCY_Z
|
||
CLRB *A8(OSHAKE_FIST)
|
||
|
||
CMPI DESK_ZMIN,A4
|
||
JRGT AMA_FULL_Z
|
||
AMA_BACK_UP_Z
|
||
MOVI DESK_ZMIN+4000H,A1
|
||
JRUC AMA_RAND_Z
|
||
AMA_FULL_Z
|
||
MOVI DESK_ZMIN,A1
|
||
AMA_RAND_Z
|
||
MOVI 10000h,A0
|
||
CALLA RANGERND
|
||
MOVE A0,A11 ;Random Z
|
||
|
||
AMA_SELECT_X
|
||
MOVB *A8(OGATS_GONE),A14
|
||
CMPK 2,A14 ;Are both his arms missing?
|
||
JRLO AMA_FULL_X ;BR = No, do normal targeting
|
||
|
||
MOVI 40,A0
|
||
MOVK 10,A1
|
||
CALLA RANGERND ;Random Duration, end of battle
|
||
MOVE A0,A10
|
||
|
||
AMA_FULL_X
|
||
*First select duration. This is during normal operation
|
||
MOVI 120,A0
|
||
MOVK 20,A1
|
||
CALLA RANGERND ;Random Duration
|
||
MOVE A0,A10
|
||
|
||
MOVI DESK_XMAX,A0
|
||
MOVI DESK_XMIN,A1
|
||
AMA_DO_RAND_X
|
||
CALLA RANGERND
|
||
MOVE A0,A9 ;Random X
|
||
SLL 16,A9
|
||
|
||
MOVI DESK_YMAX,A0
|
||
MOVI DESK_YMIN,A1
|
||
CALLA RANGERND
|
||
MOVE A0,A7 ;Random Y
|
||
SLL 16,A7
|
||
|
||
*
|
||
*World target points selected, now get us there
|
||
*A4 = World Z, A5 = World Y, A6 = World X
|
||
*A11 = Target world Z, A9 = Target world X, A7 = Target world Y
|
||
*A10 = Duration
|
||
*
|
||
AMA_THRUST
|
||
MOVE B0,B0
|
||
JRNZ AMA_SETZ
|
||
|
||
MOVB *A8(ONOSET_ZVEL),A14 ;Can I set the ZVEL?
|
||
JRNZ AMA_SKIPZ ;BR = No
|
||
|
||
AMA_SETZ
|
||
SUB A4,A11 ;Get the Z distance
|
||
DIVS A10,A11 ;Dis'll give us the Z velocity
|
||
MOVI SLED_ZACCEL,A4
|
||
SRA SLED_ZACCEL_SRA,A11
|
||
JRNN AMA_ZPLUS
|
||
NEG A4
|
||
JRUC AMA_STUFFZ
|
||
AMA_ZPLUS
|
||
JRZ AMA_SKIPZ
|
||
AMA_STUFFZ
|
||
ABS A11
|
||
MOVB A11,*A8(OZBURN)
|
||
MOVE A4,*A8(OZACCEL),W
|
||
|
||
AMA_SKIPZ
|
||
SUB A6,A9 ;Get the X distance
|
||
DIVS A10,A9 ;Dis'll give us the X velocity
|
||
MOVI SLED_XYACCEL,A4
|
||
SRA SLED_XYACCEL_SRA,A9
|
||
JRNN AMA_XPLUS
|
||
NEG A4
|
||
JRUC AMA_STUFFX
|
||
AMA_XPLUS
|
||
JRZ AMA_SKIPX
|
||
AMA_STUFFX
|
||
ABS A9
|
||
MOVB A9,*A8(OXBURN)
|
||
MOVE A4,*A8(OXACCEL),W
|
||
|
||
AMA_SKIPX
|
||
SUB A5,A7 ;Get the Y distance
|
||
DIVS A10,A7 ;Dis'll give us the Y velocity
|
||
MOVI SLED_XYACCEL,A4
|
||
SRA SLED_XYACCEL_SRA,A7
|
||
JRNN AMA_YPLUS
|
||
NEG A4
|
||
JRUC AMA_STUFFY
|
||
AMA_YPLUS
|
||
JRZ AMA_SKIPY
|
||
AMA_STUFFY
|
||
ABS A7
|
||
MOVB A7,*A8(OYBURN)
|
||
MOVE A4,*A8(OYACCEL),W
|
||
AMA_SKIPY
|
||
|
||
MOVE A10,A0
|
||
MOVK 10,A1
|
||
CALLA RANGERND ;Random Duration
|
||
MOVB A0,*A8(OMOVE_TIMER) ;Set the duration
|
||
|
||
AMA_X
|
||
RETS
|
||
|
||
*
|
||
*Come here when you want to get to the center right away.
|
||
*No accelerations are used, just straight velocity
|
||
*
|
||
AMA_CENTER_NOW
|
||
MOVI 0A000H,A11
|
||
CLR A9
|
||
|
||
MOVI DESK_YMAX,A0
|
||
MOVI DESK_YMIN,A1
|
||
CALLA RANGERND
|
||
MOVE A0,A7 ;Random Y
|
||
SLL 16,A7
|
||
|
||
MOVI 10,A10
|
||
|
||
SUB A4,A11 ;Get the Z distance
|
||
DIVS A10,A11 ;Dis'll give us the Z velocity
|
||
MOVE A11,*A8(OZVEL),L
|
||
|
||
SUB A6,A9 ;Get the X distance
|
||
DIVS A10,A9 ;Dis'll give us the X velocity
|
||
MOVE A9,*A8(OXVEL),L
|
||
|
||
SUB A5,A7 ;Get the Y distance
|
||
DIVS A10,A7 ;Dis'll give us the Y velocity
|
||
MOVE A7,*A8(OYVEL),L
|
||
|
||
MOVB A10,*A8(OMOVE_TIMER) ;Set the duration
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OXACCEL),W
|
||
MOVE A14,*A8(OYACCEL),W
|
||
MOVE A14,*A8(OZACCEL),W
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_DOME_RISE *
|
||
* *
|
||
* Anim func to start the dome on it's way up. *
|
||
* *
|
||
* A8 = Ptr to any part of the mech-desk *
|
||
* *
|
||
**************************************************************************
|
||
A_START_DOME_RISE
|
||
CALLR A_SCALE_SHAD
|
||
MOVK NUM_DOME,A1
|
||
CALLA FINDPART
|
||
MOVI ANIM_DOME_UP,A1
|
||
JAUC STRTANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_SEAT_RISE *
|
||
* *
|
||
* Anim func to start the seat on it's way up. *
|
||
* *
|
||
* A8 = Ptr to any part of the mech-desk *
|
||
* *
|
||
**************************************************************************
|
||
A_START_SEAT_RISE
|
||
MOVK NUM_SEATL,A1
|
||
CALLA FINDPART ;Get the left half
|
||
MOVI ANIM_DOME_UP,A1
|
||
CALLA STRTANIM ;Start it up
|
||
MOVE *A0(OPARTS),A0,L ;Link on down to the right half
|
||
JAUC STRTANIM ;Start it up
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DOME_UP *
|
||
* *
|
||
* Anim func to move the dome up another notch during *
|
||
* transform. *
|
||
* *
|
||
* A8 = Ptr to dome object *
|
||
* *
|
||
**************************************************************************
|
||
A_DOME_UP
|
||
MOVE *A8(OPARTSXY+16),A14,W
|
||
SUBK 7,A14
|
||
MOVE A14,*A8(OPARTSXY+16),W
|
||
CALLA GET_HEAD_PART_A0
|
||
CALLA GETOFFPU
|
||
MOVE A8,A0
|
||
JAUC SETOFFPU
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DOME_DONE *
|
||
* *
|
||
* Anim func to perform the final shit on the dome after *
|
||
* it has risen. *
|
||
* *
|
||
* A8 = Ptr to the dome object *
|
||
* *
|
||
**************************************************************************
|
||
A_DOME_DONE
|
||
CLRM *A8(OPARTSXY),L
|
||
ANDNIM M_OPARTSXY,*A8(OFLAGS),W
|
||
CALLA GET_HEAD_PART_A0
|
||
CALLA GETOFFPU
|
||
MOVE A8,A0
|
||
JAUC SETOFFPU
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_JOSH *
|
||
* *
|
||
* Anim func to start the Josh character as mech-desk pilot. *
|
||
* *
|
||
* A8 = Ptr to any part of the mech-desk *
|
||
* *
|
||
**************************************************************************
|
||
A_START_JOSH
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVIM 450,*A0(OTALK_WAIT),W ;Make sure he waits later
|
||
MOVK NUM_JOSH,A1
|
||
CALLA FINDPART
|
||
MOVI ANIM_JOSH_UP,A1
|
||
JAUC STRTANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_COLLS *
|
||
* *
|
||
* Anim func to start collisions for the desk *
|
||
* *
|
||
* A8 = Ptr to any part *
|
||
* *
|
||
**************************************************************************
|
||
A_START_COLLS
|
||
CALLA GET_HEAD_PART
|
||
MOVE A8,A0
|
||
MOVK NUM_COLL_PARTS,A6 ;Let's go through the parts and activate
|
||
MOVI DESK_GUNVECT,A5
|
||
MOVI DESK_CVECT,A4
|
||
|
||
ABS_COLL_LOOP
|
||
MOVE A4,*A0(OCVECT),L
|
||
MOVE A5,*A0(OGUNVECT),L
|
||
|
||
MOVE *A0(OPARTS),A0,L
|
||
DSJS A6,ABS_COLL_LOOP
|
||
|
||
MOVK NUM_DOME,A1
|
||
CALLA FINDPART
|
||
ORIM M_DEAD,*A0(OFLAGS),W
|
||
MOVIM DUMCOLL,*A0(OCVECT),L
|
||
MOVIM DOME_GUNVECT,*A0(OGUNVECT),L
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BATTLE_STATIONS *
|
||
* *
|
||
* Anim func to make desk start attacking. *
|
||
* *
|
||
* A8 = Ptr to any part *
|
||
* *
|
||
**************************************************************************
|
||
A_BATTLE_STATIONS
|
||
CALLA GET_HEAD_PART
|
||
|
||
MOVIM 5*60,*A8(OMISSLE_WAIT),W ;Initial wait before 1st missle
|
||
|
||
MOVK NUM_GATL,A1 ;Start the left Gatling gun.
|
||
CALLA FINDPART
|
||
MOVI ANIM_GAT_IDLE,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVE *A0(OPARTS),A0,L ;Start the right Gatling gun.
|
||
MOVI ANIM_GAT_IDLE,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVK NUM_MISSLE_DOOR,A1
|
||
CALLA FINDPART
|
||
MOVI ANIM_FRONT_MISSLE,A1
|
||
CALLA STRTANIM ;Start the front missle door.
|
||
|
||
MOVK NUM_SHOULDERL,A1 ;Start the left shoulder.
|
||
CALLA FINDPART
|
||
MOVI ANIM_SHOULDER_MISSLE,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVE *A0(OPARTS),A0,L ;Start the right shoulder.
|
||
MOVI ANIM_SHOULDER_MISSLE,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVK NUM_GUN_ARM,A1 ;Start the boundry checker.
|
||
CALLA FINDPART
|
||
MOVI ANIM_VELOCITY_WATCH,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVE *A0(OPARTS),A0,L ;Start the movement.
|
||
MOVI ANIM_MOVEMENT,A1
|
||
JAUC STRTANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_MULTI_METAL_CHUNK *
|
||
* *
|
||
* Anim Func to call a fragger script for chunks randomly *
|
||
* picked from MULTI_METAL_CHUNK_TAB. *
|
||
* *
|
||
* A8 = Ptr to object creating chunks *
|
||
* *
|
||
**************************************************************************
|
||
A_MULTI_METAL_CHUNK
|
||
MOVK NUM_METAL_CHUNKS,A0
|
||
CALLA RAND0
|
||
SLL 5,A0
|
||
ADDI MULTI_METAL_CHUNK_TAB,A0
|
||
MOVE *A0,A0,L
|
||
MOVE A0,B14
|
||
MOVI [2,0],A0
|
||
MOVI 400H,A3
|
||
MOVI [5,5],A4
|
||
CALLA PreFrag_Box
|
||
JAUC Fragger
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_MEDIUM_SHAKE *
|
||
* *
|
||
* Anim Func to start a MEDIUM Desk shake. *
|
||
* *
|
||
* A8 = Ptr to any part of the Desk *
|
||
* *
|
||
**************************************************************************
|
||
A_START_MEDIUM_SHAKE
|
||
MOVK NUM_MED_SHAKE,A1
|
||
CALLA FINDPART ;The foot rest will shake ust
|
||
JRZ ASMS_X ;BR = Couldn't find the part
|
||
MOVI ANIM_MEDIUM_SHAKE,A1 ;Start a shaker anim
|
||
CALLA STRTANIM
|
||
ASMS_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_BIG_SHAKE *
|
||
* *
|
||
* Anim Func to start a BIG Desk shake. *
|
||
* *
|
||
* A8 = Ptr to any part of the Desk *
|
||
* *
|
||
**************************************************************************
|
||
A_START_BIG_SHAKE
|
||
MOVK NUM_BIG_SHAKE,A1
|
||
CALLA FINDPART ;The foot rest will shake ust
|
||
JRZ ASBS_X ;BR = Couldn't find the part
|
||
MOVI ANIM_BIG_SHAKE,A1 ;Start a shaker anim
|
||
CALLA STRTANIM
|
||
ASBS_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_TURN_ON_EYE_DAMAGE *
|
||
* *
|
||
* Anim func to turn on the damage for one of the *
|
||
* eye pieces. *
|
||
* *
|
||
* A8 = Ptr to eye that's damaged *
|
||
* *
|
||
**************************************************************************
|
||
A_TURN_ON_EYE_DAMAGE
|
||
MOVB *A8(OPARTID),A1
|
||
SUBK NUM_EYEL,A1
|
||
ADDK NUM_EYE_DAMAGE,A1
|
||
CALLA FINDPART
|
||
MOVI ANIM_EYE_DAMAGE,A1
|
||
JAUC STRTANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_TURN_ON_FRONT_DAMAGE *
|
||
* *
|
||
* Anim func to turn on the damage for the front door. *
|
||
* *
|
||
* A8 = Ptr to front piece. *
|
||
* *
|
||
**************************************************************************
|
||
A_TURN_ON_FRONT_DAMAGE
|
||
MOVK NUM_MISSLE_DOOR,A1
|
||
CALLA FINDPART
|
||
MOVI ANIM_FRONT_DAMAGE,A1
|
||
JAUC STRTANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_IF_FINAL *
|
||
* *
|
||
* Anim Func to see if this was the final part to explode. *
|
||
* if so, then we will branch to the final explode animation. *
|
||
* If not, then we just pull ourselves. *
|
||
* *
|
||
* A8 = ptr to part that just exploded *
|
||
* *
|
||
**************************************************************************
|
||
A_CHECK_IF_FINAL
|
||
CALLA GET_HEAD_PART_A0
|
||
|
||
MOVE A0,A7
|
||
|
||
MOVIB 100,*A0(OCLRFDAM) ;Delay clearing for this many ticks
|
||
|
||
MOVB *A8(OPARTID),A4 ;Let's find out about this part
|
||
|
||
CMPK NUM_GATL,A4
|
||
JREQ ACIF_IS_GAT
|
||
CMPK NUM_GATR,A4
|
||
JRNE ACIF_CK_LAUNCHER
|
||
ACIF_IS_GAT
|
||
INCB *A0(OGATS_GONE) ;Chalk up another gun death
|
||
JRUC ACIF_VITALS
|
||
ACIF_CK_LAUNCHER
|
||
CMPK NUM_SHOULDERL,A4
|
||
JREQ ACIF_IS_LAUNCHER
|
||
CMPK NUM_SHOULDERR,A4
|
||
JREQ ACIF_IS_LAUNCHER
|
||
CMPK NUM_FRONT,A4
|
||
JRNE ACIF_VITALS
|
||
ACIF_IS_LAUNCHER
|
||
INCB *A0(OMLAUNCH_GONE)
|
||
ACIF_VITALS
|
||
MOVK NUM_SHOULDERL,A1
|
||
CALLA FINDPART
|
||
|
||
MOVE *A0(OFLAGS),A14,W ;Check LEFT shoulder
|
||
BTST B_DEAD,A14
|
||
JRZ ACIF_NOT_FINAL ;BR = Not dead, can't be time
|
||
|
||
MOVE *A0(OPARTS),A0,L
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_DEAD,A14 ;Check RIGHT shoulder
|
||
JRZ ACIF_NOT_FINAL ;BR = Not dead
|
||
|
||
MOVK NUM_GATL,A1
|
||
CALLA FINDPART
|
||
|
||
MOVE *A0(OFLAGS),A14,W ;Check LEFT gatlin gun
|
||
BTST B_DEAD,A14
|
||
JRZ ACIF_NOT_FINAL ;BR = Not dead, can't be time
|
||
|
||
MOVE *A0(OPARTS),A0,L
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_DEAD,A14 ;Check RIGHT gatlin gun
|
||
JRZ ACIF_NOT_FINAL ;BR = Not dead
|
||
|
||
MOVE *A0(OPARTS),A0,L
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_DEAD,A14 ;Check FRONT piece
|
||
JRZ ACIF_NOT_FINAL ;BR = Not dead
|
||
|
||
*All vital parts are gone here
|
||
MOVB *A7(OPARTS_LOST),A14
|
||
CMPK 9,A14 ;Did player kill them all?
|
||
JRLO ACIF_GO_FINAL ;BR = No
|
||
|
||
MOVKM 1,@DESK_TOTAL,W ;Flag the full kill
|
||
JRUC ACIF_GO_FINAL
|
||
|
||
*
|
||
*A8 = ptr to part that just blew up
|
||
*
|
||
ACIF_NOT_FINAL
|
||
CMPK NUM_FRONT,A4
|
||
JRHI ACIF_X
|
||
|
||
; MOVE A4,A6
|
||
; DEC A6
|
||
; SRL 1,A6
|
||
; SLL 3,A6
|
||
; ADDI TAB_FINAL_SNUMS,A6
|
||
; MOVB *A6,A6
|
||
|
||
; MOVI NUM_JOSH,A1
|
||
; CALLA FINDPART
|
||
|
||
; MOVB A6,*A0(OTALK_FLAG)
|
||
ACIF_X
|
||
RETS
|
||
|
||
*Start the final explosion
|
||
*A7 = Ptr to head-part
|
||
ACIF_GO_FINAL
|
||
MOVE A8,A1
|
||
MOVE A7,A8
|
||
CALLA ALL_COLLS_OFF
|
||
MOVE A1,A8
|
||
|
||
MOVKB 1,*A7(OFDAM_GOING) ;Flag the final damage
|
||
; MOVIM 1,@GUNS_OFF,W
|
||
MOVIM 1,@NO_CHARITY,W ;Kill the charity
|
||
|
||
MOVK NUM_SEATL,A1
|
||
CALLA FINDPART
|
||
MOVI ANIM_FINAL_EXPLOSION,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVIM 1000,*A7(OTALK_WAIT),W ;We can't talk anymore
|
||
MOVK SNUM_DESK_DESTROY,A0
|
||
JRUC A_SUB_SND_G
|
||
|
||
|
||
TAB_FINAL_SNUMS
|
||
.BYTE SNUM_USELESS, SNUM_FORGIVE, SNUM_USELESS
|
||
.BYTE SNUM_BEAST, SNUM_HURT_DESK
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SELECT_GAT_IDLE_TIME *
|
||
* *
|
||
* Anim Func to select idle time for a Gatlin gun. *
|
||
* Time is placed in the AnimSLP field of the gat object. *
|
||
* *
|
||
**************************************************************************
|
||
A_SELECT_GAT_IDLE_TIME
|
||
MOVK 5,A0
|
||
MOVI 20,A1
|
||
CALLA RANGERND
|
||
MOVB A0,*A8(AnimSLP)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_GAT_DECISION *
|
||
* *
|
||
* Anim Func to make decisions for the Gatling gun. *
|
||
* *
|
||
* AARG+,W = Number of animation we are coming from. *
|
||
* *
|
||
**************************************************************************
|
||
A_GAT_DECISION
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE A0,A7 ;Head ptr to stay here for duration
|
||
|
||
CALLA GETAFARG_WORD
|
||
JRZ AGD_RETURN_FROM_IDLE ;BR = We just returned from idle
|
||
|
||
AGD_DO_IDLE
|
||
MOVI ANIM_GAT_IDLE,A1 ;and run the idle sequence before
|
||
JAUC SetAnim ;we continue.
|
||
|
||
AGD_RETURN_FROM_IDLE
|
||
MOVB *A7(OFDAM_GOING),A14 ;If damage show going then no arm action
|
||
JRNZ AGD_DO_IDLE ;BR = It is, so don't
|
||
|
||
MOVI 800,A0
|
||
CALLA RANDPER
|
||
JRNC AGD_DO_IDLE
|
||
|
||
MOVI ANIM_GAT_SHOOT,A1
|
||
JAUC SetAnim
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_RANDOM_BURST_COUNT *
|
||
* *
|
||
* Anim Func to load a random Burst count. *
|
||
* *
|
||
* A8 = Ptr to part doing the firing *
|
||
* *
|
||
**************************************************************************
|
||
A_RANDOM_BURST_COUNT
|
||
MOVK 1,A0
|
||
MOVK 3,A1
|
||
CALLA RANGERND
|
||
MOVB A0,*A8(OBURSTCNT)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ARM_BURST_DECISION *
|
||
* *
|
||
* Anim Func to decide if we should fire another burst. *
|
||
* *
|
||
* A8 = Ptr to arm part firing *
|
||
* AARG+,L = Anim branch if the need arises to burst again. *
|
||
* *
|
||
**************************************************************************
|
||
A_GAT_BURST_DECISION
|
||
MOVB *A8(OBURSTCNT),A14
|
||
DEC A14
|
||
MOVB A14,*A8(OBURSTCNT)
|
||
JANZ SetAnim_AFARG
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_RANDOM_RAPID_COUNT *
|
||
* *
|
||
* Anim Func to load a random Rapid Fire count. *
|
||
* *
|
||
* A8 = Ptr to part doing the firing *
|
||
* *
|
||
**************************************************************************
|
||
A_RANDOM_RAPID_COUNT
|
||
MOVK 3,A0
|
||
MOVK 12,A1
|
||
CALLA RANGERND
|
||
MOVB A0,*A8(ORAPIDCNT)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ARM_RAPIDFIRE_DECISION *
|
||
* *
|
||
* Anim Func to decide if we should quickly fire again. *
|
||
* *
|
||
* A8 = Ptr to arm part firing *
|
||
* AARG+,L = Anim branch if the need arises to fire again. *
|
||
* *
|
||
**************************************************************************
|
||
A_GAT_RAPIDFIRE_DECISION
|
||
MOVB *A8(ORAPIDCNT),A14
|
||
DEC A14
|
||
MOVB A14,*A8(ORAPIDCNT)
|
||
JANZ SetAnim_AFARG
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_GAT_FIRE_FNC *
|
||
* *
|
||
* Anim Func for Gatling gun firing on the player(s). *
|
||
* *
|
||
* A8 = Ptr to gat doing the firing. *
|
||
* AARG+,L = [Y,X] firing offset for the gun *
|
||
* *
|
||
**************************************************************************
|
||
A_GAT_FIRE_FNC
|
||
MOVB *A8(O_BEING_DAMAGED),A14 ;Object being damaged?
|
||
JRN AGFF_X ;BR = Yes
|
||
|
||
CALLA GETAFARG_LONG ;Get the firing offset for the gun
|
||
|
||
MOVB *A8(OBARREL),A14
|
||
MOVE A14,B14
|
||
INC B14 ;Fire out of the next barrel
|
||
CMPK NUM_GUN_FLASHES-1,B14 ;Did we wrap?
|
||
JRLS AGFF_LOAD_FLASH ;BR = No
|
||
CLR B14
|
||
AGFF_LOAD_FLASH
|
||
MOVE B14,A14
|
||
MOVB A14,*A8(OBARREL)
|
||
SLL 5,B14
|
||
ADDI GUN_FLASH_TABLE,B14
|
||
MOVE *B14,B0,L
|
||
|
||
MOVE A0,A3
|
||
PUSH A3
|
||
INCB *A8(OSHOTS_TAKEN)
|
||
|
||
CALLA EASYMAKE
|
||
JRZ AGFF_NO_OBJ ;BR = Creation failed, exit.
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
|
||
CALLA SETOFFPU
|
||
|
||
CALLA INSPART
|
||
|
||
MOVE *A8(OCTRL),A5,W
|
||
ANDI M_FLIPH|M_FLIPV,A5 ;ISOLATE FLIP BITS ONLY
|
||
ORM A5,*A0(OCTRL),W
|
||
|
||
CALLA INSOBJ
|
||
AGFF_NO_OBJ
|
||
PULLQ A3
|
||
|
||
; MOVI [2,0],A5
|
||
MOVE @BASE_HIT,A5,W
|
||
ADDI 800H,A5
|
||
SLL 4,A5
|
||
|
||
CALLA CK_PLAYER_HIT
|
||
JRNZ AGFF_HIT ;BR = Successful hit on Player(s)
|
||
JRNC AGFF_NOHIT ;BR = No hit, but he was visible
|
||
JRUC AGFF_NOHIT_NO_SOUND ;He didn't hit because he was not visible
|
||
AGFF_HIT
|
||
CLRB *A8(OMISSES)
|
||
SOUNDZ SND_DESK_GUN
|
||
JRUC AGFF_X
|
||
AGFF_NOHIT
|
||
SOUNDZ SND_DESK_GUN
|
||
CALLA GET_HEAD_PART_A0
|
||
|
||
MOVB *A0(OMLAUNCH_GONE),A14
|
||
CMPK 3,A14 ;Are we missing all of our Rocket launchers?
|
||
JRLO AGFF_NOHIT_NO_SOUND ;BR = No, we still have protection
|
||
|
||
MOVB *A0(OGATS_GONE),A14 ;Are we missing a gat?
|
||
JRZ AGFF_NOHIT_NO_SOUND ;BR = No, we still have protection
|
||
|
||
; MOVI [1,0],A5
|
||
MOVE @BASE_HIT,A5,W
|
||
SUBI 800H,A5
|
||
SLL 4,A5
|
||
|
||
ALLPLYR PLAYER_HIT ;Hit 'em all, 'cause we're down.
|
||
|
||
AGFF_NOHIT_NO_SOUND
|
||
INCB *A8(OMISSES)
|
||
AGFF_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_MAKE_NOOO *
|
||
* *
|
||
* Anim func to make the Nooo! sound when final destruction *
|
||
* is near. *
|
||
* *
|
||
* A8 = Ptr to part doing the final explode animation *
|
||
* *
|
||
**************************************************************************
|
||
A_MAKE_NOOO
|
||
MOVB *A8(AnimLoop),A14
|
||
CMPK 5,A14
|
||
JRNE AMN_X
|
||
|
||
MOVI NUM_JOSH,A1
|
||
CALLA FINDPART
|
||
MOVKB SNUM_NOOO,*A0(OTALK_FLAG)
|
||
RETS
|
||
|
||
AMN_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_GOOD_TO_GO *
|
||
* *
|
||
* Anim func to set up Desk for the final explode. *
|
||
* *
|
||
* A8 = ptr to any desk part. *
|
||
* *
|
||
**************************************************************************
|
||
A_GOOD_TO_GO
|
||
CALLA GET_HEAD_PART
|
||
CLRB *A8(OCENTER_FLAG) ;No more centering
|
||
|
||
MOVI OID_INFOTEXT,A0
|
||
CALLA KILOBJ_ALL ;Kill any text
|
||
|
||
MOVK NUM_GUN_ARM+1,A1
|
||
CALLA FINDPART
|
||
CALLA PULLANIM
|
||
|
||
MOVK NUM_SMALL_SHAKE,A1
|
||
CALLA FINDPART
|
||
JRZ AGTG_VEL
|
||
CALLA CKPULLANIM
|
||
MOVE *A0(OPARTS),A0,L
|
||
CALLA CKPULLANIM
|
||
MOVE *A0(OPARTS),A0,L
|
||
CALLA CKPULLANIM
|
||
AGTG_VEL
|
||
MOVE @XBASE,A1,L
|
||
CALLA SET_ANIPXU ;Center Mondor
|
||
CALLA SET_OBJSU ;and all of his parts
|
||
MOVIM 400H,*A8(OZVEL),L ;And no more jerky beef
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_KEEP_US_CENTERED *
|
||
* *
|
||
* Anim Func to keep the OCENTERED flag set. *
|
||
* *
|
||
* A8 = Ptr to any desk part. *
|
||
* *
|
||
**************************************************************************
|
||
A_KEEP_US_CENTERED
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVKB 2,*A0(OCENTER_FLAG)
|
||
MOVIB 120,*A0(OCLRCENTER)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DELETE_CREATE *
|
||
* *
|
||
* Anim Func to delete the whole desk multi-parter, *
|
||
* no matter what part is calling. Then start Mondor in *
|
||
* it's place *
|
||
* *
|
||
* A8 = Ptr to any part *
|
||
* *
|
||
**************************************************************************
|
||
A_DELETE_CREATE
|
||
CALLA GET_HEAD_PART
|
||
PUSH A8
|
||
MOVI 200,A8 ;Delay before desk comes down
|
||
; CREATE PID_MONDOR,MONDOR_PROC
|
||
PULLQ A8
|
||
JAUC DELETE_ENEMY ;Now rid yourself of the desk
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_ADD_YPOS *
|
||
* *
|
||
* Anim func to add a value to OYPOS. *
|
||
* *
|
||
* A8 = Object to add to *
|
||
* AARG+,W = Amount to add *
|
||
* *
|
||
**************************************************************************
|
||
A_ADD_YPOS
|
||
CALLA GETAFARG_WORD
|
||
ADDRM A0,*A8(OYPOS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BRANCH_PCNT *
|
||
* *
|
||
* Anim func to branch animation script a given percentage of *
|
||
* the time. *
|
||
* *
|
||
* A8 = Ptr to object to branch *
|
||
* AARG+,W = Percent chance of branch *
|
||
* AARG+,L = Branch *
|
||
* *
|
||
**************************************************************************
|
||
A_BRANCH_PCNT
|
||
CALLA GETAFARG_WORD ;Get percentage
|
||
CALLA RANDPER ;Should we do it?
|
||
JAC SetAnim_AFARG ;BR = Yes
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_INIT_EYE_DAMAGE *
|
||
* *
|
||
* Anim func to initialize an eye damage piece. *
|
||
* *
|
||
* A8 = Ptr to eye damage object *
|
||
* *
|
||
**************************************************************************
|
||
A_INIT_EYE_DAMAGE
|
||
ORIM M_NOSHADOW,*A8(OFLAGS),W
|
||
MOVE A8,A0
|
||
CALLA DELSHAD
|
||
CALLA OBJ_OFF
|
||
MOVI C_DAMGE_P,A0
|
||
JAUC CHANGE_PAL
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CONTINUE_PART_FINAL *
|
||
* *
|
||
* Anim func to grab OPART_FINAL_CONT and anim jump to it. *
|
||
* Unless it is 0, then fall through. *
|
||
* *
|
||
* A8 = Ptr to part finally exploding *
|
||
* *
|
||
**************************************************************************
|
||
A_CONTINUE_PART_FINAL
|
||
MOVE *A8(OPART_FINAL_CONT),A1,L
|
||
JANZ SetAnim
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SPAWN_FIRE *
|
||
* *
|
||
* Spawn a fire at a given offset and make it part of the *
|
||
* Multi-parter. *
|
||
* *
|
||
* A3 = OPARTSXY (unflipped) *
|
||
* A8 = Spawning object *
|
||
* A9 = Offset to add to OZOFF of spawner *
|
||
* B0 = Init table of fire *
|
||
* *
|
||
**************************************************************************
|
||
SPAWN_FIRE
|
||
MMTM SP,A0,A1,A2,A3,A7,A8
|
||
MMTM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
|
||
CALLR ASF_G
|
||
MMFM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
|
||
MMFM SP,A0,A1,A2,A3,A7,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SPAWN_FIRE *
|
||
* *
|
||
* Anim func to spawn a fire that will become part of the *
|
||
* multi-parter. *
|
||
* *
|
||
* A8 = Ptr to part that is on fire *
|
||
* AARG+,L = Init table of fire *
|
||
* AARG+,L = OPARTSXY of fire *
|
||
* AARG+,W = Offset to add to parts OZOFF to get flames *
|
||
* *
|
||
**************************************************************************
|
||
A_SPAWN_FIRE
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,B0 ;Got init table
|
||
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A3 ;Got OPARTSXY
|
||
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A9 ;Got Offset for OZOFF
|
||
|
||
ASF_G
|
||
CALLA EASYMAKE
|
||
JRZ ASF_X ;No objects available
|
||
|
||
CALLA CLRODATA ;Clear for good measure
|
||
|
||
MOVE *A8(OCTRL),A7,W ;Adjust offset if necessary
|
||
BTST B_FLIPH,A7
|
||
JRZ ASF_CHECKV
|
||
NEGX A3
|
||
ASF_CHECKV
|
||
BTST B_FLIPV,A7
|
||
JRZ ASF_NOV ;BR=NO FLIP ADJUSTMENT
|
||
NEGY A3
|
||
ASF_NOV
|
||
|
||
MOVE A3,*A0(OPARTSXY),L ;Just to position us
|
||
|
||
ANDI M_FLIPH|M_FLIPV,A7 ;ISOLATE FLIP BITS ONLY
|
||
MOVE *A0(OCTRL),A14,W
|
||
OR A14,A7 ;Match flip to spawing object
|
||
MOVE A7,*A0(OCTRL),W
|
||
|
||
MOVB *A8(OZOFF),A14
|
||
ADD A9,A14
|
||
MOVB A14,*A0(OZOFF) ;Set us in given Z proximity
|
||
|
||
CALLA GET_HEAD_PART ;Use the head part as a good source
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
|
||
CALLA SETOFFPU
|
||
|
||
CALLA INSPART
|
||
|
||
CALLA INSOBJ
|
||
|
||
ASF_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_INITIAL_SHOULDER_FREAK *
|
||
* *
|
||
* Anim func to set up the first part of the shoulder freak *
|
||
* out when it gets destroyed. Basically brings it back home. *
|
||
* *
|
||
* A8 = Ptr to shoulder object *
|
||
* AARG+,L = Animation branch if shoulder is home *
|
||
* *
|
||
**************************************************************************
|
||
A_INITIAL_SHOULDER_FREAK
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE *A8(OYPOS),A1,W
|
||
MOVE *A0(OYPOS),A2,W
|
||
SUB A1,A2 ;Get the difference in position
|
||
ABS A2
|
||
SRL 2,A2 ;Divide by move increments
|
||
JAZ SetAnim_AFARG ;BR = There is nothing left.
|
||
MOVB A2,*A8(AnimLoop)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_OK_MISSLE *
|
||
* *
|
||
* Anim func to check if it is O.K. to open a missle bay *
|
||
* for firing. If not, then take anim branch. *
|
||
* *
|
||
* A8 = Ptr to part wishing to open *
|
||
* AARG+,L = Anim branch to take if not O.K. to open *
|
||
* *
|
||
**************************************************************************
|
||
A_CHECK_OK_MISSLE
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE *A0(OMISSLE_WAIT),A14,W ;Are we being forced to wait on next?
|
||
JRNZ ACOM_NOT_OK ;BR = Yes, then wait
|
||
MOVB *A0(OFIRING_MISSLE),A14 ;Is another door open?
|
||
JRZ ACOM_OK ;BR = No
|
||
ACOM_NOT_OK
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A1
|
||
MOVE A1,*A8(AnimFrm),L
|
||
RETS
|
||
ACOM_OK
|
||
MOVB *A8(OPARTID),*A0(OFIRING_MISSLE) ;Mark it open for us
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CLR_MISSLE_OPEN *
|
||
* *
|
||
* Anim func to clear the OFIRING_MISSLE_FLAG *
|
||
* *
|
||
* A8 = Ptr to any part of desk *
|
||
* *
|
||
**************************************************************************
|
||
A_CLR_MISSLE_OPEN
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVB *A0(OFIRING_MISSLE),A1
|
||
MOVB *A8(OPARTID),A14
|
||
CMP A1,A14 ;Were we the ones firing missles?
|
||
JRNE ACMO_X ;BR = No
|
||
CLRB *A0(OFIRING_MISSLE) ;We are in control so we can clear
|
||
ACMO_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_MISSLE_TARGET *
|
||
* *
|
||
* Anim func to set up the velocities and what not for *
|
||
* the missle. *
|
||
* *
|
||
* A8 = ptr to the missle object *
|
||
* *
|
||
**************************************************************************
|
||
A_MISSLE_TARGET
|
||
MOVI 800,A0
|
||
CALLA RANDPER ;This is the chance that we target
|
||
JRNC AMT_FULL_SCREEN ;BR = Not this time
|
||
|
||
CALLA GET_PLAYER_EXTENTS
|
||
JRUC AMT_PICK_TARGET
|
||
|
||
AMT_FULL_SCREEN
|
||
MOVI [SCRTOP+SKYTOPOF,SCRLFT],A2
|
||
MOVI [SCRBOT,SCRRGT],A3
|
||
|
||
AMT_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_REAL,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)
|
||
|
||
MOVE *A8(OPART1),A14,L ;Is this stuck on?
|
||
JRZ AMT_LOAD_VEL ;BR = No
|
||
CALLA PULL_PART ;Pull it before setting vels
|
||
AMT_LOAD_VEL
|
||
CALLA SLINEVEL_LOAD_3D
|
||
|
||
MOVE *A8(OPROJECT_PARENT),A0,L ;Get the guy that created us
|
||
INCB *A0(OMISSLES_FIRED) ;We fired one more
|
||
|
||
CALLA GETHEADPART ;Get some head
|
||
|
||
MOVIB 60,*A0(OPROJ_CK_TIME) ;Check for hits after this much time
|
||
|
||
SOUND1 SND_MISSLE_LAUNCH
|
||
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_WAIT_FOR_MISSLES *
|
||
* *
|
||
* Anim func to check if any projectiles exist with their *
|
||
* OPROJECT_PARENT equal to A8. *
|
||
* *
|
||
* A8 = Ptr to owner of missles *
|
||
* AARG+,L = Branch if missles still exist *
|
||
* *
|
||
**************************************************************************
|
||
A_WAIT_FOR_MISSLES
|
||
MOVK NUM_LAST_PART,A1
|
||
CALLA FINDPART
|
||
JRUC AWFM_TST_NEXT
|
||
|
||
AWFM_TST_LOOP
|
||
MOVE *A0(OPROJECT_PARENT),A14,L
|
||
CMP A14,A8 ;Is this my missle?
|
||
JRNE AWFM_TST_NEXT ;BR = No
|
||
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,*A8(AnimFrm),L ;We found one, so branch animation
|
||
RETS
|
||
|
||
AWFM_TST_NEXT
|
||
MOVE *A0(OPARTS),A0,L
|
||
JRNZ AWFM_TST_LOOP
|
||
|
||
CALLA GET_HEAD_PART_A0
|
||
|
||
MOVB *A8(OMISSLES_FIRED),A14 ;Did we fire any of our missles?
|
||
JRNZ AWFM_LAUNCHED ;BR = Yes, then player is not that cool
|
||
|
||
MOVI 6*60,A1
|
||
CALLR SET_MISSLE_WAIT
|
||
MOVE *A0(OMISSLE_WAIT),A14,W ;Are we waiting?
|
||
JREQ AWFM_NO_VULNER ;BR = No
|
||
MOVKB 1,*A0(OMISSLE_VULNER) ;Make all missle launchers vulnerable
|
||
AWFM_NO_VULNER
|
||
MOVK NUM_JOSH,A1
|
||
CALLA FINDPART ;A0 gets wiped here
|
||
MOVKB SNUM_PISSED,*A0(OTALK_FLAG) ;Make Josh react to this
|
||
JRUC AWFM_X
|
||
|
||
AWFM_LAUNCHED
|
||
MOVI 3*60,A1
|
||
CALLR SET_MISSLE_WAIT
|
||
|
||
AWFM_X
|
||
RETS ;None exist, fall through
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SET_MISSLE_WAIT *
|
||
* *
|
||
* Anim func to set the wait time before the next missle *
|
||
* launcher is allowed to open. *
|
||
* *
|
||
* A8 = Ptr to any part of desk. *
|
||
* AARG+,W = Wait time, in ticks *
|
||
* *
|
||
**************************************************************************
|
||
A_SET_MISSLE_WAIT
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
CALLA GET_HEAD_PART_A0
|
||
*
|
||
* Entrypoint: SET_MISSLE_WAIT
|
||
* A0 = Ptr to desk master part
|
||
* A1 = Wait time
|
||
SET_MISSLE_WAIT
|
||
MOVE *A0(ONOGAT_TIME),A14
|
||
CMPI NOGATS_PISSED,A14 ;Have we been without for too long?
|
||
JRHS ASMW_X ;BR = Yes, then no missle waiting
|
||
MOVE A1,*A0(OMISSLE_WAIT),W
|
||
ASMW_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DESTROY_MISSLES *
|
||
* *
|
||
* Anim func to destroy all missles attached to this object. *
|
||
* *
|
||
* A8 = Missle launch object. *
|
||
* *
|
||
**************************************************************************
|
||
A_DESTROY_MISSLES
|
||
MOVK NUM_LAST_PART,A1
|
||
CALLA FINDPART
|
||
|
||
MOVI ANIM_MISSLE_EXPLODE,A1 ;We need this to start kill anim
|
||
|
||
JRUC ADM_TST_NEXT
|
||
|
||
ADM_TST_LOOP
|
||
MOVE *A0(OPROJECT_PARENT),A14,L
|
||
CMP A14,A8 ;Is this my missle?
|
||
JRNE ADM_TST_NEXT ;BR = No
|
||
|
||
MOVE *A0(OPARTS),A2,L ;Grab the next image in the multi-part
|
||
CALLA COLLSOFF ;Null it
|
||
CALLA PULLPART ;Pull it
|
||
CALLA STRTANIM ;Blow it
|
||
MOVE A2,A0 ;Let's proceed
|
||
JRNZ ADM_TST_LOOP ;BR = This was not the last object
|
||
RETS
|
||
|
||
ADM_TST_NEXT
|
||
MOVE *A0(OPARTS),A0,L
|
||
JRNZ ADM_TST_LOOP
|
||
RETS ;None exist, fall through
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_MAKE_SMOKE *
|
||
* *
|
||
* Anim func to make the lauch smoke for a missle. *
|
||
* *
|
||
* A8 = Ptr to missle launching *
|
||
* *
|
||
**************************************************************************
|
||
A_MAKE_SMOKE
|
||
CALLA CREATE_COPY ;Copy us an object to use as smoke
|
||
JRNZ AMS_GO ;BR = Got the smoke now toke
|
||
RETS
|
||
AMS_GO
|
||
CALLA CLRODATA ;Whack the data area
|
||
CALLA OBJOFF ;Turn the object off for now
|
||
CALLA COLLSOFF ;Null the colls
|
||
|
||
INCB *A0(OZOFF) ;Move Z one behind the missle
|
||
|
||
CALLA INSPART ;Make it part of the Multi-parter
|
||
CALLA INSOBJ ;Now make it part of the world
|
||
|
||
MOVI ANIM_MISSLE_SMOKE,A1
|
||
JAUC STRTANIM ;Make it animate
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_MISSLE_PAUSE *
|
||
* *
|
||
* Anim func to check if we should pause before firing *
|
||
* missles from bay. Uses the value in OMISSLE_PERC stored *
|
||
* in the master part. This value is the % chance that we *
|
||
* will pause. Pausing is done by not branching the animation. *
|
||
* *
|
||
* A8 = Ptr to missle bay *
|
||
* AARG+,L = Branch for no pause *
|
||
* *
|
||
**************************************************************************
|
||
A_CHECK_MISSLE_PAUSE
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE *A0(OMISSLE_PERC),A0,W ;Grab the pause percentage
|
||
CALLA RANDPER ;Should we pause
|
||
JANC SetAnim_AFARG ;BR = No
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SPAWN_N_MISSLES *
|
||
* *
|
||
* Anim Func to spawn the given number of missles from a *
|
||
* table of offsets. *
|
||
* *
|
||
* Offsets are OPARTSXY from the head of the Multiparter. *
|
||
* *
|
||
* AARG+,L = Offset table. *
|
||
* AARG+,W = Number of offsets (max missles allowed). *
|
||
* AARG+,W = Minimum missles to spawn. *
|
||
* *
|
||
**************************************************************************
|
||
A_SPAWN_N_MISSLES
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A5 ;Get the offset table
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A4 ;And the offset count
|
||
CALLA GETAFARG_WORD
|
||
MOVE A0,A1
|
||
MOVE A4,A0
|
||
CALLA RANGERND ;A little randy action
|
||
MOVE A0,A6 ;And the missle count
|
||
|
||
MOVK 10,A2 ;Maximum tries
|
||
|
||
CLR A7 ;This is our random marker
|
||
|
||
CLRB *A8(OMISSLES_FIRED) ;Clear the missles fired counter
|
||
|
||
ASTM_RAND_LOOP
|
||
MOVE A4,A0
|
||
CALLA RAND0
|
||
BTST A0,A7 ;Have we picked this already?
|
||
JRZ ASTM_LAUNCH_IT ;BR = No, use it
|
||
DSJS A2,ASTM_RAND_LOOP ;Try again if we're allowed
|
||
|
||
MOVE A4,A14 ;We've exhausted all tries
|
||
CLR A0 ;Let's just step through the list
|
||
ASTM_DEFAULT_LOOP
|
||
BTST A0,A7 ;Taken?
|
||
JRZ ASTM_LAUNCH_IT ;BR = No, use it
|
||
INC A0 ;Get next
|
||
DSJS A14,ASTM_DEFAULT_LOOP
|
||
RETS ;No offsets left, so bail
|
||
|
||
ASTM_LAUNCH_IT
|
||
BSET A0,A7 ;Mark this as taken
|
||
SLL 5,A0
|
||
ADD A5,A0
|
||
MOVE *A0,A3,L ;Get the offset
|
||
CALLR SPAWN_MISSLE ;DooDoo brown
|
||
DSJ A6,ASTM_RAND_LOOP
|
||
|
||
RETS ;We've finished all of our work
|
||
|
||
**************************************************************************
|
||
* *
|
||
* SPAWN_MISSLE *
|
||
* *
|
||
* Spawn a baby missle, to become part of the multi-parter desk. *
|
||
* OPROJECT_PARENT set to A8. *
|
||
* *
|
||
* A3 = [Y,X] offset *
|
||
* A8 = Ptr to object firing missle *
|
||
* *
|
||
* Returns: *
|
||
* Z = No missle spawned *
|
||
* NZ = Missle spawned successfully *
|
||
* *
|
||
**************************************************************************
|
||
SPAWN_MISSLE
|
||
MMTM SP,A0,A1,A2,A3,A7,A8
|
||
PUSH B0
|
||
|
||
MOVI MISSLE_INIT,B0
|
||
|
||
CALLA EASYMAKE
|
||
JRZ SM_X ;No objects available
|
||
|
||
MOVE *A8(OCTRL),A7,W ;Adjust offset if necessary
|
||
BTST B_FLIPH,A7
|
||
JRZ SM_CHECKV
|
||
NEGX A3
|
||
SM_CHECKV
|
||
BTST B_FLIPV,A7
|
||
JRZ SM_NOV ;BR=NO FLIP ADJUSTMENT
|
||
NEGY A3
|
||
SM_NOV
|
||
|
||
MOVE A3,*A0(OPARTSXY),L ;Just to position us
|
||
|
||
ANDI M_FLIPH|M_FLIPV,A7 ;ISOLATE FLIP BITS ONLY
|
||
MOVE *A0(OCTRL),A14,W
|
||
OR A14,A7 ;Match flip to spawing object
|
||
MOVE A7,*A0(OCTRL),W
|
||
|
||
MOVE A8,*A0(OPROJECT_PARENT),L ;Tell us our roots
|
||
|
||
MOVB *A8(OZOFF),A14
|
||
SUBK 2,A14
|
||
MOVB A14,*A0(OZOFF) ;Set us just in front of our buddy
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
|
||
CALLA GET_HEAD_PART ;Use the head part as a good source
|
||
|
||
MOVE *A8(OZVAL),A3,L
|
||
|
||
CALLA SETOFFPU
|
||
|
||
CALLA INSPART
|
||
|
||
CALLA INSOBJ
|
||
|
||
MOVE A0,A0 ;Set flag for success
|
||
SM_X
|
||
PULL B0
|
||
MMFM SP,A0,A1,A2,A3,A7,A8
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_MISSLE *
|
||
* *
|
||
* Create function for desk's missles *
|
||
* *
|
||
* A0 = ptr to un-inserted missle object *
|
||
* *
|
||
**************************************************************************
|
||
C_MISSLE
|
||
CLR A14
|
||
MOVB A14,*A0(OCHEWEDROCKET)
|
||
MOVIM 0101H,*A0(OCONST),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SELECT_JOSH_IDLE_TIME *
|
||
* *
|
||
* Anim Func to select idle time for the Josh. *
|
||
* Time is placed in the AnimSLP field of the Josh object. *
|
||
* *
|
||
**************************************************************************
|
||
A_SELECT_JOSH_IDLE_TIME
|
||
MOVK 1,A0
|
||
MOVI 60,A1
|
||
CALLA RANGERND
|
||
MOVB A0,*A8(OJOSH_IDLE)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_JOSH_DECISION *
|
||
* *
|
||
* Anim Func to make decisions for Josh. *
|
||
* *
|
||
* AARG+,W = Number of animation we are coming from. *
|
||
* *
|
||
**************************************************************************
|
||
A_JOSH_DECISION
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE A0,A7 ;Head-part stays in A7 for this func
|
||
|
||
CALLA GETAFARG_WORD
|
||
MOVB A0,*A8(OLASTANUM) ;Store where we just came from
|
||
JRZ AJD_RETURN_FROM_IDLE ;BR = We just returned from idle
|
||
|
||
CLRB *A8(OJOSH_ACTION) ;Clear the action flag
|
||
AJD_DO_IDLE
|
||
MOVI ANIM_JOSH_IDLE,A1 ;and run the idle sequence before
|
||
JAUC SetAnim ;we continue.
|
||
|
||
AJD_RETURN_FROM_IDLE
|
||
|
||
*Check to see if it's time to talk at the player
|
||
MOVB *A8(OTALK_FLAG),A1
|
||
JRZ AJD_NO_TALK ;BR = No talking now
|
||
|
||
SUBK SNUMS_UNDER_DOME,A1
|
||
SLL 5,A1
|
||
ADDI JOSH_VOCALS,A1
|
||
|
||
MOVE *A1,A1,L ;Grab the proper script
|
||
|
||
MOVIM 450,*A7(OTALK_WAIT),W ;Make Josh wait before casual conversation
|
||
|
||
CLRB *A8(OTALK_FLAG)
|
||
|
||
JAUC SetAnim
|
||
|
||
AJD_NO_TALK
|
||
|
||
*Check to see if we should do some action
|
||
MOVB *A8(OJOSH_ACTION),A1 ;Are we ready for action?
|
||
JRZ AJD_NO_ACTION
|
||
CMPK ANUM_STEER_L,A1 ;Are we currently steering?
|
||
JREQ AJD_NO_STEER ;BR = Yes, then don't do it again
|
||
CMPK ANUM_STEER_R,A1
|
||
JREQ AJD_NO_STEER ;BR = Yes, then don't do it again
|
||
|
||
AJD_LOAD_ACTION
|
||
SLL 5,A1
|
||
ADDI JOSH_ACTIONS,A1
|
||
MOVE *A1,A1,L
|
||
JAUC SetAnim
|
||
|
||
AJD_NO_ACTION
|
||
*Check if we should steer the craft
|
||
MOVB *A7(OXBURN),A14 ;Are we firing our jets?
|
||
CMPK 5,A14 ;Is it worth the effort?
|
||
JRLS AJD_NO_STEER ;BR = No
|
||
MOVB A14,*A8(OJOSH_IDLE) ;This is the steer time
|
||
MOVE *A7(OXACCEL),A14 ;Base our direction on the accel
|
||
JRN AJD_STEER_LEFT
|
||
|
||
MOVK ANUM_STEER_R,A1 ;Steer us to the right
|
||
JRUC AJD_DO_STEER
|
||
|
||
AJD_STEER_LEFT
|
||
MOVK ANUM_STEER_L,A1 ;Steer us to the left
|
||
AJD_DO_STEER
|
||
MOVB A1,*A8(OJOSH_ACTION)
|
||
JRUC AJD_LOAD_ACTION
|
||
|
||
AJD_NO_STEER
|
||
MOVB *A8(OJOSH_IDLE),A14
|
||
DEC A14
|
||
MOVB A14,*A8(OJOSH_IDLE)
|
||
JRZ AJD_IDLE_DONE
|
||
|
||
RETS
|
||
|
||
AJD_IDLE_DONE
|
||
|
||
MOVE *A7(OTALK_WAIT),A14 ;Can we talk now?
|
||
JRNZ AJD_IDLE_IT_IS ;BR = No, just idle
|
||
|
||
MOVB *A7(OFDAM_GOING),A14 ;No random babbling during big damage
|
||
JRNZ AJD_IDLE_IT_IS
|
||
|
||
MOVK 8,A5
|
||
MOVE *A8(OBABBLE_BITS),A6,W
|
||
|
||
AJD_TRY_BABBLE_AGAIN
|
||
MOVK NUM_BABBLINGS,A0 ;Do a little babbling
|
||
CALLA RAND0
|
||
|
||
BTST A0,A6 ;Have we babbled this yet?
|
||
JRZ AJD_BABBLE_OK ;BR = No
|
||
|
||
DSJS A5,AJD_TRY_BABBLE_AGAIN
|
||
*Here we have failed to randomly babble, we'll just select
|
||
MOVK NUM_BABBLINGS,A5
|
||
CLR A0 ;Walk down babble list until we get one
|
||
AJD_WALK_BABBLE
|
||
BTST A0,A6 ;Is this a good one?
|
||
JRZ AJD_BABBLE_OK ;BR = Yes, then use it
|
||
INC A0 ;Next
|
||
DSJS A5,AJD_WALK_BABBLE
|
||
JRUC AJD_IDLE_IT_IS ;BR = Error, no babbles left
|
||
|
||
AJD_BABBLE_OK
|
||
BSET A0,A6 ;Flag this as babbled
|
||
|
||
SLL 32-NUM_BABBLINGS,A6
|
||
SRL 32-NUM_BABBLINGS,A6 ;Strip the high stuff, if there is any
|
||
CMPI ALL_BABBLE_BITS,A6 ;Is that all of the phrases?
|
||
JRNE AJD_STORE_BABBLE ;BR = No
|
||
|
||
CLR A6 ;Reset babble counter
|
||
|
||
AJD_STORE_BABBLE
|
||
MOVE A6,*A8(OBABBLE_BITS),W
|
||
|
||
SLL 3,A0
|
||
ADDI BABBLE_TABLE,A0
|
||
MOVB *A0,A6
|
||
MOVB A6,*A8(OTALK_FLAG)
|
||
|
||
AJD_IDLE_IT_IS
|
||
JRUC AJD_DO_IDLE
|
||
|
||
|
||
NUM_BABBLINGS .EQU 6
|
||
ALL_BABBLE_BITS .EQU 3FH ;Must equal (2^NUM_BABBLINGS)-1
|
||
|
||
BABBLE_TABLE
|
||
.BYTE SNUM_GAI_JIN, SNUM_BLUE_EYE, SNUM_SUPERIOR, SNUM_LAST_LAUGH
|
||
.BYTE SNUM_GIMME, SNUM_NEW_ORDER
|
||
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_STEER_CHECK *
|
||
* *
|
||
* Anim func to check if we should abort the steer at this *
|
||
* point. *
|
||
* *
|
||
* A8 = Ptr to Josh *
|
||
* AARG+,L = Animation jump if we should bail *
|
||
* *
|
||
**************************************************************************
|
||
A_STEER_CHECK
|
||
MOVB *A8(OJOSH_IDLE),A14
|
||
SUBK 6,A14
|
||
JRNN ASC_FLOOR
|
||
CLR A14
|
||
ASC_FLOOR
|
||
MOVB A14,*A8(OJOSH_IDLE)
|
||
JAZ SetAnim_AFARG
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DEC_STEER_TIME *
|
||
* *
|
||
* Anim func to decrement the current steering timer. *
|
||
* Checks to see if we have another action to do. If so, *
|
||
* then fall through. *
|
||
* *
|
||
* A8 = Ptr to Josh *
|
||
* AARG+,W = Action number we are checking *
|
||
* AARG+,L = Animation branch if we are NOT done *
|
||
* *
|
||
**************************************************************************
|
||
A_DEC_STEER_TIME
|
||
MOVB *A8(OJOSH_IDLE),A14
|
||
DEC A14
|
||
MOVB A14,*A8(OJOSH_IDLE)
|
||
JRZ ADST_X
|
||
|
||
CALLA GETAFARG_WORD
|
||
MOVB *A8(OJOSH_ACTION),A14 ;Get action Josh should be doing
|
||
CMP A0,A14 ;Is this the same action we are doing?
|
||
JRNE ADST_X ;BR = No, let's fall through to suck it up
|
||
|
||
JAUC SetAnim_AFARG ;Loop the animation
|
||
ADST_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_SHOULDER *
|
||
* *
|
||
* Anim func to blow a shoulder piece. *
|
||
* *
|
||
* A8 = Ptr to shoulder piece *
|
||
* *
|
||
**************************************************************************
|
||
A_BLOW_SHOULDER
|
||
MOVI 80000H,A1
|
||
MOVE A1,A2
|
||
MOVI -80000H,A3
|
||
MOVE A3,A4
|
||
MOVI SHOULDER_BLOW_INIT,B0
|
||
JRUC BLOW_DESK_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_TIT *
|
||
* *
|
||
* Anim func to blow a tit. *
|
||
* *
|
||
* A8 = Ptr to tit piece *
|
||
* *
|
||
**************************************************************************
|
||
A_BLOW_TIT
|
||
MOVI 80000H,A1
|
||
MOVE A1,A2
|
||
CLR A3
|
||
CLR A4
|
||
MOVI TIT_BLOW_INIT,B0
|
||
JRUC BLOW_DESK_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_EYE *
|
||
* *
|
||
* Anim func to blow a eye piece. *
|
||
* *
|
||
* A8 = Ptr to eye piece *
|
||
* *
|
||
**************************************************************************
|
||
A_BLOW_EYE
|
||
MOVI 80000H,A1
|
||
MOVE A1,A2
|
||
MOVI 80000H,A3
|
||
MOVE A3,A4
|
||
MOVI EYE_BLOW_INIT,B0
|
||
JRUC BLOW_DESK_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_DOME *
|
||
* *
|
||
* Anim func to blow the dome. *
|
||
* *
|
||
* A8 = Ptr to the dome. *
|
||
* *
|
||
**************************************************************************
|
||
A_BLOW_DOME
|
||
CLR A1
|
||
CLR A2
|
||
MOVI -80000H,A3
|
||
MOVE A3,A4
|
||
MOVI DOME_BLOW_INIT,B0
|
||
JRUC BLOW_DESK_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_FRONT *
|
||
* *
|
||
* Anim func to blow the front piece. *
|
||
* *
|
||
* A8 = Ptr to the front piece *
|
||
* *
|
||
**************************************************************************
|
||
A_BLOW_FRONT
|
||
CLR A1
|
||
CLR A2
|
||
MOVI 80000H,A3
|
||
MOVE A3,A4
|
||
MOVI FRONT_BLOW_INIT,B0
|
||
JRUC BLOW_DESK_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* BLOW_DESK_PART *
|
||
* *
|
||
* Anim func entrypoint to blow a part of the desk. *
|
||
* *
|
||
* A1 = MIN XVEL *
|
||
* A2 = MAX XVEL *
|
||
* A3 = MIN YVEL *
|
||
* A4 = MAX YVEL *
|
||
* B0 = Init table *
|
||
* *
|
||
* Note: trashes much register *
|
||
* *
|
||
**************************************************************************
|
||
BLOW_DESK_PART
|
||
MOVE A1,A5
|
||
CALLA EASYMAKE
|
||
JRZ BDP_X ;No objects available
|
||
MOVE A5,A1
|
||
|
||
MOVE *A8(OCTRL),A5,W
|
||
ANDI M_FLIPH|M_FLIPV,A5 ;ISOLATE FLIP BITS ONLY
|
||
MOVE *A0(OCTRL),A14,W
|
||
OR A14,A5 ;Match flip to spawing object
|
||
MOVE A5,*A0(OCTRL),W
|
||
|
||
MOVE A0,A6
|
||
|
||
MOVE A2,A0
|
||
CALLA RANGERND
|
||
BTST B_FLIPH,A5
|
||
JRNZ BDP_X_POS
|
||
NEG A0
|
||
BDP_X_POS
|
||
MOVE A0,*A6(OXVEL),L
|
||
|
||
MOVE A4,A0
|
||
MOVE A3,A1
|
||
CALLA RANGERND
|
||
MOVE A0,*A6(OYVEL),L
|
||
|
||
MOVE A6,A0
|
||
|
||
CALLA GET_HEAD_PART ;Use the head part as a good source
|
||
|
||
MOVE *A8(OXVAL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
MOVE *A8(OZVAL),A3,L
|
||
|
||
CALLA SETANIPU
|
||
|
||
CALLA INSOBJ
|
||
BDP_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_START_BLOWS *
|
||
* *
|
||
* Anim func to start all parts blowin' up *
|
||
* *
|
||
* A8 = Any master part of desk *
|
||
* *
|
||
**************************************************************************
|
||
A_START_BLOWS
|
||
MOVI NUM_SHOULDERL,A1
|
||
CALLA FINDPART
|
||
CALLA COLLSOFF
|
||
MOVI ANIM_SHOULDER_BLOW,A1
|
||
CALLA STRTANIM
|
||
MOVE *A0(OPARTS),A0,L
|
||
CALLA COLLSOFF
|
||
CALLA STRTANIM
|
||
|
||
MOVI NUM_EYEL,A1
|
||
CALLA FINDPART
|
||
CALLA COLLSOFF
|
||
MOVI ANIM_EYE_BLOW,A1
|
||
CALLA STRTANIM
|
||
MOVE *A0(OPARTS),A0,L
|
||
CALLA COLLSOFF
|
||
CALLA STRTANIM
|
||
|
||
MOVI NUM_FRONT,A1
|
||
CALLA FINDPART
|
||
CALLA COLLSOFF
|
||
MOVI ANIM_FRONT_BLOW,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVI NUM_DOME,A1
|
||
CALLA FINDPART
|
||
CALLA COLLSOFF
|
||
MOVI ANIM_DOME_BLOW,A1
|
||
CALLA STRTANIM
|
||
|
||
MOVI NUM_TITL,A1
|
||
CALLA FINDPART
|
||
CALLA COLLSOFF
|
||
MOVI ANIM_TIT_BLOW,A1
|
||
CALLA STRTANIM
|
||
MOVE *A0(OPARTS),A0,L
|
||
CALLA COLLSOFF
|
||
|
||
JAUC STRTANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_DESK_OFF *
|
||
* *
|
||
* Anim func to turn the whole desk off. *
|
||
* *
|
||
* A8 = ptr to any part *
|
||
* *
|
||
**************************************************************************
|
||
A_DESK_OFF
|
||
CALLA GET_HEAD_PART
|
||
JAUC OBJ_OFF_MULTI
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_BLOW_GAT *
|
||
* *
|
||
* Anim Func to blow the gatlin gun. *
|
||
* *
|
||
* A8 = Ptr to gat doing the blowing *
|
||
* *
|
||
**************************************************************************
|
||
A_BLOW_GAT
|
||
MOVI GAT_BLOW_INIT,B0
|
||
MOVI -50000H,A1
|
||
MOVI 50000H,A2
|
||
MOVI 20000H,A3
|
||
MOVI 60000H,A4
|
||
JAUC BLOW_PART
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SHAKE_FUNC *
|
||
* *
|
||
* Anim Func to give a little shake. *
|
||
* *
|
||
* A8 = Ptr to any part of a multi-parter *
|
||
* AARG+,L = Absolute maximum X & Y velocity *
|
||
* AARG+,W = Absolute maximum Z velocity *
|
||
* *
|
||
* Returns: *
|
||
* AnimSLP stuffed with amount to sleep *
|
||
* *
|
||
**************************************************************************
|
||
A_SHAKE_FUNC
|
||
CALLA GETAFARG_LONG
|
||
MOVE A0,A2
|
||
CALLA GETAFARG_WORD
|
||
|
||
MOVE A8,A1 ;Save the part ptr
|
||
CALLA GET_HEAD_PART ;Get the head part
|
||
|
||
MOVE A0,A0
|
||
JRZ ASF_SKIPZ
|
||
CALLA SRAND ;Signed Random Z velocity
|
||
MOVE A0,*A8(OZVEL),L
|
||
ASF_SKIPZ
|
||
MOVE A2,A0
|
||
JRZ ASF_SKIPXY
|
||
CALLA SRAND ;Signed Random X velocity
|
||
MOVE A0,*A8(OXVEL),L
|
||
|
||
MOVE A2,A0
|
||
CALLA SRAND ;Signed Random Y velocity
|
||
MOVE A0,*A8(OYVEL),L
|
||
ASF_SKIPXY
|
||
MOVK 1,A0 ;Select a random sleep time of 1 or 2
|
||
MOVB @RAND,A14
|
||
JRN ASS_STORE_SLEEP
|
||
ADDK 1,A0
|
||
ASS_STORE_SLEEP
|
||
MOVB A0,*A1(AnimSLP)
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_NOSCALE_NOSHAD *
|
||
* *
|
||
* Anim func to set the NOSCALE and NOSHADOW bits of an *
|
||
* object and delete it'shadow, if it has one. *
|
||
* *
|
||
* A8 = Ptr to object *
|
||
* *
|
||
**************************************************************************
|
||
A_NOSCALE_NOSHAD
|
||
ORIM M_NOSCALE|M_NOSHADOW,*A8(OFLAGS),W
|
||
MOVIM 1000100H,*A8(OSCALE),L
|
||
MOVE A8,A0
|
||
JAUC DELSHAD
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SCALE_SHAD *
|
||
* *
|
||
* Anim func to make an object scaleable and able to *
|
||
* have a shadow. *
|
||
* *
|
||
* A8 = Ptr to object *
|
||
* *
|
||
**************************************************************************
|
||
A_SCALE_SHAD
|
||
ANDNIM M_NOSCALE|M_NOSHADOW,*A8(OFLAGS),W
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_OBJ_OFF_SCALE_SHAD *
|
||
* *
|
||
* Anim func to make an object scaleable and turn it off. *
|
||
* *
|
||
* A8 = Ptr to object *
|
||
* *
|
||
**************************************************************************
|
||
A_OBJ_OFF_SCALE_SHAD
|
||
CALLA OBJ_OFF
|
||
JRUC A_SCALE_SHAD
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_SUB_SND *
|
||
* *
|
||
* Anim func to make a sound call and put out a subtitle. *
|
||
* *
|
||
* A8 = Any part of the desk *
|
||
* AARG+,W = Sound/Subtitle index *
|
||
* *
|
||
**************************************************************************
|
||
A_SUB_SND
|
||
CALLA GETAFARG_WORD
|
||
*
|
||
*Entrypoint:
|
||
* A0 = Sound/Subtitle index
|
||
*
|
||
A_SUB_SND_G
|
||
MOVE A0,A2
|
||
MOVE A0,A14
|
||
SLL 6,A2
|
||
SLL 5,A14
|
||
ADD A14,A2
|
||
ADDI TAB_SUBTITLE_SOUND,A2
|
||
|
||
MOVE *A2+,A0,L ;Get the sound
|
||
JRZ ASS_NO_SOUND ;BR = No subtitle for this sound
|
||
|
||
CALLA ONESND ;Fire off the speech
|
||
JRNZ ASS_NO_SOUND ;BR = No sound made
|
||
|
||
MOVE A0,A3
|
||
|
||
MOVI OID_INFOTEXT,A0
|
||
CALLA KILOBJ_ALL ;Kill any text
|
||
|
||
MOVK NUM_SEATR,A1
|
||
CALLA FINDPART ;Get the controller of all subtitles
|
||
JRNZ ASS_GOT_WATCHER
|
||
*This is a fucked up thang right here. Means Josh ain't connected to no
|
||
*desk, yet.
|
||
MOVI OID_DESK,A0
|
||
CALLA EXISTOBJ_ALL ;Is there a desk around?
|
||
JRZ ASS_TRY_FUCK ;BR = No, then no subtitles
|
||
|
||
MOVE A0,A8
|
||
MOVK NUM_SEATR,A1
|
||
CALLA FINDPART ;Get the controller once again
|
||
JRNZ ASS_GOT_WATCHER ;BR = Got it
|
||
|
||
*This is doubly, fucked. No Josh, no desk. Let's just start a process.
|
||
ASS_TRY_FUCK
|
||
MOVE *A2+,A9,L ;Get the current subtitle text
|
||
MOVE *A2+,A11,W ;Get the Y screen position
|
||
MOVE *A2+,A10,W ;Duration
|
||
JRUC ASS_DO_TITLE
|
||
|
||
ASS_GOT_WATCHER
|
||
MOVE *A2+,A9,L ;Get the current subtitle text
|
||
MOVE *A2+,A11,W ;Get the Y screen position
|
||
MOVE *A2+,A14,W ;Get the duration
|
||
|
||
MOVE A14,*A0(OSUB_DURATION) ;Stuff the duration
|
||
|
||
MOVE A3,*A0(OSUB_SND),L ;and the sound we're making
|
||
|
||
MOVI ANIM_SUBTITLE,A1
|
||
CALLA STRTANIM ;Start the subtitle watcher
|
||
|
||
CLR A10
|
||
|
||
ASS_DO_TITLE
|
||
; CREATE PID_IND,PROC_SUBTITLE
|
||
|
||
ASS_NO_SOUND
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_SUB *
|
||
* *
|
||
* Anim func to check the progress of our little sub-title *
|
||
* and go for the next, if need be. *
|
||
* *
|
||
* A8 = Ptr to object watching the sub-title *
|
||
* *
|
||
**************************************************************************
|
||
A_CHECK_SUB
|
||
MOVE *A8(OSUB_DURATION),A14,W
|
||
DEC A14 ;Click another off of the timer
|
||
MOVE A14,*A8(OSUB_DURATION),W
|
||
JRZ ACS_DONE ;BR = Your time is up
|
||
|
||
MOVE *A8(OSUB_SND),A0,L
|
||
CALLA IS_SOUND ;Are we still running the same sound?
|
||
JRZ ACS_X ;BR = Yes
|
||
|
||
ACS_DONE
|
||
MOVI OID_INFOTEXT,A0
|
||
CALLA KILOBJ_ALL ;Kill any text
|
||
|
||
JAUC PULL_ANIM ;And stop all
|
||
|
||
ACS_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* A_CHECK_FRONT_DEAD *
|
||
* *
|
||
* Anim func to check if front piece is supposed to be dead. *
|
||
* If it is, then take animation branch. *
|
||
* *
|
||
* A8 = Ptr to piece dependant on front *
|
||
* AARG+,L = Branch if front is dead *
|
||
* *
|
||
**************************************************************************
|
||
A_CHECK_FRONT_DEAD
|
||
MOVI NUM_FRONT,A1
|
||
CALLA FINDPART ;Find front piece
|
||
MOVE *A0(OFLAGS),A14,W
|
||
BTST B_DEAD,A14 ;Is it dead?
|
||
JRZ ACFD_X ;BR = No, then no branch
|
||
JAUC SetAnim_AFARG
|
||
ACFD_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* PROC_SUBTITLE *
|
||
* *
|
||
* Process to print a subtitle. *
|
||
* *
|
||
* A9 = Ptr to text to print *
|
||
* A10 = Duration, if 0 then someone else will handle it *
|
||
* A11 = Screen Y address *
|
||
* *
|
||
**************************************************************************
|
||
PROC_SUBTITLE
|
||
PUSHP A10
|
||
|
||
MOVE A9,A2 ;Save ptr to actual text
|
||
MOVE A11,A3 ;Save Y screen address
|
||
|
||
MOVI M_SUBTITLE,A8
|
||
CALLA LM_SETUP ;Setup a generic subtitle string
|
||
|
||
MOVE A2,A8 ;Drop in required text
|
||
SLL 16,A3
|
||
MOVY A3,A9 ;And put it at our Y
|
||
|
||
JSRP PRINTF
|
||
|
||
PULLP A10
|
||
MOVE A10,A10 ;Should we wait?
|
||
JAZ SUCIDE ;BR = No
|
||
|
||
SLEEPR A10 ;Wait around a bit
|
||
|
||
MOVI OID_INFOTEXT,A0
|
||
CALLA KILOBJ_ALL ;Kill any text
|
||
|
||
DIE
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Collision stuff - This is where we get really interactive *
|
||
* *
|
||
**************************************************************************
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DOME_GUNVECT *
|
||
* *
|
||
* Gun Vector for all the glass dome. *
|
||
* *
|
||
* A2 = Ptr to player hitting the dome. *
|
||
* A8 = Ptr to part *
|
||
* *
|
||
**************************************************************************
|
||
DOME_GUNVECT
|
||
SOUNDZ SND_DOME_HIT
|
||
JRUC DGV_FRAG_SPARK
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DESK_GUNVECT *
|
||
* *
|
||
* Gun Vector for all of Desk's parts. The part will flash *
|
||
* and increase in damage if necessary. *
|
||
* *
|
||
* A2 = Ptr to player hitting the Desk *
|
||
* A8 = Ptr to part *
|
||
* *
|
||
**************************************************************************
|
||
DESK_GUNVECT
|
||
MOVB *A8(O_BEING_DAMAGED),A14 ;Is this part currently under attack?
|
||
JRNZ DGV_X ;BR = Yes
|
||
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE A0,A7 ;Head-part stays in A7
|
||
|
||
MOVB *A8(OPARTID),A4 ;Keep PARTID here throughout
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_DEAD,A14 ;Is this guy dead?
|
||
JRNZ DGV_DEAD ;BR = Yes, then no flashing
|
||
|
||
CALLA OBJ_CONST ;Turn constant color on
|
||
MOVKB 4,*A8(OFLASHTIME)
|
||
|
||
CMPK NUM_FRONT,A4 ;Are we dealing with the front?
|
||
JRNE DGV_NOT_FRONT ;BR = No
|
||
|
||
MOVK NUM_MISSLE_DOOR,A1 ;We must fudge the front door
|
||
CALLA FINDPART ;since it's a seperate piece
|
||
|
||
; MOVE *A0(OCTRL),A14,W ; OLD WAY
|
||
; SLL 28,A14 ;Is the door even on?
|
||
; JRZ DGV_NOT_FRONT ;BR = No
|
||
|
||
move *a0(OFLAGS),a14 ; Use New NODISP Flag
|
||
btst B_NODISP,a14
|
||
JRNZ DGV_NOT_FRONT ;BR = No
|
||
|
||
CALLA OBJCONST ;Fire it up, boyee
|
||
MOVKB 4,*A0(OFLASHTIME)
|
||
|
||
DGV_NOT_FRONT
|
||
CALLR MAKE_METAL_SOUND
|
||
CALLR DGV_FRAG_SPARK
|
||
|
||
MOVI DESK_BULLET_HITS,A1
|
||
MOVI OBULLET_HITS,A3
|
||
CALLA HIT_ENEMY ;Enough hits to merit damage?
|
||
JRLO DGV_X ;BR = No
|
||
CLR A14
|
||
MOVE A14,*A8(OBULLET_HITS),L ;Clear count
|
||
|
||
CALLA ANY_BOMBS ;Are there any rockets out there?
|
||
JRZ DESK_MAJOR_HIT ;BR = No, then let bullets finish
|
||
|
||
DGV_X
|
||
RETS
|
||
|
||
|
||
*Part is dead, just spark it
|
||
*A4 = OPARTID
|
||
*A7 = Ptr to master-part
|
||
DGV_DEAD
|
||
CALLR MAKE_METAL_SOUND
|
||
JRUC DGV_FRAG_SPARK
|
||
|
||
|
||
*
|
||
*Make the spark for the metal gunvector
|
||
*A2 = Ptr to player hitting
|
||
*A8 = Ptr to part being hit
|
||
*
|
||
DGV_FRAG_SPARK
|
||
PUSH B0
|
||
MOVI INIT_SPARK,B0
|
||
CALLA PASTE_ON_DAMAGE
|
||
PULLQ B0
|
||
RETS
|
||
|
||
; MMTM SP,A0,A3,A4
|
||
; MMTM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
|
||
|
||
; MOVI FRAG_SPARK,B14
|
||
|
||
; MOVI [1,0],A0
|
||
; MOVI 10H,A3
|
||
; CLR A4
|
||
|
||
; CALLA PreFrag_Gun
|
||
; CALLA Fragger
|
||
; MMFM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
|
||
; MMFM SP,A0,A3,A4
|
||
; RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MAKE_METAL_SOUND *
|
||
* *
|
||
* Make the proper sound for the part that was hit. *
|
||
* *
|
||
* A4 = OPARTID *
|
||
* *
|
||
**************************************************************************
|
||
MAKE_METAL_SOUND
|
||
CMPK NUM_FRONT,A4
|
||
JRHI MMS_X
|
||
|
||
PUSH A0
|
||
|
||
MOVE A4,A0
|
||
DEC A0
|
||
SRL 1,A0
|
||
SLL 5,A0
|
||
ADDI TAB_METAL_SOUNDS,A0
|
||
MOVE *A0,A0,L
|
||
CALLA ONESND_Z
|
||
|
||
PULLQ A0
|
||
|
||
MMS_X
|
||
RETS
|
||
|
||
|
||
*
|
||
*Collision vector table for the desk
|
||
*
|
||
DESK_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,DESK_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,DESK_EXPLOSION_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DESK_ROCKET_COLL - Collision vector with Player rocket bomb. *
|
||
* A0 = Ptr to rocket object *
|
||
* A8 = Ptr to Desk part *
|
||
* *
|
||
**************************************************************************
|
||
DESK_ROCKET_COLL
|
||
MOVB *A8(OROCKETHIT),A14 ;Should we set the flag again?
|
||
JRNZ MRC_X ;BR = No, it is already set
|
||
MOVE *A0(RL_INTENDED_OBJ),A14,L
|
||
CMP A14,A8 ;Is this the object we are after?
|
||
JRNE MRC_X ;BR = No
|
||
MOVK 1,A14
|
||
MOVB A14,*A8(OROCKETHIT) ;Flag the rocket attack
|
||
MOVB A14,*A8(OCHEWEDROCKET) ;Flag for the explosion
|
||
MRC_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DESK_EXPLOSION_COLL - Collision vector for Player explosion against *
|
||
* generic Desk part. *
|
||
* A0 = Ptr to explosion object *
|
||
* A8 = Ptr to Desk part *
|
||
* *
|
||
**************************************************************************
|
||
DESK_EXPLOSION_COLL
|
||
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
|
||
JRZ DEC_X ;BR = No, so bail
|
||
|
||
CLR A14
|
||
MOVB A14,*A8(OCHEWEDROCKET) ;Clear the rocket flag
|
||
|
||
MOVE A0,A5 ;Visiting explosion goes here
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1 ;Universe to World Z
|
||
|
||
CMPI DESK_ZMAX-100H,A1 ;Should we fuck him around?
|
||
JRGT DEC_NO_BLOW_BACK ;BR = No, too far back
|
||
JRUC DEC_JERK_HIM ;Fuck him around
|
||
|
||
**************************************************************************
|
||
* *
|
||
* DESK_CENTER_EXP_COLL - Collision vector for Player explosion against *
|
||
* Desk's center. *
|
||
* A0 = Ptr to explosion object *
|
||
* A8 = Ptr to Desk part *
|
||
* *
|
||
**************************************************************************
|
||
DESK_CENTER_EXP_COLL
|
||
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
|
||
JRZ DEC_X ;BR = No, so bail
|
||
|
||
CLR A14
|
||
MOVB A14,*A8(OCHEWEDROCKET) ;Clear the rocket flag
|
||
|
||
MOVE A0,A5 ;Visiting explosion goes here
|
||
|
||
MOVE *A8(OZVAL),A1,L
|
||
MOVE @ZBASE,A14,L
|
||
SUB A14,A1 ;Universe to World Z
|
||
|
||
CMPI DESK_ZMAX-100H,A1 ;Should we blast him back?
|
||
JRGT DEC_NO_BLOW_BACK ;BR = No, not close enough.
|
||
|
||
CALLA GET_HEAD_PART_A0 ;Check this velocity stuff on head
|
||
|
||
MOVB *A0(OCENTER_FLAG),A14 ;Are we currently supposed to be centered?
|
||
JRNZ DEC_JERK_HIM ;BR = Yes, then don't go back
|
||
|
||
MOVB *A0(ONOSET_ZVEL),A14 ;Are we currently blowing back?
|
||
JRNZ DEC_JERK_HIM ;BR = Yes, then don't do it again
|
||
|
||
MOVE *A0(OZVEL),A14,L ;Determine how much time to blowback
|
||
JRGE DEC_FULL_BLOWBACK ;BR = Set full time
|
||
SRA 8,A14
|
||
ADDI 50,A14 ;Calculate accordingly
|
||
CMPK 5,A14 ;Too small?
|
||
JRGE DEC_SET_ZBLOW_TIME ;BR = no, it'll do
|
||
MOVK 5,A14 ;Min ticks
|
||
JRUC DEC_SET_ZBLOW_TIME
|
||
DEC_FULL_BLOWBACK
|
||
MOVI 50,A14 ;Max ticks
|
||
DEC_SET_ZBLOW_TIME
|
||
MOVB A14,*A0(OCLRNOSETZVEL)
|
||
MOVB A14,*A0(ONOSET_ZVEL)
|
||
|
||
ADDIM 0C00H,*A0(OZVEL),L ;Back to mama punk!
|
||
|
||
MOVE A0,A1
|
||
|
||
MOVI 40000H,A0
|
||
CALLA SRAND
|
||
ADDRM A0,*A1(OXVEL),L
|
||
|
||
MOVI 10000H,A0
|
||
CALLA SRAND
|
||
ADDRM A0,*A1(OYVEL),L
|
||
|
||
JRUC DEC_NO_BLOW_BACK
|
||
|
||
*Just give the rig a jolt.
|
||
*A5 = Ptr to explosion object
|
||
DEC_JERK_HIM
|
||
MOVK NUM_SMALL_SHAKE,A1
|
||
CALLA FINDPART ;The foot rest will shake us
|
||
JRZ DEC_NO_BLOW_BACK ;BR = Couldn't find the part
|
||
MOVI ANIM_SMALL_SHAKE,A1 ;Start a shaker anim
|
||
CALLA STRTANIM
|
||
|
||
DEC_NO_BLOW_BACK
|
||
MOVE *A5(OID),A0,W ;We can find out who did this
|
||
CALLA POID_TO_PDATA ;by getting the Player's data area.
|
||
|
||
MOVE *A8(OFLAGS),A14,W
|
||
BTST B_DEAD,A14 ;Is this guy dead?
|
||
JRZ DEC_NORMAL_EXP ;BR = No, you may continue
|
||
|
||
*Desk part is dead, we just wanted to jerk him
|
||
MOVKB 10,*A8(OCLRROCKETHIT) ;Time 'til we reset for the next
|
||
MOVE A2,*A8(OPLAYER),L ;Hang on to this address
|
||
JRUC DEC_X
|
||
|
||
DEC_NORMAL_EXP
|
||
CALLA OBJ_CONST ;Turn constant color on
|
||
MOVKB 6,*A8(OFLASHTIME)
|
||
|
||
*
|
||
*Entry point for somebody to score a major hit on Desk.
|
||
*A2 = Ptr to player doing the hitting
|
||
*A5 = 0
|
||
*A8 = Ptr to Desk part being hit
|
||
*
|
||
DESK_MAJOR_HIT
|
||
CALLA GET_HEAD_PART_A0
|
||
MOVE A0,A7 ;Head-part stays in A7
|
||
|
||
MOVB *A7(OFDAM_GOING),A14 ;Is a Final damage going?
|
||
JRNZ DEC_DONE ;BR = Right, then no one else goes
|
||
|
||
MOVB *A8(OPARTID),A4 ;Get the I.D. of this part
|
||
MOVB *A7(OMISSLE_VULNER),A14 ;Are the missle launchers vulnerable?
|
||
JRNZ DEC_DO_HIT ;BR = Yes
|
||
*Missle launcher open check
|
||
CMPK NUM_SHOULDERL,A4 ;Did we hit the left missle launcher?
|
||
JREQ DEC_SHOULDER_MISSLE ;BR = Yes
|
||
CMPK NUM_SHOULDERR,A4 ;Did we hit the right missle launcher?
|
||
JREQ DEC_SHOULDER_MISSLE ;BR = Yes
|
||
CMPK NUM_FRONT,A4 ;Did we hit the front missle launcher?
|
||
JRNE DEC_DO_HIT ;BR = No
|
||
MOVB *A7(OFIRING_MISSLE),A14 ;Special case for the front missle guy
|
||
CMPK NUM_MISSLE_DOOR,A14
|
||
JRNE DEC_NO_KILL
|
||
JRUC DEC_DO_HIT
|
||
DEC_SHOULDER_MISSLE
|
||
MOVB *A7(OFIRING_MISSLE),A14
|
||
CMP A4,A14 ;Is this missle launcher open?
|
||
JRNE DEC_NO_KILL ;BR = No, then no damage is to occur
|
||
DEC_DO_HIT
|
||
MOVK 6,A1
|
||
; MOVK 10,A1
|
||
MOVI OHITS,A3
|
||
CALLA HIT_ENEMY
|
||
JRLO DEC_NO_KILL
|
||
|
||
CLR A14
|
||
MOVE A14,*A8(OHITS),L
|
||
|
||
MOVB *A8(ODAMAGE),A14
|
||
INC A14
|
||
CMPK MAX_DESK_DAMAGE_LEVEL,A14 ;Is the damage maxed out?
|
||
JRHI DEC_DONE ;BR = Yes, no more
|
||
|
||
*We can damage our little hearts out!
|
||
*A4 = OPARTID for this part
|
||
*A7 = Ptr to head-part
|
||
DEC_DAMAGE
|
||
MOVB A14,*A8(ODAMAGE)
|
||
|
||
MOVE A4,A14
|
||
DEC A14
|
||
SLL 5,A14
|
||
ADDI FINAL_ANIM_TABLE,A14
|
||
MOVE *A14,A1,L ;Get the final animation for this part
|
||
JRZ DEC_NO_DAMAGE
|
||
|
||
INCB *A7(OPARTS_LOST) ;Chalk another part gone
|
||
|
||
MOVKB 2,*A7(OCENTER_FLAG)
|
||
MOVIB 120,*A7(OCLRCENTER)
|
||
|
||
MOVKB 1,*A7(OFDAM_GOING)
|
||
|
||
CALLA STRT_ANIM ;and start it animating
|
||
|
||
ORIM M_DEAD,*A8(OFLAGS),W
|
||
; MOVIM DUMCOLL,*A8(OCVECT),L ;No more collisions for you
|
||
; MOVIM DUMRETS,*A8(OGUNVECT),L ;No more bullets either
|
||
|
||
INCB *A8(ODAMAGE) ;Get that Damage level past the point
|
||
|
||
MOVI 5150,A1
|
||
CALLA SCORE ;Killing is the best for points
|
||
|
||
CMPK NUM_GATL,A4 ;Gats don't need grunt sound
|
||
JREQ DEC_NO_HGRUNT
|
||
CMPK NUM_GATR,A4
|
||
JREQ DEC_NO_HGRUNT
|
||
|
||
RANDENT TAB_HGRUNT_SOUNDS,NUM_HGRUNT_SNDS,5,L
|
||
CALLA ONESND
|
||
|
||
DEC_NO_HGRUNT
|
||
|
||
MOVK NUM_BIG_SHAKE,A1
|
||
CALLA FINDPART ;The foot rest will shake ust
|
||
JRZ DEC_DONE ;BR = Couldn't find the part
|
||
MOVI ANIM_BIG_SHAKE,A1 ;Start a shaker anim
|
||
CALLA STRTANIM
|
||
|
||
JRUC DEC_DONE
|
||
|
||
DEC_NO_DAMAGE
|
||
|
||
*
|
||
*A4 = OPARTID for this part
|
||
*A5 = Ptr to explosion object, 0 = No explosion object
|
||
*
|
||
DEC_NO_KILL
|
||
; MOVB *A8(OPARTID),A6
|
||
; CMPK NUM_HEAD,A6
|
||
; JRNE MEC_CHECK_ARM
|
||
|
||
DEC_CHECK_ARM
|
||
CMPK NUM_GATL,A4
|
||
JREQ DEC_WHACK_GUN
|
||
CMPK NUM_GATR,A4
|
||
JRNE DEC_BODY_HIT
|
||
|
||
*Make gun flip to the side
|
||
DEC_WHACK_GUN
|
||
MOVI ANIM_GAT_WHACK,A1
|
||
CALLA STRT_ANIM ;Start the animation happening
|
||
|
||
*Make a random hit sound when taking a rocket
|
||
DEC_BODY_HIT
|
||
MOVI 256,A0
|
||
CALLA RANDPER
|
||
JRNC DEC_DONE
|
||
|
||
RANDENT TAB_JGRUNT_SOUNDS,NUM_JGRUNT_SNDS,5,L
|
||
CALLA ONESND
|
||
|
||
DEC_DONE
|
||
MOVKB 25,*A8(OCLRROCKETHIT) ;Time 'til we reset for the next
|
||
|
||
MOVE A2,*A8(OPLAYER),L ;Hang on to this address
|
||
|
||
MOVI 100,A1
|
||
CALLA SCORE ;Explosions are always good for points
|
||
|
||
DEC_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MISSLE_GUNVECT *
|
||
* *
|
||
* Gun vector for desk's missle. *
|
||
* *
|
||
* A2 = Ptr to player shooting the missle. *
|
||
* A8 = Ptr to the missle object. *
|
||
* *
|
||
**************************************************************************
|
||
MISSLE_GUNVECT
|
||
CALLA COLLS_OFF
|
||
CALLA CLR_VEL
|
||
MOVE *A8(OPART1),A14,L ;Is it still attached to the desk?
|
||
JRZ MGV_FLYING ;BR = No
|
||
CALLA PULL_PART ;Pull it
|
||
MGV_FLYING
|
||
MOVI ANIM_MISSLE_EXPLODE,A1
|
||
CALLA STRT_ANIM
|
||
MOVI 100,A1
|
||
JAUC SCORE ;Score points for neutralizing
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MISSLE_CVECT *
|
||
* *
|
||
* Collision vector table for the missle. *
|
||
* *
|
||
**************************************************************************
|
||
MISSLE_CVECT
|
||
WWL OID_PROCKET,~MASK_PLAYER,PROJECTILE_ROCKET_COLL
|
||
WWL OID_PEXPLOSION,~MASK_PLAYER,MISSLE_EXPLOSION_COLL
|
||
WL 0,DUMCRETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* MISSLE_EXPLOSION_COLL *
|
||
* *
|
||
* Explosion service for missle *
|
||
* *
|
||
* A0 = ptr to explosion object *
|
||
* A8 = ptr to missle object *
|
||
* *
|
||
**************************************************************************
|
||
MISSLE_EXPLOSION_COLL
|
||
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
|
||
JRZ MEC_X ;BR = No, so bail
|
||
|
||
MOVE *A0(OID),A0,W ;We can find out who did this
|
||
CALLA POID_TO_PDATA ;by getting the Player's data area.
|
||
|
||
JRUC MISSLE_GUNVECT
|
||
|
||
MEC_X
|
||
RETS
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Sounds for The Desk *
|
||
* *
|
||
**************************************************************************
|
||
SND_TRANSFORM
|
||
.WORD 0F344H,115,0838AH,0 ;Mech desk transforms
|
||
SND_PREASE
|
||
.WORD 0E342H,179,0826FH,0 ;"Prease to enjoy, new Japan technology"
|
||
SND_COME_IN
|
||
.WORD 0E342H,39,0826CH,0826CH,0 ;"Come in, Come in"
|
||
SND_SO_NICE
|
||
.WORD 0E342H,59,0826BH,0 ;"So nice to see you"
|
||
SND_NIGHTMARE
|
||
.WORD 0E349H,143,08280H,0 ;"Prease to enjoy, your worst nightmare"
|
||
SND_GET_READY
|
||
.WORD 0E342H,64,084CDH,0 ;Short laugh
|
||
SND_GAI_JIN
|
||
.WORD 0E342H,104,084C9H,0 ;"You cannot destroy me"
|
||
SND_BLUE_EYE
|
||
.WORD 0E342H,65,084caH,0 ;"Impudent Youth"
|
||
SND_SUPERIOR
|
||
.WORD 0E342H,122,084c8H,0 ;"Submit to the New Order"
|
||
SND_LAST_LAUGH
|
||
.WORD 0E342H,79,084c6H,0 ;"You have no choice"
|
||
SND_GIMME
|
||
.WORD 0E342H,64,084cbH,0 ;"Go to your doom!"
|
||
SND_NEW_ORDER
|
||
.WORD 0E342H,85,084C7H,0 ;"You have no future"
|
||
SND_BANZAI
|
||
.WORD 0E342H,122,084c8H,0 ;"Submit to the New Order"
|
||
SND_DESK_DESTROY
|
||
.WORD 0E345H,92,08264H,0 ;"You've destroyed my desk!"
|
||
SND_SORRY
|
||
.WORD 0E342H,96,084ccH,0 ;Laugh 0
|
||
SND_NOOO
|
||
.WORD 0E345H,157,084c3H,0 ;"You have destroyed New Order prop."
|
||
SND_BEAST
|
||
.WORD 0E344H,26,084ceH,0 ;effort grunt #0
|
||
SND_FORGIVE
|
||
.WORD 0E344H,31,084d1H,0 ;damage grunt #0
|
||
SND_USELESS
|
||
.WORD 0E344H,33,084d2H,0 ;damage grunt #1
|
||
SND_HURT_DESK
|
||
.WORD 0E344H,29,084d3H,0 ;damage grunt #2
|
||
SND_PISSED
|
||
.WORD 0E344H,47,08871H,0 ;Josh says this when you hit all missles
|
||
SND_COOOO_EEEEL
|
||
.WORD 0F1D1H,56,0886CH,0 ;"Coo-eeel"
|
||
|
||
SND_DESK_BATTLE
|
||
.WORD 0F0FDH,1,08003H,0 ;Battle the bat desk
|
||
|
||
TAB_METAL_SOUNDS
|
||
.LONG SND_METAL_TIT, SND_METAL_SHOULDER, SND_METAL_EYE
|
||
.LONG SND_METAL_GAT, SND_METAL_FRONT, SND_METAL_TIT
|
||
.LONG SND_METAL_TIT, SND_METAL_TIT, SND_METAL_TIT
|
||
|
||
SND_METAL_TIT
|
||
.WORD 0F302H,16,0A1DDH,0 ;Desk metal hit TIT
|
||
SND_METAL_FRONT
|
||
.WORD 0F302H,13,0A1E0H,0 ;Desk metal hit FRONT
|
||
SND_METAL_EYE
|
||
.WORD 0F302H,21,0A1E6H,0 ;Desk metal hit EYE
|
||
SND_METAL_GAT
|
||
.WORD 0F302H,44,0A194H,0 ;Desk metal hit GAT
|
||
SND_METAL_SHOULDER
|
||
.WORD 0F302H,24,0A1E3H,0 ;Desk metal hit SHOULDER
|
||
|
||
SND_DOME_HIT
|
||
.WORD 0F302H,46,0A32BH,0 ;Desk hit DOME
|
||
|
||
SND_DESK_GUN
|
||
.WORD 0E320H,10,0A108H,0 ;Jap boy fires upon your ass
|
||
SND_DOOR_OPEN
|
||
.WORD 0F340H,20,0A1F7H,0 ;Front missle door opening
|
||
SND_SHOULDER_SHORT
|
||
.WORD 0F340H,21,0A1FAH,0 ;Shoulder pops up, short
|
||
SND_SHOULDER_LONG
|
||
.WORD 0F340H,36,0A1FDH,0 ;Shoulder pops up, long
|
||
SND_SHLDR_SHORT_FINAL
|
||
.WORD 0F341H,21,0A1FAH,0 ;Shoulder pops up, short for final damage
|
||
SND_SHLDR_LONG_FINAL
|
||
.WORD 0F341H,36,0A1FDH,0 ;Shoulder pops up, long for final damage
|
||
SND_MISSLE_LAUNCH
|
||
.WORD 0F340H,93,0A3B0H,0 ;Missle launching
|
||
SND_MISSLE_EXPLODE
|
||
.WORD 0F341H,80,0A38DH,0 ;Missle blows up in mid-air
|
||
SND_GAT_WHACK
|
||
.WORD 0E341H,46,0A3B3H,0 ;Gat gets whacked
|
||
|
||
|
||
*Normal grunts, used randomly during battle
|
||
NUM_JGRUNT_SNDS .EQU 3
|
||
|
||
TAB_JGRUNT_SOUNDS
|
||
.LONG SND_JGRUNT1,SND_JGRUNT2,SND_JGRUNT3
|
||
|
||
SND_JGRUNT1
|
||
.WORD 0E342H,31,084d1H,0 ;Josh GRUNT #1
|
||
SND_JGRUNT2
|
||
.WORD 0E342H,33,084d2H,0 ;Josh GRUNT #2
|
||
SND_JGRUNT3
|
||
.WORD 0E342H,28,084d3H,0 ;Josh GRUNT #3
|
||
|
||
|
||
*High priority grunts, used for when a part explodes
|
||
NUM_HGRUNT_SNDS .EQU 3
|
||
|
||
TAB_HGRUNT_SOUNDS
|
||
.LONG SND_HGRUNT1,SND_HGRUNT2,SND_HGRUNT3
|
||
|
||
SND_HGRUNT1
|
||
.WORD 0E344H,31,084d1H,0 ;damage grunt #0
|
||
SND_HGRUNT2
|
||
.WORD 0E344H,33,084d2H,0 ;damage grunt #1
|
||
SND_HGRUNT3
|
||
.WORD 0E344H,29,084d3H,0 ;damage grunt #2
|
||
|
||
SND_FINAL_EXPLODE1
|
||
.WORD 0E148H,88,08303H,0 ;Final explosion sound, channel 1
|
||
SND_FINAL_EXPLODE2
|
||
.WORD 0E248H,40,0838FH,0 ;Final explosion sound, channel 2
|
||
SND_FINAL_EXPLODE3
|
||
.WORD 0E348H,88,08390H,0 ;Final explosion sound, channel 3
|
||
|
||
SND_FINAL_SCREAM
|
||
.WORD 0E349H,285,084d4H,0 ;Final scream sound, channel 3
|
||
|
||
|
||
NUM_DESK_PARTS .EQU 21 ;# of total parts that make up the desk
|
||
NUM_DESK_USED_PARTS .EQU 12 ;# of parts desk uses
|
||
|
||
NUM_COLL_PARTS .EQU 9 ;Number of parts to stuff with default collision stuff
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Subtitles *
|
||
* *
|
||
**************************************************************************
|
||
SNUM_COME_IN .EQU 0
|
||
SNUM_SO_NICE .EQU 1
|
||
SNUM_PREASE .EQU 2
|
||
SNUM_NIGHTMARE .EQU 3
|
||
SNUM_BANZAI .EQU 4
|
||
SNUM_GAI_JIN .EQU 5
|
||
SNUM_SUPERIOR .EQU 6
|
||
SNUM_BLUE_EYE .EQU 7
|
||
SNUM_LAST_LAUGH .EQU 8
|
||
SNUM_GIMME .EQU 9
|
||
SNUM_NEW_ORDER .EQU 10
|
||
SNUM_DESK_DESTROY .EQU 11
|
||
SNUM_SORRY .EQU 12
|
||
SNUM_NOOO .EQU 13
|
||
SNUM_BEAST .EQU 14
|
||
SNUM_FORGIVE .EQU 15
|
||
SNUM_USELESS .EQU 16
|
||
SNUM_HURT_DESK .EQU 17
|
||
SNUM_PISSED .EQU 18
|
||
|
||
SNUMS_UNDER_DOME .EQU 4 ;Start of SNUMS while under glass dome
|
||
|
||
TAB_SUBTITLE_SOUND
|
||
LLWW SND_COME_IN,M_COME_IN,180+SKYTOPOF,65
|
||
LLWW SND_SO_NICE,M_SO_NICE,180+SKYTOPOF,58
|
||
LLWW SND_PREASE,M_PLEASE,175+SKYTOPOF,175
|
||
LLWW SND_NIGHTMARE,M_NIGHTMARE,175+SKYTOPOF,143
|
||
LLWW SND_BANZAI,M_BANZAI,180+SKYTOPOF,60
|
||
LLWW SND_GAI_JIN,M_GAI_JIN,180+SKYTOPOF,71
|
||
LLWW SND_SUPERIOR,M_SUPERIOR,180+SKYTOPOF,100
|
||
LLWW SND_BLUE_EYE,M_BLUE_EYE,180+SKYTOPOF,52
|
||
LLWW SND_LAST_LAUGH,M_LAST_LAUGH,180+SKYTOPOF,83
|
||
LLWW SND_GIMME,M_GIMME,180+SKYTOPOF,101
|
||
LLWW SND_NEW_ORDER,M_NEW_ORDER,180+SKYTOPOF,126
|
||
LLWW SND_DESK_DESTROY,M_DESK_DESTROY,180+SKYTOPOF,92
|
||
LLWW SND_SORRY,M_SORRY,180+SKYTOPOF,37
|
||
LLWW SND_NOOO,M_NOOO,180+SKYTOPOF,60
|
||
LLWW SND_BEAST,M_BEAST,180+SKYTOPOF,43
|
||
LLWW SND_FORGIVE,M_FORGIVE,180+SKYTOPOF,62
|
||
LLWW SND_USELESS,M_USELESS,180+SKYTOPOF,30
|
||
LLWW SND_HURT_DESK,M_HURT_DESK,180+SKYTOPOF,71
|
||
LLWW SND_PISSED,M_PISSED,180+SKYTOPOF,50
|
||
|
||
|
||
*
|
||
* Common subtitle text header
|
||
*
|
||
M_SUBTITLE
|
||
MESS_MAC RD15FONT,2,197,180+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_INFOTEXT
|
||
|
||
|
||
M_COME_IN
|
||
.STRING "Come in! Come in!",0
|
||
.EVEN
|
||
M_SO_NICE
|
||
.STRING "So nice to see you.",0
|
||
.EVEN
|
||
M_PLEASE
|
||
.STRING "Please enjoy,\n"
|
||
.STRING "our new Japanese technology!",0
|
||
.EVEN
|
||
M_NIGHTMARE
|
||
.STRING "Please enjoy,\n"
|
||
.STRING "your Worst Nightmare!",0
|
||
.EVEN
|
||
M_BANZAI
|
||
.STRING "BANZAI!",0
|
||
.EVEN
|
||
M_GAI_JIN
|
||
.STRING "Death to Gai-Jin!",0
|
||
.EVEN
|
||
M_SUPERIOR
|
||
.STRING "We are superior!",0
|
||
.EVEN
|
||
M_BLUE_EYE
|
||
.STRING "Blue-eyed devil!",0
|
||
.EVEN
|
||
M_LAST_LAUGH
|
||
.STRING "I will have the last laugh!",0
|
||
.EVEN
|
||
M_GIMME
|
||
.STRING "I require your life!",0
|
||
.EVEN
|
||
M_NEW_ORDER
|
||
.STRING "The NEW ORDER wants YOU!",0
|
||
.EVEN
|
||
M_DESK_DESTROY
|
||
.STRING "You've destroyed my desk!",0
|
||
.EVEN
|
||
M_SORRY
|
||
.STRING "So sorry!",0
|
||
.EVEN
|
||
M_NOOO
|
||
.STRING "Noooooo!",0
|
||
.EVEN
|
||
M_BEAST
|
||
.STRING "You Beast!",0
|
||
.EVEN
|
||
M_FORGIVE
|
||
.STRING "This I cannot forgive!",0
|
||
.EVEN
|
||
M_USELESS
|
||
.STRING "A useless effort.",0
|
||
.EVEN
|
||
M_HURT_DESK
|
||
.STRING "You hurt my desk!",0
|
||
.EVEN
|
||
M_PISSED
|
||
.STRING "You Freak!",0
|
||
.EVEN
|
||
|
||
**************************************************************************
|
||
* *
|
||
* The desk animations and such *
|
||
* *
|
||
**************************************************************************
|
||
DESK_INIT
|
||
.byte NUM_DESK_PARTS, 0, 0, 4 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
|
||
.long DESK_p,DA_MECH_P,C_DAMGE_P,GLASS_p ;Palettes used
|
||
.word OID_DESK, OM_COLL
|
||
.LONG DUMCOLL
|
||
|
||
*
|
||
* .long IMG
|
||
* .word OCTRL, OFLAGS, OZOFF, OPTION_FLAGS
|
||
*
|
||
|
||
NUM_TITL .EQU 1
|
||
LWWWW C_DESK, DMAWNZ, 0, 0, OM_CFUNC ;XFORM1
|
||
.LONG C_DESK_PART_INIT ;LEFT TIT
|
||
|
||
LWWWW C_DESK, DMAWNZ|M_FLIPH, 0, 0, OM_CFUNC ;XFORM1f
|
||
.LONG C_DESK_PART_INIT ;RIGHT TIT
|
||
|
||
NUM_SHOULDERL .EQU 3
|
||
LWWWW TRANSFORM_A_2, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 6, OM_CFUNC ;XFORM2
|
||
.LONG C_DESK_PART_INIT ;LEFT SHOULDER
|
||
NUM_SHOULDERR .EQU 4
|
||
LWWWW TRANSFORM_A_2, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 6, OM_CFUNC ;XFORM2f
|
||
.LONG C_DESK_PART_INIT ;RIGHT SHOULDER
|
||
|
||
NUM_EYEL .EQU 5
|
||
LWWWW TRANSFORM_A_3, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 5, OM_CFUNC ;XFORM3
|
||
.LONG C_DESK_PART_INIT ;LEFT EYE
|
||
|
||
LWWWW TRANSFORM_A_3, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 5, OM_CFUNC ;XFORM3f
|
||
.LONG C_DESK_PART_INIT ;RIGHT EYE
|
||
|
||
NUM_GATL .EQU 7
|
||
LWWWW TRANSFORM_B_4, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 1, OM_CFUNC ;XFORM4
|
||
.LONG C_DESK_PART_INIT ;LEFT GUN
|
||
|
||
NUM_GATR .EQU 8
|
||
LWWWW TRANSFORM_B_4, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 1, OM_CFUNC ;XFORM4f
|
||
.LONG C_DESK_PART_INIT ;RIGHT GUN
|
||
|
||
NUM_FRONT .EQU 9
|
||
LWWWW TRANSFORM_B_5, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 0, OM_CFUNC ;XFORM5
|
||
.LONG C_DESK_PART_INIT ;FRONT PIECE
|
||
|
||
NUM_JOSH .EQU 10
|
||
LWWWW TRANSFORM_B_5, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 7, OM_CFUNC ;XFORM5f
|
||
.LONG C_DESK_PART_INIT ;JOSH
|
||
|
||
NUM_MISSLE_DOOR .EQU 11
|
||
LWWWW TRANSFORM_B_6, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, -1, OM_CFUNC ;XFORM6
|
||
.LONG C_DESK_PART_INIT ;FRONT MISSLE
|
||
|
||
NUM_GUN_ARM .EQU 12
|
||
LWWWW TRANSFORM_B_6, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 1, OM_CFUNC ;XFORM6f
|
||
.LONG C_DESK_PART_INIT ;Right gun arm
|
||
|
||
LWWWW TRANSFORM_K_7, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 0, OM_CFUNC ;XFORM7
|
||
.LONG C_DESK_PART_INIT ;Left gun arm
|
||
|
||
NUM_SMALL_SHAKE .EQU 14
|
||
LWWWW TRANSFORM_K_7, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 1, OM_CFUNC ;XFORM7f
|
||
.LONG C_DESK_PART_INIT ;nothing
|
||
|
||
NUM_MED_SHAKE .EQU 15
|
||
LWWWW TRANSFORM_K_8, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 0, OM_CFUNC ;XFORM8
|
||
.LONG C_DESK_PART_INIT ;nothing
|
||
|
||
NUM_BIG_SHAKE .EQU 16
|
||
LWWWW TRANSFORM_K_8, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 0, OM_COLL ;XFORM8f
|
||
.LONG DUMCOLL ;nothing
|
||
|
||
NUM_DOME .EQU 17
|
||
LWWWW C_GLASS, DMAWNZ, M_OPARTSXY|M_NODISP, 9, OM_OPARTS|OM_COLL ;Glass dome
|
||
.WORD 0,35
|
||
.LONG DUMCOLL
|
||
|
||
NUM_EYE_DAMAGE .EQU 18
|
||
LWWWW TRANSFORM_K_9, DMAWNZ, M_NOSCALE|M_NOSHADOW|M_NODISP, 4, OM_COLL ;XFORM9
|
||
.LONG DUMCOLL ;Left eye damage
|
||
|
||
LWWWW TRANSFORM_K_9, DMAWNZ|M_FLIPH, M_NOSCALE|M_NOSHADOW|M_NODISP, 4, OM_COLL ;XFORM9f
|
||
.LONG DUMCOLL ;Right eye damage
|
||
|
||
NUM_SEATL .EQU 20
|
||
LWWWW MEK_SEAT_A, DMAWNZ, M_OPARTSXY|M_NOSHADOW|M_NODISP, 8, OM_OPARTS|OM_COLL ;Left half of seat
|
||
.WORD 0,35 ;Used for final
|
||
.LONG DUMCOLL
|
||
|
||
NUM_SEATR .EQU 21
|
||
NUM_LAST_PART .EQU 21
|
||
LWWWW MEK_SEAT_A, DMAWNZ|M_FLIPH, M_OPARTSXY|M_NOSHADOW|M_NODISP, 8, OM_OPARTS|OM_COLL ;Right half of seat
|
||
.WORD 0,35 ;;Used for subtitles
|
||
.LONG DUMCOLL
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Animation tables *
|
||
* ________________ *
|
||
* *
|
||
* Each arm and head animation has four scripts. *
|
||
* One for each damage level. They are indexed *
|
||
* via a table and the ODAMAGE variable in the *
|
||
* object field *
|
||
* *
|
||
**************************************************************************
|
||
|
||
*
|
||
*Animation number equates, used to tell decision funcs where animation
|
||
*just came from
|
||
*
|
||
ANUM_IDLE .EQU 0
|
||
|
||
*Gatling gun animation equates
|
||
ANUM_FIRE .EQU 1
|
||
ANUM_WHACK .EQU 2
|
||
|
||
*Josh animation equates
|
||
ANUM_VICTORY .EQU 1
|
||
ANUM_PISSED .EQU 2
|
||
ANUM_BLOWN .EQU 3
|
||
ANUM_STEER_L .EQU 4
|
||
ANUM_STEER_R .EQU 5
|
||
|
||
XFORM_TIX .EQU 6 ;Ticks per transform frame
|
||
|
||
ANIM_TRANSFORM
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_TRANSFORM
|
||
|
||
LWL TRANSFORM_A_1,1|AMulti|AFunc,A_NOSCALE_NOSHAD
|
||
LWL TRANSFORM_A_1,1|AMulti|AFunc,A_NOSCALE_NOSHAD
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_ON
|
||
LWL 1,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_ON
|
||
LWL 1,XFORM_TIX|AFunc,OBJ_ON
|
||
|
||
|
||
LW TRANSFORM_B_1,1|AMulti
|
||
LW TRANSFORM_B_1,1|AMulti
|
||
|
||
LW TRANSFORM_B_2,1|AMulti
|
||
LW TRANSFORM_B_2,1|AMulti
|
||
|
||
LW TRANSFORM_B_3,1|AMulti
|
||
LW TRANSFORM_B_3,1|AMulti
|
||
|
||
LWL TRANSFORM_B_4,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_B_4,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LWL TRANSFORM_B_5,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_B_5,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LWL TRANSFORM_B_6,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_B_6,XFORM_TIX|AFunc,OBJ_ON
|
||
|
||
|
||
LW TRANSFORM_C_1,1|AMulti
|
||
LW TRANSFORM_C_1,1|AMulti
|
||
|
||
LW TRANSFORM_C_2,1|AMulti
|
||
LW TRANSFORM_C_2,1|AMulti
|
||
|
||
LW TRANSFORM_C_3,1|AMulti
|
||
LW TRANSFORM_C_3,1|AMulti
|
||
|
||
LW TRANSFORM_C_4,1|AMulti
|
||
LW TRANSFORM_C_4,1|AMulti
|
||
|
||
LW TRANSFORM_C_5,1|AMulti
|
||
LW TRANSFORM_C_5,1|AMulti
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,XFORM_TIX|AFunc,OBJ_OFF
|
||
|
||
|
||
LW TRANSFORM_D_1,1|AMulti
|
||
LW TRANSFORM_D_1,1|AMulti
|
||
|
||
LW TRANSFORM_D_2,1|AMulti
|
||
LW TRANSFORM_D_2,1|AMulti
|
||
|
||
LW TRANSFORM_D_3,1|AMulti
|
||
LW TRANSFORM_D_3,1|AMulti
|
||
|
||
LW TRANSFORM_D_4,1|AMulti
|
||
LW TRANSFORM_D_4,1|AMulti
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,XFORM_TIX|AFunc,OBJ_OFF
|
||
|
||
|
||
LW TRANSFORM_E_1,1|AMulti
|
||
LW TRANSFORM_E_1,1|AMulti
|
||
|
||
LW TRANSFORM_E_2,1|AMulti
|
||
LW TRANSFORM_E_2,1|AMulti
|
||
|
||
LW TRANSFORM_E_3,1|AMulti
|
||
LW TRANSFORM_E_3,1|AMulti
|
||
|
||
LW TRANSFORM_E_4,1|AMulti
|
||
LW TRANSFORM_E_4,XFORM_TIX
|
||
|
||
|
||
LW TRANSFORM_F_1,1|AMulti
|
||
LW TRANSFORM_F_1,1|AMulti
|
||
|
||
LW TRANSFORM_F_2,1|AMulti
|
||
LW TRANSFORM_F_2,1|AMulti
|
||
|
||
LW TRANSFORM_F_3,1|AMulti
|
||
LW TRANSFORM_F_3,1|AMulti
|
||
|
||
LW TRANSFORM_F_4,1|AMulti
|
||
LW TRANSFORM_F_4,XFORM_TIX
|
||
|
||
|
||
LW TRANSFORM_G_1,1|AMulti
|
||
LW TRANSFORM_G_1,1|AMulti
|
||
|
||
LW TRANSFORM_G_2,1|AMulti
|
||
LW TRANSFORM_G_2,1|AMulti
|
||
|
||
LW TRANSFORM_G_3,1|AMulti
|
||
LW TRANSFORM_G_3,1|AMulti
|
||
|
||
LW TRANSFORM_G_4,1|AMulti
|
||
LW TRANSFORM_G_4,1|AMulti
|
||
|
||
LWL TRANSFORM_G_5,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_G_5,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LWL TRANSFORM_G_6,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_G_6,XFORM_TIX|AFunc,OBJ_ON
|
||
|
||
|
||
LWLW TRANSFORM_H_1,1|AMulti|AFunc,A_SET_OYACCEL+1,-1000H
|
||
LW TRANSFORM_H_1,1|AMulti
|
||
|
||
LW TRANSFORM_H_2,1|AMulti
|
||
LW TRANSFORM_H_2,1|AMulti
|
||
|
||
LW TRANSFORM_H_3,1|AMulti
|
||
LW TRANSFORM_H_3,1|AMulti
|
||
|
||
LW TRANSFORM_H_4,1|AMulti
|
||
LW TRANSFORM_H_4,1|AMulti
|
||
|
||
LW TRANSFORM_H_5,1|AMulti
|
||
LW TRANSFORM_H_5,1|AMulti
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,XFORM_TIX|AFunc,OBJ_OFF
|
||
|
||
|
||
LWL TRANSFORM_I_1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL TRANSFORM_I_1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
|
||
LWL TRANSFORM_I_2,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL TRANSFORM_I_2,1|AMulti|AFunc,A_SCALE_SHAD
|
||
|
||
LWL TRANSFORM_I_3,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL TRANSFORM_I_3,1|AMulti|AFunc,A_SCALE_SHAD
|
||
|
||
LWL TRANSFORM_I_4,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL TRANSFORM_I_4,1|AMulti|AFunc,A_START_DOME_RISE
|
||
|
||
LWL 1,1|AMulti|AFunc,A_OBJ_OFF_SCALE_SHAD
|
||
LWL 1,1|AMulti|AFunc,A_OBJ_OFF_SCALE_SHAD
|
||
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
|
||
LW 1,1|AMulti
|
||
|
||
LWL 1,1|AMulti|AFunc,A_SCALE_SHAD
|
||
LWL 1,(XFORM_TIX-2)|AFunc,A_SCALE_SHAD
|
||
|
||
|
||
LWL 1,1|AFunc,A_GET_SHAD_MULTI
|
||
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_COOOO_EEEEL
|
||
|
||
|
||
LW TRANSFORM_J_1,1|AMulti
|
||
LW TRANSFORM_J_1,1|AMulti
|
||
|
||
LW TRANSFORM_J_2,1|AMulti
|
||
LW TRANSFORM_J_2,1|AMulti
|
||
|
||
LW TRANSFORM_J_3,1|AMulti
|
||
LW TRANSFORM_J_3,1|AMulti
|
||
|
||
LW TRANSFORM_J_4,1|AMulti
|
||
LW TRANSFORM_J_4,1|AMulti
|
||
|
||
LWL TRANSFORM_J_5,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_J_5,XFORM_TIX|AFunc,OBJ_ON
|
||
|
||
|
||
LWLW TRANSFORM_K_1,1|AMulti|AFunc,A_SET_OYACCEL+1,1000H
|
||
LW TRANSFORM_K_1,1|AMulti
|
||
|
||
LW TRANSFORM_K_2,1|AMulti
|
||
LW TRANSFORM_K_2,1|AMulti
|
||
|
||
LW TRANSFORM_K_3,1|AMulti
|
||
LW TRANSFORM_K_3,1|AMulti
|
||
|
||
LW TRANSFORM_K_4,1|AMulti
|
||
LW TRANSFORM_K_4,1|AMulti
|
||
|
||
LW TRANSFORM_K_5,1|AMulti
|
||
LW TRANSFORM_K_5,1|AMulti
|
||
|
||
LWL TRANSFORM_K_6,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_K_6,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LWL TRANSFORM_K_7,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_K_7,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LWL TRANSFORM_K_8,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_K_8,1|AMulti|AFunc,OBJ_ON
|
||
|
||
LW 1,1|AMulti
|
||
|
||
LWL TRANSFORM_K_9,1|AMulti|AFunc,OBJ_ON
|
||
LWL TRANSFORM_K_9,XFORM_TIX|AFunc,OBJ_ON
|
||
|
||
|
||
LW TRANSFORM_L_1,1|AMulti
|
||
LW TRANSFORM_L_1,1|AMulti
|
||
|
||
LW TRANSFORM_L_2,1|AMulti
|
||
LW TRANSFORM_L_2,1|AMulti
|
||
|
||
LW TRANSFORM_L_3,1|AMulti
|
||
LW TRANSFORM_L_3,1|AMulti
|
||
|
||
LW TRANSFORM_L_4,1|AMulti
|
||
LW TRANSFORM_L_4,1|AMulti
|
||
|
||
LW TRANSFORM_L_5,1|AMulti
|
||
LW TRANSFORM_L_5,1|AMulti
|
||
|
||
LW TRANSFORM_L_6,1|AMulti
|
||
LW TRANSFORM_L_6,1|AMulti
|
||
|
||
LW TRANSFORM_L_7,1|AMulti
|
||
LW TRANSFORM_L_7,1|AMulti
|
||
|
||
LW TRANSFORM_L_8,1|AMulti
|
||
LW TRANSFORM_L_8,1|AMulti
|
||
|
||
LW 1,1|AMulti
|
||
|
||
LW TRANSFORM_L_9,1|AMulti
|
||
LW TRANSFORM_L_9,XFORM_TIX
|
||
|
||
|
||
LW TRANSFORM_M_1,1|AMulti
|
||
LW TRANSFORM_M_1,1|AMulti
|
||
|
||
LWL TRANSFORM_M_2,1|AMulti|AFunc,A_START_SEAT_RISE
|
||
LW TRANSFORM_M_2,1|AMulti
|
||
|
||
LW TRANSFORM_M_3,1|AMulti
|
||
LW TRANSFORM_M_3,1|AMulti
|
||
|
||
LW TRANSFORM_M_4,1|AMulti
|
||
LW TRANSFORM_M_4,1|AMulti
|
||
|
||
LW TRANSFORM_M_5,1|AMulti
|
||
LW TRANSFORM_M_5,1|AMulti
|
||
|
||
LW TRANSFORM_M_6,1|AMulti
|
||
LW TRANSFORM_M_6,1|AMulti
|
||
|
||
LW TRANSFORM_M_7,1|AMulti
|
||
LW TRANSFORM_M_7,1|AMulti
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
|
||
LW 1,1|AMulti
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWL 1,XFORM_TIX|AFunc,OBJ_OFF
|
||
|
||
|
||
LWLL C_TIT_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
LWLL C_TIT_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
|
||
LWLL C_SHOULDER_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
LWLL C_SHOULDER_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
|
||
LWLL C_EYES_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
LWLL C_EYES_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
|
||
LWLL C_GATLIN_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
LWLL C_GATLIN_1,1|AMulti|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
|
||
LWWLL C_FRONT_1,1|AMulti|AFlip|AFunc,0,A_CHANGE_PAL+2,DA_MECH_P
|
||
LWL YDMRISE1,1|AMulti|AFunc,OBJ_OFF
|
||
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
LWLL C_GATLIN_ARM,1|AMulti|AFunc,A_OBJ_ON_CHANGE_PAL+2,DA_MECH_P
|
||
|
||
LWLL C_GATLIN_ARM,1|AMulti|AFunc,A_OBJ_ON_CHANGE_PAL+2,DA_MECH_P
|
||
LWL 1,1|AMulti|AFunc,OBJ_OFF
|
||
|
||
LW 1,1|AMulti
|
||
LW 1,1|AMulti
|
||
|
||
LW 1,1|AMulti
|
||
|
||
LWL C_EYES_2,1|AMulti|AFunc,A_INIT_EYE_DAMAGE
|
||
LWL C_EYES_2,1|AFunc,A_INIT_EYE_DAMAGE
|
||
|
||
|
||
LWL 1,1|AFunc,CLR_VEL
|
||
|
||
LWL 1,1|AFunc,A_START_COLLS
|
||
|
||
LWL 1,10|AFunc,A_START_JOSH
|
||
|
||
LWLL 1,80|AFunc,A_SOUND+2,SND_DESK_BATTLE
|
||
|
||
LWL 1,1|AFunc,A_BATTLE_STATIONS
|
||
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
*
|
||
*Animation to make the dome rise
|
||
*
|
||
ANIM_DOME_UP
|
||
LWL 1,(XFORM_TIX-1)|AFunc,OBJ_ON
|
||
LWL 1,XFORM_TIX|AFunc,A_DOME_UP
|
||
LWL 1,XFORM_TIX|AFunc,A_DOME_UP
|
||
LWL 1,XFORM_TIX|AFunc,A_DOME_UP
|
||
LWL 1,XFORM_TIX|AFunc,A_DOME_UP
|
||
LWL 1,XFORM_TIX|AFunc,A_DOME_DONE
|
||
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
*
|
||
*Animation script to keep tabs on the velocity and movement boundries
|
||
*
|
||
ANIM_VELOCITY_WATCH
|
||
LWL 1,1|AFunc,A_VELOCITY_WATCH
|
||
.LONG 0
|
||
|
||
*
|
||
*Handle Desk's movement
|
||
*
|
||
ANIM_MOVEMENT
|
||
LWL 1,1|AFunc,A_MOVE_AROUND
|
||
.LONG 0
|
||
|
||
*
|
||
*Gatlin gun idles
|
||
*
|
||
ANIM_GAT_IDLE
|
||
LWL C_GATLIN_1,1|AFunc,A_SELECT_GAT_IDLE_TIME
|
||
LW 1,0
|
||
LWLW 1,1|AFunc,A_GAT_DECISION+1,ANUM_IDLE
|
||
|
||
*
|
||
*Make Gatlin gun fire
|
||
*
|
||
*Common shoot animation hook
|
||
ANIM_GAT_SHOOT
|
||
LW 1,6
|
||
LWL 1,5|AFunc,A_RANDOM_BURST_COUNT
|
||
AAGAT_SHOOTER
|
||
LWL 1,5|AFunc,A_RANDOM_RAPID_COUNT
|
||
AAGAT_RAPID_FIRE
|
||
LWLWW 1,7|AFunc,A_GAT_FIRE_FNC+2,-170,37
|
||
LWLL 1,1|AFunc,A_GAT_RAPIDFIRE_DECISION+2,AAGAT_RAPID_FIRE
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,7,20
|
||
LW 1,0
|
||
LWLL 1,1|AFunc,A_GAT_BURST_DECISION+2,AAGAT_SHOOTER
|
||
LWLW 1,1|AFunc,A_GAT_DECISION+1,ANUM_FIRE
|
||
|
||
*
|
||
*Gun flash creation tables
|
||
*
|
||
NUM_GUN_FLASHES .EQU 6
|
||
|
||
GUN_FLASH_TABLE
|
||
.LONG GAT_FLASH_1, GAT_FLASH_2, GAT_FLASH_3, GAT_FLASH_4
|
||
.LONG GAT_FLASH_5, GAT_FLASH_6
|
||
|
||
|
||
GAT_FLASH_1
|
||
.LONG GATLIN_F_2
|
||
.word DMAWNZ,M_DEAD|M_NOPARTANI,OM_ANIM
|
||
.LONG ANIM_GAT_FLASH
|
||
GAT_FLASH_2
|
||
.LONG GATLIN_F_3
|
||
.word DMAWNZ,M_DEAD|M_NOPARTANI,OM_ANIM
|
||
.LONG ANIM_GAT_FLASH
|
||
GAT_FLASH_3
|
||
.LONG GATLIN_F_4
|
||
.word DMAWNZ,M_DEAD|M_NOPARTANI,OM_ANIM
|
||
.LONG ANIM_GAT_FLASH
|
||
GAT_FLASH_4
|
||
.LONG GATLIN_F_6
|
||
.word DMAWNZ,M_DEAD|M_NOPARTANI,OM_ANIM
|
||
.LONG ANIM_GAT_FLASH
|
||
GAT_FLASH_5
|
||
.LONG GATLIN_F_7
|
||
.word DMAWNZ,M_DEAD|M_NOPARTANI,OM_ANIM
|
||
.LONG ANIM_GAT_FLASH
|
||
GAT_FLASH_6
|
||
.LONG GATLIN_F_8
|
||
.word DMAWNZ,M_DEAD|M_NOPARTANI,OM_ANIM
|
||
.LONG ANIM_GAT_FLASH
|
||
|
||
*
|
||
*Gat gets whacked
|
||
*
|
||
ANIM_GAT_WHACK
|
||
LWLL C_GATLIN_3,25|AFunc,A_SOUND+2,SND_GAT_WHACK
|
||
LW C_GATLIN_2,8
|
||
LW C_GATLIN_1,80
|
||
LWLW 1,8|AFunc,A_GAT_DECISION+1,ANUM_WHACK
|
||
|
||
*
|
||
*Generic gun flash animation
|
||
*
|
||
ANIM_GAT_FLASH
|
||
LW 1,4
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
*
|
||
*The talking head finishes of "So nice to see you!"
|
||
*
|
||
;ANIM_JOSH_HEAD_NICE
|
||
; LWLW J1_TALK_A,1|AFunc,A_Set_AnimLoop+1,3
|
||
;AJHN_LOOP
|
||
; LWL 1,6|AFunc,OBJ_ON
|
||
; LWL 1,5|AFunc,OBJ_OFF
|
||
; LWLL 1,1|AFunc,A_Anim_DSJ+2,AJHN_LOOP
|
||
; LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
*
|
||
*The talking head says, "Prease to enjoy, new Japan technology"
|
||
*
|
||
;ANIM_JOSH_HEAD_PREASE
|
||
; LWLW J1_TALK_A,1|AFunc,A_Set_AnimLoop+1,2
|
||
;AJHP_LOOP1
|
||
; LWL 1,6|AFunc,OBJ_ON
|
||
; LWL 1,5|AFunc,OBJ_OFF
|
||
; LWLL 1,1|AFunc,A_Anim_DSJ+2,AJHP_LOOP1
|
||
; LW 1,10
|
||
; LWLW 1,1|AFunc,A_Set_AnimLoop+1,6
|
||
;AJHP_LOOP2
|
||
; LWL 1,6|AFunc,OBJ_ON
|
||
; LWL 1,5|AFunc,OBJ_OFF
|
||
; LWLL 1,1|AFunc,A_Anim_DSJ+2,AJHP_LOOP2
|
||
|
||
; LW 1,5
|
||
|
||
; LWLW 1,1|AFunc,A_Set_AnimLoop+1,5
|
||
;AJHP_LOOP3
|
||
; LWL 1,6|AFunc,OBJ_ON
|
||
; LWL 1,5|AFunc,OBJ_OFF
|
||
; LWLL 1,1|AFunc,A_Anim_DSJ+2,AJHP_LOOP3
|
||
|
||
; LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
|
||
*
|
||
*Table of actions that Josh does whilst driving his desk
|
||
*
|
||
JOSH_ACTIONS
|
||
.LONG ANIM_JOSH_IDLE, ANIM_JOSH_VICTORY, ANIM_PISSED
|
||
.LONG ANIM_JOSH_BLOWN, ANIM_JOSH_STEER_L, ANIM_JOSH_STEER_R
|
||
|
||
*
|
||
*Animation to make Josh the mech-pilot appear
|
||
*
|
||
ANIM_JOSH_UP
|
||
LWLL 1,35|AFunc,A_CHANGE_PAL+2,P_GXDOME
|
||
LWL 1,6|AFunc,OBJ_ON
|
||
LWLL YDMRISE2,6|AFunc,A_SOUND+2,SND_GET_READY
|
||
LW YDMRISE3,6
|
||
LW YDMRISE4,6
|
||
LW YDMSTAND,35
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_BANZAI
|
||
|
||
*
|
||
* Table of animations that make Josh vocalize
|
||
*
|
||
JOSH_VOCALS
|
||
.LONG ANIM_BANZAI, ANIM_GAI_JIN, ANIM_SUPERIOR, ANIM_BLUE_EYE
|
||
.LONG ANIM_LAST_LAUGH, ANIM_GIMME, ANIM_NEW_ORDER
|
||
.LONG ANIM_DESK_DESTROY, ANIM_SORRY, ANIM_NOOO, ANIM_BEAST
|
||
.LONG ANIM_FORGIVE, ANIM_USELESS, ANIM_HURT_DESK, ANIM_PISSED
|
||
|
||
|
||
ANIM_BANZAI
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_BANZAI
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_GAI_JIN
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_GAI_JIN
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_SUPERIOR
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_SUPERIOR
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_BLUE_EYE
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_BLUE_EYE
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_LAST_LAUGH
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_LAST_LAUGH
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_GIMME
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_GIMME
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_NEW_ORDER
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_NEW_ORDER
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_DESK_DESTROY
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_DESK_DESTROY
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_VICTORY
|
||
|
||
ANIM_SORRY
|
||
LWLW YDMSTAND,37|AFunc,A_SUB_SND+1,SNUM_SORRY
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_IDLE
|
||
|
||
ANIM_BEAST
|
||
LW 1,60
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_BEAST
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_PISSED_G
|
||
|
||
ANIM_FORGIVE
|
||
LW 1,60
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_FORGIVE
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_PISSED_G
|
||
|
||
ANIM_USELESS
|
||
LW 1,60
|
||
LWLW 1,26|AFunc,A_SUB_SND+1,SNUM_USELESS
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_JOSH_IDLE
|
||
|
||
ANIM_HURT_DESK
|
||
LW 1,60
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_HURT_DESK
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_PISSED_G
|
||
|
||
ANIM_PISSED
|
||
LW 1,40
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_PISSED
|
||
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_PISSED_G
|
||
|
||
ANIM_NOOO
|
||
LWLW 1,1|AFunc,A_SUB_SND+1,SNUM_NOOO
|
||
ANIM_PISSED_G
|
||
LW YDMFLAIL1,4
|
||
LW YDMFLAIL2,4
|
||
LW YDMFLAIL3,4
|
||
LW YDMFLAIL4,4
|
||
LW YDMFLAIL5,4
|
||
LW YDMFLAIL6,4
|
||
LW YDMFLAIL7,4
|
||
LWLW 1,1|AFunc,A_JOSH_DECISION+1,ANUM_PISSED
|
||
|
||
*
|
||
*Josh sits idley by as the his craft gets destroyed
|
||
*
|
||
ANIM_JOSH_IDLE
|
||
LWL YDMSTAND,1|AFunc,A_SELECT_JOSH_IDLE_TIME
|
||
LWLL 1,1|AFunc,A_AnimScr+2,AJIDLE_LOOP
|
||
AJIDLE_LOOP
|
||
LWLW 1,1|AFunc,A_JOSH_DECISION+1,ANUM_IDLE
|
||
.LONG 0
|
||
|
||
*
|
||
*Josh puts a fist up in a victory gesture
|
||
*
|
||
ANIM_JOSH_VICTORY
|
||
LWLW YDMFIST1,4|AFunc,A_Set_AnimLoop+1,3
|
||
LW YDMFIST2,4
|
||
ANIM_JOSH_VICTORY_LOOP
|
||
LW YDMFIST3,9
|
||
LWLL YDMFIST4,9|AFunc,A_Anim_DSJ+2,ANIM_JOSH_VICTORY_LOOP
|
||
LWLW 1,1|AFunc,A_JOSH_DECISION+1,ANUM_VICTORY
|
||
|
||
*
|
||
*Josh gets blown back
|
||
*
|
||
ANIM_JOSH_BLOWN
|
||
LW YDMTILT1,4
|
||
LW YDMTILT2,4
|
||
LW YDMTILT3,4
|
||
LW YDMTILT4,0
|
||
LW YDMTILT3,3
|
||
LW YDMTILT2,3
|
||
LWLW YDMTILT1,3|AFunc,A_JOSH_DECISION+1,ANUM_BLOWN
|
||
|
||
*
|
||
*Josh steers to screen Left
|
||
*
|
||
ANIM_JOSH_STEER_L
|
||
LWW YDMLEAN1,1|AFlip,M_FLIPH
|
||
LWLL 1,5|AFunc,A_STEER_CHECK+2,AJSL_X_1
|
||
LWLL YDMLEAN3,6|AFunc,A_STEER_CHECK+2,AJSL_X_2
|
||
AJSL_LOOP
|
||
LWLWL YDMLEAN4,0|AFunc,A_DEC_STEER_TIME+3,ANUM_STEER_L,AJSL_LOOP
|
||
AJSL_X_2
|
||
LW YDMLEAN3,4
|
||
AJSL_X_1
|
||
LWLW YDMLEAN1,4|AFunc,A_JOSH_DECISION+1,ANUM_STEER_L
|
||
|
||
*
|
||
*Josh steers to screen Right
|
||
*
|
||
ANIM_JOSH_STEER_R
|
||
LWW YDMLEAN1,1|AFlip,0
|
||
LWLL 1,5|AFunc,A_STEER_CHECK+2,AJSR_X_1
|
||
LWLL YDMLEAN3,6|AFunc,A_STEER_CHECK+2,AJSR_X_2
|
||
AJSR_LOOP
|
||
LWLWL YDMLEAN4,0|AFunc,A_DEC_STEER_TIME+3,ANUM_STEER_R,AJSR_LOOP
|
||
AJSR_X_2
|
||
LW YDMLEAN3,4
|
||
AJSR_X_1
|
||
LWLW YDMLEAN1,4|AFunc,A_JOSH_DECISION+1,ANUM_STEER_R
|
||
|
||
*
|
||
* Run a sub-title. Used by the left half of the seat.
|
||
*
|
||
ANIM_SUBTITLE
|
||
LWL 1,1|AFunc,A_CHECK_SUB
|
||
.LONG 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Missle Launcher Animations *
|
||
* *
|
||
**************************************************************************
|
||
|
||
*
|
||
*Animation for the front missle door
|
||
*
|
||
ANIM_FRONT_MISSLE
|
||
LWLL 1,1|AFunc,A_CHANGE_PAL+2,DA_MECH_P
|
||
ANIM_FRONT_LOOP
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,60,120
|
||
LW 1,0
|
||
LWLL 1,1|AFunc,A_CHECK_OK_MISSLE+2,ANIM_FRONT_LOOP
|
||
|
||
LWLL 1,1|AFunc,A_CHECK_FRONT_DEAD+2,ANIM_FRONT_DAMAGE
|
||
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_DOOR_OPEN
|
||
LWL C_FRONT_A,4|AFunc,OBJ_ON
|
||
LW C_FRONT_B,4
|
||
LWLLWW C_FRONT_C,20|AFunc,A_SPAWN_N_MISSLES+4,FRONT_MISSLE_TAB,6,3
|
||
ANIM_FRONT_WAIT
|
||
LWLL 1,5|AFunc,A_WAIT_FOR_MISSLES+2,ANIM_FRONT_WAIT
|
||
LW 1,15
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_DOOR_OPEN
|
||
LW C_FRONT_B,4
|
||
LW C_FRONT_A,4
|
||
LWL 1,1|AFunc,OBJ_OFF
|
||
LWL 1,1|AFunc,A_CLR_MISSLE_OPEN
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_FRONT_LOOP
|
||
|
||
*
|
||
*Table of offsets for the front missles
|
||
*
|
||
FRONT_MISSLE_TAB
|
||
.WORD -24,-8
|
||
.WORD -2,-8
|
||
.WORD 23,-8
|
||
.WORD -24,9
|
||
.WORD -2,9
|
||
.WORD 23,9
|
||
|
||
*
|
||
*Animation for the shoulder missle bay
|
||
*
|
||
ANIM_SHOULDER_MISSLE
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,60,120
|
||
LW 1,0
|
||
|
||
LWLL 1,1|AFunc,A_CHECK_OK_MISSLE+2,ANIM_SHOULDER_MISSLE
|
||
|
||
LWLWL 1,1|AFunc,A_BRANCH_PCNT+3,512,ANIM_SHORT_SHOULDER
|
||
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHOULDER_LONG
|
||
ANIM_SHOULDER_LOOP
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,-4
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDER_LOOP
|
||
LWLLWW 1,20|AFunc,A_SPAWN_N_MISSLES+4,SHOULDER_MISSLE_TAB,6,3
|
||
ANIM_SHOULDER_WAIT
|
||
LWLL 1,5|AFunc,A_WAIT_FOR_MISSLES+2,ANIM_SHOULDER_WAIT
|
||
LW 1,15
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHOULDER_LONG
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
ANIM_SHOULDER_DOWN_LOOP
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,4
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDER_DOWN_LOOP
|
||
LWL 1,1|AFunc,A_CLR_MISSLE_OPEN
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_SHOULDER_MISSLE
|
||
|
||
*
|
||
*Animation for the shoulder missle bay, short pop-up, three holes only
|
||
*
|
||
ANIM_SHORT_SHOULDER
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHOULDER_SHORT
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,4
|
||
ANIM_SHOULDER_LOOP2
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,-4
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDER_LOOP2
|
||
LWLLWW 1,20|AFunc,A_SPAWN_N_MISSLES+4,SHOULDER_MISSLE_TAB,3,3
|
||
ANIM_SHOULDER_WAIT2
|
||
LWLL 1,5|AFunc,A_WAIT_FOR_MISSLES+2,ANIM_SHOULDER_WAIT2
|
||
LW 1,15
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHOULDER_SHORT
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,4
|
||
ANIM_SHOULDER_DOWN_LOOP2
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,4
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDER_DOWN_LOOP2
|
||
LWL 1,1|AFunc,A_CLR_MISSLE_OPEN
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_SHOULDER_MISSLE
|
||
|
||
*
|
||
*Table of offsets for the shoulder missles
|
||
*
|
||
SHOULDER_MISSLE_TAB
|
||
.WORD -107,-33
|
||
.WORD -89,-37
|
||
.WORD -71,-41
|
||
.WORD -107,-11
|
||
.WORD -89,-15
|
||
.WORD -71,-19
|
||
|
||
; .WORD -107,-89
|
||
; .WORD -89,-93
|
||
; .WORD -71,-97
|
||
; .WORD -107,-67
|
||
; .WORD -89,-71
|
||
; .WORD -71,-75
|
||
|
||
*
|
||
*Initialize desk missle
|
||
*
|
||
MISSLE_INIT
|
||
.LONG C_BABYMISILE
|
||
.WORD DMAWNZ, M_OPARTSXY, OM_OID|OM_COLL|OM_GUNV|OM_ANIM|OM_CFUNC
|
||
.WORD OID_EROCKET
|
||
.LONG MISSLE_CVECT, MISSLE_GUNVECT, ANIM_MISSLE, C_MISSLE
|
||
|
||
*
|
||
*Missle animation
|
||
*
|
||
ANIM_MISSLE
|
||
LWLL 1,1|AFunc,A_CHECK_MISSLE_PAUSE+2,ANIM_MISSLE_NO_PAUSE
|
||
LWLWW 1,60|AFunc,A_RAND_AnimSLP+2,60,120
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_MISSLE_WAIT
|
||
ANIM_MISSLE_NO_PAUSE
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,20,120
|
||
ANIM_MISSLE_WAIT
|
||
LW 1,0
|
||
ANIM_MISSLE_GO
|
||
LWLL 1,1|AFunc,A_OFFSCREEN+2,ANIM_MISSLE_WAIT
|
||
LWL 1,1|AFunc,A_MAKE_SMOKE
|
||
LWL 1,10|AFunc,A_MISSLE_TARGET
|
||
LWLL mossile1,4|AFunc,A_CHANGE_PAL+2,mossred
|
||
LW mossile2,4
|
||
LW mossile3,4
|
||
LW mossile4,4
|
||
LW mossile5,4
|
||
LW mossile6,4
|
||
LW mossile7,4
|
||
ANIM_MISSLE_LOOP
|
||
LW 1,2
|
||
LWL 1,2|AFunc,A_CHECK_MISSLE_SCREEN_HIT
|
||
LW 1,2
|
||
LWL 1,2|AFunc,A_CHECK_MISSLE_SCREEN_HIT
|
||
LW 1,2
|
||
LWL 1,2|AFunc,A_CHECK_MISSLE_SCREEN_HIT
|
||
LWLL 1,2|AFunc,A_ONSCREEN+2,ANIM_MISSLE_LOOP
|
||
LWLWL 1,1|AFunc,A_Set_Rel_Long+3,OPROJECT_PARENT,0
|
||
LWL 1,1|AFunc,DELETE_OBJ_PROC
|
||
|
||
*
|
||
*Missle lauch smoke
|
||
*
|
||
ANIM_MISSLE_SMOKE
|
||
LWLL MSLSMOKE2,4|AFunc,A_OBJ_ON_CHANGE_PAL+2,SMOKEPAL
|
||
LW MSLSMOKE3,4
|
||
LW MSLSMOKE4,4
|
||
LW MSLSMOKE5,4
|
||
LW MSLSMOKE6,4
|
||
LW MSLSMOKE7,4
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
*
|
||
*Missle explodes in mid-air
|
||
*
|
||
ANIM_MISSLE_EXPLODE
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_MISSLE_EXPLODE
|
||
LWLL FHKEXPLOB1,1|AFunc,A_CHANGE_PAL+2,FX2
|
||
LWLWL 1,1|AFunc,A_Set_Rel_Long+3,OPROJECT_PARENT,0
|
||
LW FHKEXPLOB2,4
|
||
LW FHKEXPLOB3,4
|
||
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
|
||
|
||
*
|
||
*TABLE OF FINAL ANIMATIONS FOR DESK PARTS
|
||
*
|
||
FINAL_ANIM_TABLE
|
||
.LONG ANIM_TIT_FINAL ;Tit - left
|
||
.LONG ANIM_TIT_FINAL ;Tit - right
|
||
.LONG ANIM_SHOULDER_FINAL ;Shoulder - left
|
||
.LONG ANIM_SHOULDER_FINAL ;Shoulder - right
|
||
.LONG ANIM_EYE_FINAL ;Eye - left
|
||
.LONG ANIM_EYE_FINAL ;Eye - right
|
||
.LONG ANIM_GAT_FINAL ;Gun - left
|
||
.LONG ANIM_GAT_FINAL ;Gun - right
|
||
.LONG ANIM_FRONT_FINAL ;Front piece
|
||
|
||
ANIM_SHOULDER_FINAL
|
||
LWL 1,1|AFunc,A_DESTROY_MISSLES
|
||
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
|
||
LWLL 1,1|AFunc,A_INITIAL_SHOULDER_FREAK+2,ANIM_SHOULDER_FREAK
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHLDR_LONG_FINAL
|
||
ANIM_SHOULDERF_LOOPI
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,4
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDERF_LOOPI
|
||
ANIM_SHOULDER_FREAK
|
||
LWLWW 1,1|AFunc,A_Set_Rel_Byte+2,OFREAK_CNT,4
|
||
|
||
ANIM_SHOULDERF_LOOP
|
||
LWLWL 1,1|AFunc,A_BRANCH_PCNT+3,512,ANIM_SHOULDER_FREAK_LONG
|
||
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHLDR_SHORT_FINAL
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,2
|
||
ANIM_SHOULDERF_LOOPSU
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,-8
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDERF_LOOPSU
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHLDR_SHORT_FINAL
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,2
|
||
ANIM_SHOULDERF_LOOPSD
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,8
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDERF_LOOPSD
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_END_SFREAK
|
||
|
||
ANIM_SHOULDER_FREAK_LONG
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHLDR_LONG_FINAL
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
|
||
ANIM_SHOULDERF_LOOPLU
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,-8
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDERF_LOOPLU
|
||
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_SHLDR_LONG_FINAL
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
|
||
ANIM_SHOULDERF_LOOPLD
|
||
LWLW 1,1|AFunc,A_ADD_YPOS+1,8
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SHOULDERF_LOOPLD
|
||
|
||
ANIM_END_SFREAK
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWLWL 1,1|AFunc,A_Anim_Rel_DSJ+3,OFREAK_CNT,ANIM_SHOULDERF_LOOP
|
||
|
||
|
||
LWLWL 1,1|AFunc,A_Set_Rel_Long+3,OPART_FINAL_CONT,ANIM_SHOULDER_FIRE
|
||
LWL 1,1|AFunc,A_MULTI_METAL_CHUNK
|
||
LWLL C_SHOULDER_2,5|AFunc,A_CHANGE_PAL+2,C_DAMGE_P
|
||
LWL 1,1|AFunc,A_CLR_MISSLE_OPEN
|
||
LWLW 1,1|AFunc,A_SET_MISSLE_WAIT+1,3*60
|
||
LWLLWWW 1,1|AFunc,A_SPAWN_FIRE+5,INIT_FLAMER_B,-140,-122,1
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_BIG_SHIT_EXPLOSION
|
||
|
||
ANIM_SHOULDER_FIRE
|
||
LWLLWWW 1,1|AFunc,A_SPAWN_FIRE+5,INIT_FLAMER_A,-101,-61,1
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_EYE_FINAL
|
||
LWLWL 1,1|AFunc,A_Set_Rel_Long+3,OPART_FINAL_CONT,ANIM_EYE_FIRE
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWL 1,1|AFunc,A_MULTI_METAL_CHUNK
|
||
LWL 1,5|AFunc,A_TURN_ON_EYE_DAMAGE
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_BIG_SHIT_EXPLOSION
|
||
|
||
ANIM_EYE_FIRE
|
||
LWLLWWW 1,1|AFunc,A_SPAWN_FIRE+5,INIT_FLAMER_A,-52,-16,-2
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_FRONT_FINAL
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWL 1,1|AFunc,A_MULTI_METAL_CHUNK
|
||
LWL 1,5|AFunc,A_TURN_ON_FRONT_DAMAGE
|
||
LWLL 1,1|AFunc,A_OBJ_ON_CHANGE_PAL+2,C_DAMGE_P
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_BIG_SHIT_EXPLOSION
|
||
|
||
ANIM_TIT_FINAL
|
||
LWLWL 1,1|AFunc,A_Set_Rel_Long+3,OPART_FINAL_CONT,ANIM_TIT_FIRE
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWL 1,1|AFunc,A_MULTI_METAL_CHUNK
|
||
LWLL C_TIT_2,5|AFunc,A_CHANGE_PAL+2,C_DAMGE_P
|
||
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_BIG_SHIT_EXPLOSION
|
||
|
||
ANIM_TIT_FIRE
|
||
LWLLWWW 1,1|AFunc,A_SPAWN_FIRE+5,INIT_FLAMER_B,-112,-74,1
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_BIG_SHIT_EXPLOSION
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWL 1,1|AFunc,A_START_MEDIUM_SHAKE
|
||
LWL 1,26|AFunc,A_MULTI_METAL_CHUNK
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWL 1,1|AFunc,A_START_MEDIUM_SHAKE
|
||
LWL 1,16|AFunc,A_MULTI_METAL_CHUNK
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,10
|
||
LW 1,0
|
||
LWL 1,1|AFunc,A_CHECK_IF_FINAL
|
||
LWL 1,1|AFunc,A_CONTINUE_PART_FINAL
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
|
||
ANIM_GAT_FINAL
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,5
|
||
AGF_LOOP
|
||
LWL 1,5|AFunc,A_BLOW_GAT
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,AGF_LOOP
|
||
LWL C_GATLIN_D,1|AFunc,A_CHECK_IF_FINAL
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* This is the explosion that decimates the desk *
|
||
* *
|
||
**************************************************************************
|
||
ANIM_FINAL_EXPLOSION
|
||
; LWL 1,1|AFunc,A_MAKE_NOOO
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_NOOO
|
||
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
|
||
AFE_LOOP
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_EXPLOSION,0400h,40000h
|
||
LWL 1,1|AFunc,A_START_BIG_SHAKE
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_EXPLOSION,0400h,40000h
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,10,25
|
||
LWLL 1,0|AFunc,A_Anim_DSJ+2,AFE_LOOP
|
||
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,10
|
||
AFE_CRAFT_BLOW
|
||
LWL 1,1|AFunc,A_KEEP_US_CENTERED
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_EXPLOSION,0400h,40000h
|
||
LWL 1,2|AFunc,A_START_MEDIUM_SHAKE
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,10
|
||
LWLL 1,0|AFunc,A_Anim_DSJ+2,AFE_CRAFT_BLOW
|
||
|
||
LWL 1,7|AFunc,A_GOOD_TO_GO
|
||
|
||
LWLWL 1,1|AFunc,A_CREATEP+3,PID_IND,PROC_SKY_FLASH
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_FINAL_EXPLODE3
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_DESK_EXPLOSION,01000h,80000h
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_FINAL_EXPLODE2
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_FINAL_EXPLODE1
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_DESK_METAL,01000h,80000h
|
||
|
||
LWLLLL 1,1|AFunc,A_PreFrag_Rain+6,FRAG_DESK_RAIN,80H,40000H
|
||
|
||
LWL 1,15|AFunc,A_START_BLOWS
|
||
|
||
LWLL 1,1|AFunc,A_SOUND+2,SND_FINAL_SCREAM
|
||
|
||
LWL 1,50|AFunc,A_DESK_OFF
|
||
|
||
LWLWL 1,1|AFunc,A_CREATEP+3,PID_IND,PROC_TEMP_ENDING
|
||
|
||
LWL 1,1|AFunc,A_DELETE_CREATE
|
||
|
||
*
|
||
*Animation to turn on damage for a given eye
|
||
*
|
||
ANIM_EYE_DAMAGE
|
||
LWL 1,1|AFunc,OBJ_ON
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
*
|
||
*Animation to turn on damage for the front piece
|
||
*
|
||
ANIM_FRONT_DAMAGE
|
||
LWL 1,4|AFunc,A_DESTROY_MISSLES
|
||
LWLL C_FRONT_2,1|AFunc,A_OBJ_ON_CHANGE_PAL+2,C_DAMGE_P
|
||
LWL 1,1|AFunc,A_CLR_MISSLE_OPEN
|
||
LWLW 1,1|AFunc,A_SET_MISSLE_WAIT+1,3*60
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
*
|
||
*Final blow animations
|
||
*
|
||
ANIM_SHOULDER_BLOW
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
ANIM_SB_LOOP
|
||
LWL 1,5|AFunc,A_BLOW_SHOULDER
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_SB_LOOP
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_EYE_BLOW
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
ANIM_EYE_LOOP
|
||
LWL 1,5|AFunc,A_BLOW_EYE
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_EYE_LOOP
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_TIT_BLOW
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
ANIM_TIT_LOOP
|
||
LWL 1,5|AFunc,A_BLOW_TIT
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_TIT_LOOP
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_DOME_BLOW
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
ANIM_DOME_LOOP
|
||
LWL 1,5|AFunc,A_BLOW_DOME
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_DOME_LOOP
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_FRONT_BLOW
|
||
LWLW 1,1|AFunc,A_Set_AnimLoop+1,7
|
||
ANIM_FB_LOOP
|
||
LWL 1,5|AFunc,A_BLOW_FRONT
|
||
LWLL 1,1|AFunc,A_Anim_DSJ+2,ANIM_FB_LOOP
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
SHOULDER_BLOW_INIT
|
||
.LONG C_SHOULDER_2
|
||
.WORD DMAWNZ, 0, OM_ANIM|OM_DUMCOLL
|
||
.LONG ANIM_BLOW_SCREEN
|
||
|
||
TIT_BLOW_INIT
|
||
.LONG C_TIT_2
|
||
.WORD DMAWNZ, 0, OM_ANIM|OM_DUMCOLL
|
||
.LONG ANIM_BLOW_SCREEN
|
||
|
||
EYE_BLOW_INIT
|
||
.LONG C_EYES_2
|
||
.WORD DMAWNZ, 0, OM_ANIM|OM_DUMCOLL
|
||
.LONG ANIM_BLOW_SCREEN
|
||
|
||
DOME_BLOW_INIT
|
||
.LONG C_GLASS
|
||
.WORD DMAWNZ, 0, OM_ANIM|OM_DUMCOLL
|
||
.LONG ANIM_BLOW_SCREEN
|
||
|
||
FRONT_BLOW_INIT
|
||
.LONG C_FRONT_2
|
||
.WORD DMAWNZ, 0, OM_ANIM|OM_DUMCOLL
|
||
.LONG ANIM_BLOW_SCREEN
|
||
|
||
GAT_BLOW_INIT
|
||
.LONG C_GATLIN_1
|
||
.WORD DMAWNZ, 0, OM_ANIM|OM_DUMCOLL
|
||
.LONG ANIM_BLOW_SCREEN
|
||
|
||
*Simple animation to check if we are off screen and delete.
|
||
ANIM_BLOW_SCREEN
|
||
LWLL 1,5|AFunc,A_ONSCREEN+2,ANIM_BLOW_SCREEN
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
*
|
||
*Initialize damage fire
|
||
*
|
||
INIT_FLAMER_A
|
||
.LONG HDFLAM1
|
||
.WORD DMAWNZ, M_DEAD|M_NOPARTANI|M_OPARTSXY, OM_ANIM
|
||
.LONG ANIM_FLAMER_A
|
||
|
||
INIT_FLAMER_B
|
||
.LONG HFIREA1
|
||
.WORD DMAWNZ, M_DEAD|M_NOPARTANI|M_OPARTSXY, OM_ANIM
|
||
.LONG ANIM_FLAMER_B
|
||
|
||
;INIT_FLAMER_C
|
||
; .LONG FIRE_A_1
|
||
; .WORD DMAWNZ, M_DEAD|M_NOPARTANI|M_OPARTSXY, OM_ANIM
|
||
; .LONG ANIM_FLAMER_C
|
||
|
||
*
|
||
*Damage flamer animations
|
||
*
|
||
ANIM_FLAMER_A
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,3,6
|
||
LWLL 1,1|AFunc,A_AnimScr+2,ANIM_FA_LOOP
|
||
ANIM_FA_LOOP
|
||
LW HDFLAM1,0
|
||
LW HDFLAM2,0
|
||
LW HDFLAM3,0
|
||
LW HDFLAM4,0
|
||
LW HDFLAM5,0
|
||
LW HDFLAM6,0
|
||
LW HDFLAM7,0
|
||
.LONG 0
|
||
|
||
ANIM_FLAMER_B
|
||
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,3,6
|
||
LWLL 1,1|AFunc,A_AnimScr+2,ANIM_FLAMEB_LOOP
|
||
ANIM_FLAMEB_LOOP
|
||
LW HFIREA1,0
|
||
LW HFIREA2,0
|
||
LW HFIREA3,0
|
||
LW HFIREA4,0
|
||
LW HFIREA5,0
|
||
LW HFIREA6,0
|
||
.LONG 0
|
||
|
||
;ANIM_FLAMER_C
|
||
; LW FIRE_A_1,4
|
||
; LW FIRE_A_2,4
|
||
; LW FIRE_A_3,4
|
||
; LW FIRE_A_4,4
|
||
; LW FIRE_A_5,4
|
||
; LW FIRE_A_6,4
|
||
; LW FIRE_A_7,4
|
||
; LW FIRE_A_8,4
|
||
; LW FIRE_A_9,4
|
||
; LW FIRE_A_10,4
|
||
; .LONG 0
|
||
|
||
*
|
||
*Animations that cause the desk and Mondor to shake
|
||
*
|
||
ANIM_SMALL_SHAKE
|
||
LWLLW 1,1|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_MEDIUM_SHAKE
|
||
LWLLW 1,1|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,30000H,400H
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
ANIM_BIG_SHAKE
|
||
LWLLW 1,1|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWLLW 1,0|AFunc,A_SHAKE_FUNC+3,60000H,800H
|
||
LWL 1,1|AFunc,PULL_ANIM
|
||
|
||
**************************************************************************
|
||
* *
|
||
* Fragger stuff *
|
||
* *
|
||
**************************************************************************
|
||
*
|
||
*Table for random pick of multi chunks
|
||
*
|
||
NUM_METAL_CHUNKS .EQU 4
|
||
|
||
MULTI_METAL_CHUNK_TAB
|
||
.LONG MONDOR_METAL_MULTI_A,MONDOR_METAL_MULTI_A,MONDOR_METAL_MULTI_A
|
||
.LONG MONDOR_METAL_MULTI_A
|
||
|
||
MONDOR_METAL_MULTI_A
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,5*800H+7*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,5*800H+16*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,5*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long 0
|
||
|
||
CHUNK_METAL_A
|
||
LWLW METAL_1,1|AFunc,A_INIT_AnimSLP+1,1
|
||
CHUNK_M_A_LOOP
|
||
LW METAL_2,0
|
||
LW METAL_3,0
|
||
LW METAL_4,0
|
||
LW METAL_5,0
|
||
LW METAL_6,0
|
||
LWLW METAL_7,0|AFunc,A_INC_AnimSLP+1,5
|
||
LWLL METAL_1,0|AFunc,A_CHUNK_ONSCREEN+2,CHUNK_M_A_LOOP
|
||
LWL 1,1|AFunc,DELETE_OBJ
|
||
|
||
|
||
FRAG_DESK_EXPLOSION
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+5*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+5*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+5*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+5*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+5*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+5*40H+FRGPAL+FRGNOFLY
|
||
FRAG_SMALL_OUT_EXP
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+15*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,10*800H+15*40H+FRGPAL+FRGNOFLY
|
||
.long PART_EXPLOSION,F_EXPLOSION_OUT
|
||
.word OID_JUNK,5*800H+15*40H+FRGPAL+FRGNOFLY
|
||
.long 0
|
||
|
||
|
||
**************************************************************************
|
||
* *
|
||
* F_EXPLOSION_OUT *
|
||
* *
|
||
* Frag func that makes an explosion fly at the player. *
|
||
* *
|
||
* A0 = Ptr to un-inserted object. *
|
||
* *
|
||
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
|
||
* *
|
||
**************************************************************************
|
||
F_EXPLOSION_OUT_2X
|
||
ORIM M_DBLSCL,*A0(OFLAGS),W
|
||
F_EXPLOSION_OUT
|
||
MOVE *A0(OZVEL),A14,L
|
||
ABS A14
|
||
NEG A14
|
||
MOVE A14,*A0(OZVEL),L
|
||
RETS
|
||
|
||
FRAG_DESK_RAIN
|
||
*Pause
|
||
.long CHUNK_METAL_A,F_CHUNK_RAIN
|
||
.word OID_JUNK,3*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK_RAIN
|
||
.word OID_JUNK,5*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK_RAIN
|
||
.word OID_JUNK,3*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK_RAIN
|
||
.word OID_JUNK,5*800H+1*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK_RAIN
|
||
.word OID_JUNK,3*800H+10*40H+FRGPAL+FRGGCOL
|
||
|
||
.long CHUNK_METAL_A,F_CHUNK_RAIN
|
||
.word OID_JUNK,3*800H+10*40H+FRGPAL+FRGGCOL
|
||
|
||
.LONG 0
|
||
|
||
*
|
||
*This is the metal that gets blown on final explosion
|
||
*
|
||
FRAG_DESK_METAL
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,3*800H+5*40H+FRGPAL+FRGGCOL
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,3*800H+5*40H+FRGPAL+FRGGCOL
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,3*800H+5*40H+FRGPAL+FRGGCOL
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,3*800H+5*40H+FRGPAL+FRGGCOL
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,2*800H+5*40H+FRGPAL+FRGGCOL
|
||
.long CHUNK_METAL_A,F_CHUNK
|
||
.word OID_JUNK,1*800H+5*40H+FRGPAL+FRGGCOL
|
||
.long 0
|
||
|
||
*
|
||
*Script for spark that happens when desk gets shot by a bullet
|
||
*
|
||
FRAG_SPARK
|
||
.long BFLASH0_ANIM,F_SPARK
|
||
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGNOFLY
|
||
|
||
.LONG 0
|
||
|
||
**************************************************************************
|
||
* *
|
||
* F_SPARK - Frag Func for bullet spark. *
|
||
* A0 = Ptr to un-inserted object. *
|
||
* *
|
||
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
|
||
* *
|
||
**************************************************************************
|
||
F_SPARK
|
||
MOVI -40H,A14
|
||
MOVE A14,*A0(OZVEL),L
|
||
CLRM *A0(OYVEL),L
|
||
CLRM *A0(OXVEL),L
|
||
RETS
|
||
|
||
INIT_SPARK
|
||
.LONG bulit9
|
||
.WORD DMAWNZ, M_DEAD|M_NOPARTANI, OM_ANIM|OM_CFUNC
|
||
.LONG BFLASH0_ANIM
|
||
.LONG C_SPARK
|
||
|
||
**************************************************************************
|
||
* *
|
||
* C_SPARK *
|
||
* *
|
||
* Create func for the paste on spark image *
|
||
* *
|
||
* A0 = Ptr to un-inserted spark object *
|
||
* *
|
||
**************************************************************************
|
||
C_SPARK
|
||
MMTM SP,A0,A8
|
||
MOVE A0,A8
|
||
MOVE @RAND,A0,W
|
||
ANDI M_FLIPH|M_FLIPV,A0 ;GET SOME RANDOM FLIP BITS
|
||
CALLA SET_FLIP
|
||
MMFM SP,A0,A8
|
||
RETS
|
||
|
||
.END
|
||
|