revolution-x/GXMONDOR.ASM

4800 lines
122 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

.MLIB "GXMACS.LIB"
.FILE "GXMONDOR.ASM"
.TITLE "<<< REVOLUTION X -- MONDOR THE CARNIVOROUS ROCKER >>>"
.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 "GXMONDOR.H"
.INCLUDE "GXSTRING.H"
.INCLUDE "GXS.H"
.INCLUDE "GXMONDOR.TBL"
*
*Symbols from Mondor himself
*
.DEF MONDOR_INIT, NUM_HEAD, MAKE_MONDOR_SCREAM, MONDOR_TOTAL
.DEF A_GET_SHAD_MULTI
.DEF ANIM_MORPH_FINISH, MONDOR_MORPH_FLAG, SND_WALK_XITION
.DEF C_GREEN_STRTANIM, A_GREEN_IF_NEC
*
*Symbols from around the GLOBE
*
***** from GX.ASM
.REF WAVE_END_IMM
***** from GXRAM.ASM
.REF ENEMY_QUOTA, GAME_STATE, SOUNDSUP, CURPLYRS, GUNS_OFF
.REF BONUS_DIRECTION, NPLAYERS, P1DATA, VIOLENCE_LEVEL
***** 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_Set_Rel_Word, A_Set_Rel_Word_Head
.REF A_OBJ_OFF_CHANGE_PAL
***** from GXSND.ASM
.REF ONESND_Z, ONESND, SND_BGND1_OFF, SND_BGND2_OFF, IS_SOUND
.REF SND_CHAN0_OFF
***** from GXD.ASM
.REF SETOFFPU, XBASE, ZBASE
.REF SET_ANIPXU, SET_ANIPZU, SET_OBJSU, EASYMAKE, GET_SHAD_MULTI
***** from GXUTIL.ASM
.REF SET_VECTORS, PASTE_ON_DAMAGE
***** from GXPALL.ASM
.REF A_CHANGE_PAL
***** from GXPLAYER.ASM
.REF ANY_BOMBS
***** from GXCOG.asm
.REF HIT_ENEMY
***** from GXMONDR2.ASM
.REF FRAG_EXPLOSION, BLOODY_BULLET_HIT, FRAG_GUN_FLY
.REF A_JEANS_CHUNK, A_RANDOM_MULTI_CHUNK, A_SHIRT_CHUNK
.REF FRAG_FINAL_EXPLOSION, FIRE_BALL_INIT, A_SPAWN_PROJECTILE
.REF GRENADE_INIT, BLOW_PART, PROC_SKY_FLASH, A_DELETE_MONDOR
.REF A_VELOCITY_WATCH, A_MOVE_AROUND, FRAG_EXPLOSION_SMALL
.REF TALK_SCRIPTS, FRAG_FINAL_RAIN
.REF A_SPAWN_BLOOD, A_RAND_SPAWN_BLOOD, SPAWN_BLOOD
.REF A_ARM_FIRE_FNC, A_INIT_BLOOD_DROP, MONDOR_PROC
.REF INIT_POD_FIRE, ANIM_JOSH_MORPH, MCHUNK_COLL
.REF F_GUN_CHUNK, A_CHUNK_ONSCREEN, FRAG_EXPLOSION_ONE
***** from GXDESK.ASM
.REF ANIM_SMALL_SHAKE, ANIM_MEDIUM_SHAKE, ANIM_BIG_SHAKE
.REF SPAWN_FIRE, DGV_FRAG_SPARK, TAB_METAL_SOUNDS
.REF SNUM_NIGHTMARE
***** from GXUNIJAP.ASM
.REF NO_CHARITY
***** from GXUNIJP2.ASM
.REF METAL_GUNVECT
***** from GXHELGA.ASM
.REF PROC_THRONE_HELGA
***** from GXSCROLL.ASM
.REF SCROLL_FLAG
*
*MONDOR RAM
*
.BSS MONDOR_TOTAL,16 ;Set if Mondor was totally destroyed.
.BSS MONDOR_MORPH_FLAG,16 ;Set after Mondor morphs
.BSS DO_AERO_ENDING,16 ;Set if the player achieved the goal
.BSS UNUSED_WORD,16 ;Place holder
*Grenade through equates
Z_THROW_LIMIT .EQU 0B000H ;Mondor cannot be closer than this
Y_THROW_LIMIT .EQU -18H ;Mondor cannot be higher that this
X_THROW_LIMIT .EQU 50H ;Mondor cannot be over farther than this
.TEXT
**************************************************************************
* *
* C_MONDOR_PART_INIT *
* *
* Create Func to be run on all active Mondor objects. *
* *
**************************************************************************
C_MONDOR_PART_INIT
MOVIM MONDOR_FLASH_COLOR,*A0(OCONST),W
RETS
**************************************************************************
* *
* C_SEAT_INIT *
* *
* Create func for the seat. *
* *
**************************************************************************
C_SEAT_INIT
MOVIM 180000H,*A0(OGRNDOFF),L
JRUC C_CRAFT_PART_INIT
**************************************************************************
* *
* C_CRAFT_PART_INIT *
* *
* Create Func to be run on all active Craft objects. *
* *
**************************************************************************
C_CRAFT_PART_INIT
MOVIM CRAFT_FLASH_COLOR,*A0(OCONST),W
RETS
**************************************************************************
* *
* C_PLATE_PART_INIT *
* *
* Create Func to be run on the license plate object. *
* *
**************************************************************************
C_PLATE_PART_INIT
MOVIM 0101H,*A0(OCONST),W
RETS
**************************************************************************
* *
* DEFAULT_SCREAM *
* *
* Make the default mondor scream. *
* *
* A3 = Scream direction 1 = straight, 2 = left, 3 = right *
* A6 = Index into scream table. If 0 then random damage sound. *
* *
**************************************************************************
DEFAULT_SCREAM
MMTM SP,A0,A4,A5,A6
MOVE A6,A6 ;Is this a severe scream?
JRZ DS_NORMAL ;BR = No, just a normal one
DEC A6
MOVE A6,A14
SLL 5,A6
SLL 4,A14
ADDI SCREAM_TAB,A6
ADD A14,A6
MOVE *A6+,A4,L ;Get a severe scream going
MOVE *A6,A5,W ;Get the duration
CLR A6
JRUC DS_DOIT
DS_NORMAL
RANDENT TAB_DAMAGE_SOUNDS,NUM_DAMAGE_SNDS,5,L
MOVE A0,A4
DS_DOIT
MOVK 15,A5
CALLR MAKE_MONDOR_SCREAM
MMFM SP,A0,A4,A5,A6
RETS
SCREAM_TAB
.LONG SND_SCREAM
.WORD 50
.LONG SND_BLOW_BACK
.WORD 25
**************************************************************************
* *
* MAKE_MONDOR_SCREAM *
* *
* Routine to make Mondor scream, if he isn't screaming already. *
* *
* A3 = Scream direction 1 = straight, 2 = left, 3 = right *
* A4 = Scream sound script *
* A5 = Scream duration *
* A6 = Scream severity *
* *
**************************************************************************
MAKE_MONDOR_SCREAM
MMTM SP,A0,A1
MOVK NUM_HEAD,A1
CALLA FINDPART ;The head shall scream
JRZ MMS_X ;BR = Couldn't find the part
MOVB A3,*A0(OSCREAM)
MOVE A4,*A0(OSCREAM_SND),L
MOVB A5,*A0(OSCREAM_DUR)
MOVB A6,*A0(OSCREAM_SEV)
MMS_X
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* A_LOAD_ANIMATION *
* *
* Anim Func to load a given animation based on the parts *
* current damage level. *
* *
* *AARG+,L = Table of animations *
* *
* LOAD_ANIMATION *
* *
* Entrypoint to load a given animation, assumes that the *
* part is currently animating. *
* *
* A1 = Table of animations *
* *
* Returns *
* A1 = Animation script loaded *
* *
**************************************************************************
A_LOAD_ANIMATION
CALLA GETAFARG_LONG
MOVE A0,A1
LOAD_ANIMATION
MOVB *A8(ODAMAGE),A14
SLL 29,A14 ;There are only four levels
SRL 24,A14 ;and this is protection
ADD A14,A1
MOVE *A1,A1,L
JAUC STRT_ANIM
**************************************************************************
* *
* A_SELECT_ARM_IDLE_TIME *
* *
* Anim Func to select idle time for an arm. *
* Time is placed in the AnimSLP field of the arm object. *
* *
**************************************************************************
A_SELECT_ARM_IDLE_TIME
MOVK 5,A0
MOVI 20,A1
CALLA RANGERND
MOVB A0,*A8(AnimSLP)
RETS
**************************************************************************
* *
* A_ARM_DECISION *
* *
* Anim Func to make decisions for an arm. *
* *
* AARG+,W = Number of animation we are coming from. *
* *
**************************************************************************
A_ARM_DECISION
CALLA GET_HEAD_PART_A0
MOVE A0,A7 ;Head ptr to stay here for duration
CLRB *A7(OTHROWING_BOMB) ;Clear this every time for safety
CALLA GETAFARG_WORD
JRZ ALD_RETURN_FROM_IDLE ;BR = We just returned from idle
MOVB A0,*A8(OLASTANUM) ;Store where we just came from
ALD_DO_IDLE
MOVI ANIM_ARM_IDLE,A1 ;and run the idle sequence before
JRUC LOAD_ANIMATION ;we continue.
ALD_RETURN_FROM_IDLE
MOVB *A7(OFDAM_GOING),A14 ;If damage show going then no arm action
JRNZ ALD_DO_IDLE ;BR = It is, so don't
MOVB *A7(OSPITTING_FIRE),A14 ;Are FireBalls going?
JRNZ ALD_CK_SHAKE ;Then no throwing
MOVE A7,B14
ADDI OXVAL,B14
MMFM B14,B0,B1,B3 ;LOAD B3:OXPOS, B1:OYPOS, B0:OZPOS
MOVI XBASE,B14
MMFM B14,B2,B4,B5 ;LOAD B5:XBASE, B4:YBASE, B2:ZBASE
SUB B5,B3 ;Universe to World X
ADD B4,B1 ;Universe to World Y
SUB B2,B0 ;Universe to World Z
ABS B3
CMPI Z_THROW_LIMIT,B0 ;Is he too close?
JRLT ALD_CK_SHAKE ;BR = Yes
SRA 16,B1
CMPI Y_THROW_LIMIT,B1 ;Is he too high?
JRLT ALD_CK_SHAKE ;BR = Yes
SRA 16,B3
CMPI X_THROW_LIMIT,B3 ;Is he too close to the edge?
JRGT ALD_CK_SHAKE
; MOVI 800,A0 ;He has a good chance of Grenading
; CALLA RANDPER ;How good?
; JRNC ALD_CK_SHAKE ;BR = Not good enough
CLRB *A8(ONO_GET) ;Allow gun grab after this
MOVI ANIM_ARM_THROW,A1
JRUC ALD_DO_ACTION
ALD_CK_SHAKE
MOVB *A7(OSHAKE_FIST),A14
JRNZ AAD_SHAKE_IT
MOVB *A8(ONO_GET),A14 ;Are we allowed to grab the gun
JRNZ ALD_DO_RAND_ACTION ;BR = No
MOVI 800,A0 ;Chance that we might pull gun
CALLA RANDPER
JRNC ALD_DO_RAND_ACTION ;BR = Just do a random arm action
MOVI ANIM_ARM_GET,A1 ;Johnny get your gun
JRUC ALD_DO_ACTION
ALD_DO_RAND_ACTION
MOVE *A7(OARM_WAIT),A14,W ;Do we have to wait before another?
JRNZ ALD_DO_IDLE ;BR = Yes
MOVK NUM_ARM_ACTIONS,A0 ;Do a little arm swinging
CALLA RAND0
SLL 3,A0
ADDI ARM_TABLE,A0
MOVB *A0,A0
SLL 5,A0
ADDI ACTIONS_ARM,A0
MOVE *A0,A1,L
MOVIM 240,*A7(OARM_WAIT),W ;Make-a-Mondor wait before more
ALD_DO_ACTION
JRUC LOAD_ANIMATION
AAD_SHAKE_IT
MOVI ANIM_ARM_FIST,A1
JRUC LOAD_ANIMATION
NUM_ARM_ACTIONS .EQU 3
ALL_ARM_BITS .EQU 07H ;Must equal (2^NUM_ARM_ACTIONS) - 1
ARM_TABLE
.BYTE ANUM_666, ANUM_FIST, ANUM_PNT
.EVEN
**************************************************************************
* *
* A_POINT_CHECK *
* *
* Anim Func to see if it is O.K. to point. If not, we'll just *
* jump into the arm decision code. *
* *
* A8 = Ptr to arm *
* *
**************************************************************************
A_POINT_CHECK
MOVB *A8(ODAMAGE),A14 ;Is there any damage?
JRZ APC_X ;BR = No, it's O.K. to point.
MOVKB ANUM_PNT,*A8(OLASTANUM)
JRUC ALD_RETURN_FROM_IDLE
APC_X
RETS
**************************************************************************
* *
* A_SELECT_HEAD_IDLE_TIME *
* *
* Anim Func to select idle time for the head. *
* Time is placed in the AnimSLP field of the head object. *
* *
**************************************************************************
A_SELECT_HEAD_IDLE_TIME
MOVK 1,A0
MOVI 60,A1
CALLA RANGERND
MOVB A0,*A8(OHEAD_IDLE)
RETS
**************************************************************************
* *
* A_HEAD_DECISION *
* *
* Anim Func to make decisions for the head. *
* *
* AARG+,W = Number of animation we are coming from. *
* *
**************************************************************************
A_HEAD_DECISION
CALLA GET_HEAD_PART_A0
MOVE A0,A7 ;Head-part stays in A7 for this func
CLRB *A7(OSPITTING_FIRE) ;Clear the fire blow flag for safety
CALLA GETAFARG_WORD
MOVE A0,A5
JRZ AHD_RETURN_FROM_IDLE ;BR = We just returned from idle
CMPK ANUM_SCREAM_LT,A5
JREQ AHD_RETURN_FROM_SCREAM
CMPK ANUM_SCREAM_RT,A5
JRNE AHD_CHECK_NEXT
AHD_RETURN_FROM_SCREAM
MOVI 750,A0
CALLA RANDPER ;Should we shake our heads?
JRNC AHD_CHECK_NEXT ;BR = No
MOVI ANIM_HEAD_SHAKE,A1
JRUC LOAD_ANIMATION
AHD_CHECK_NEXT
CMPK ANUM_SHAKE,A5 ;Are we returning from a shake-off?
JREQ AHD_SCREAM_CLR ;BR = Yes, try to clear the scream
CMPK ANUM_BREATHE_FIRE,A5
JRNE AHD_CK_NXT2
AHD_SCREAM_CLR
MOVB *A8(OSCREAM_SEV),A14 ;Are we pending on a severe scream?
JRNZ AHD_CK_NXT2 ;BR = Yes, don't clear
CLRB *A8(OSCREAM) ;No screaming after FireBall
AHD_CK_NXT2
MOVB A5,*A8(OLASTANUM) ;Store where we just came from
MOVI ANIM_HEAD_IDLE,A1 ;and run the idle sequence before
JRUC LOAD_ANIMATION ;we continue.
AHD_RETURN_FROM_IDLE
*Check to see if we should scream
MOVB *A8(OSCREAM),A0
JRZ AHD_NO_SCREAM
*A0 = OSCREAM value
*A7 Is NOT guaranteed to be the ptr to the head-part here
MONDOR_SCREAM_IMM
MOVB *A8(OSCREAM_SEV),*A8(OCUR_SCREAM_SEV)
CLR A14
MOVB A14,*A8(OSCREAM)
MOVB A14,*A8(OSCREAM_SEV)
MOVB A14,*A8(OTALK_FLAG)
; MOVB *A8(OSCREAM_DUR),*A8(AnimSLP)
MOVB *A8(OSCREAM_DUR),*A8(AnimLoop)
DEC A0
SLL 5,A0
ADDI SCREAM_TABLE,A0
JRUC AHD_LOAD_IT
AHD_NO_SCREAM
*Check to see if all player's have left the game
MOVE @GAME_STATE,A14,W
CMPI INGAMEOV,A14 ;Did we land in game over?
JRNZ AHD_GAME_ON ;BR = No
MOVB *A8(OMOMMY_FLAG),A14 ;Did we already say this?
JRNZ AHD_GAME_ON ;BR = Yes
SOUNDON
MOVKB TNUM_MOMMY,*A8(OTALK_FLAG)
MOVB A14,*A8(OMOMMY_FLAG)
AHD_GAME_ON
*Check to see if it's time to talk at the player
MOVB *A8(OTALK_FLAG),A0
JRZ AHD_NO_TALK ;BR = No talking now
CMPK TNUM_DONE,A0 ;Is this the you are done message?
JRNE AHD_TALK_CK2 ;BR = No
MOVE @CURPLYRS,A1,W ;Check out how many are playing
MOVB *A8(ONUM_DONE),A14 ;Number when we were to talk
CMP A14,A1 ;Is the player still missing?
JRLS AHD_TALK_CK2 ;BR = Yes, then still say it
CLRB *A8(OTALK_FLAG) ;Otherwise kill this phrase
JRUC AHD_NO_TALK
AHD_TALK_CK2
DEC A0
SLL 5,A0
ADDI TALK_SCRIPTS,A0
MOVE *A0,A0,L ;Grab the proper script
MOVB *A0(0),*A8(AnimLoop) ;First byte is syllable count
ADDK 8,A0
MOVB *A0(0),*A8(AnimSLP) ;Load the pause before talking time
ADDK 8,A0
MOVE A0,*A8(OTALK_SCRIPT),L ;Save the script ptr for next frame
MOVIM 450,*A7(OTALK_WAIT),W ;Make-a-Mondor wait before casual conversation
MOVI ANIM_TALK,A1 ;One talk animation does it all!
JRUC LOAD_ANIMATION
AHD_NO_TALK
*Check to see if we should look at the missing gun
MOVB *A8(OGUN_BLOWN),A1
JRZ AHD_NO_GUN_REACT
CLR A14
MOVB A14,*A8(OGUN_BLOWN)
CMPK NUM_ARML,A1
JRNE AHD_LOOK_RIGHT
MOVI ANIM_HEAD_LOOK_LEFT,A1
JRUC LOAD_ANIMATION
AHD_LOOK_RIGHT
MOVI ANIM_HEAD_LOOK_RIGHT,A1
JRUC LOAD_ANIMATION
AHD_NO_GUN_REACT
MOVB *A8(OHEAD_IDLE),A14
DEC A14
MOVB A14,*A8(OHEAD_IDLE)
JRZ AHD_IDLE_DONE
RETS
AHD_IDLE_DONE
MOVB *A7(OFDAM_GOING),A14 ;If damage show going then no fire
JRNZ AHD_DO_IDLE ;BR = It is, so don't
MOVE *A8(OFB_PERC),A0,W
CALLA RANDPER ;Should we idle
JRNC AHD_DO_ACTION ;BR = No
*Mondor will idle is head here
AHD_DO_IDLE
MOVE @CURPLYRS,A0,W ;Check out how many are playing
MOVB *A8(OLAST_CURPLYRS),A14
CMP A14,A0 ;Same as last time we checked?
JREQ AHD_SAME_PLAYERS ;BR = Yes
MOVB A0,*A8(OLAST_CURPLYRS) ;Save this new player count
JRGT AHD_MORE_PLAYERS ;BR = There's more now
MOVB A0,*A8(ONUM_DONE) ;This was the number when you were supposed to say it
MOVI TNUM_DONE,A6 ;Now there are less
JRUC AHD_DO_TALK ;Tell them so
AHD_MORE_PLAYERS
AHD_SAME_PLAYERS
MOVE *A7(OTALK_WAIT),A14 ;Can we talk now?
JRNZ AHD_IDLE_IT_IS ;BR = No, just idle
MOVB *A7(OFDAM_GOING),A14 ;No random babbling during big damage
JRNZ AHD_IDLE_IT_IS
MOVK 8,A5
MOVE *A8(OBABBLE_BITS),A6,W
AHD_TRY_BABBLE_AGAIN
MOVK NUM_BABBLINGS,A0 ;Do a little babbling
CALLA RAND0
BTST A0,A6 ;Have we babbled this yet?
JRZ AHD_BABBLE_OK ;BR = No
DSJS A5,AHD_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
AHD_WALK_BABBLE
BTST A0,A6 ;Is this a good one?
JRZ AHD_BABBLE_OK ;BR = Yes, then use it
INC A0 ;Next
DSJS A5,AHD_WALK_BABBLE
JRUC AHD_IDLE_IT_IS ;BR = Error, no babbles left
AHD_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 AHD_STORE_BABBLE ;BR = No
CLR A6 ;Reset babble counter
AHD_STORE_BABBLE
MOVE A6,*A8(OBABBLE_BITS),W
SLL 3,A0
ADDI BABBLE_TABLE,A0
MOVB *A0,A6
AHD_DO_TALK
MOVB A6,*A8(OTALK_FLAG)
AHD_IDLE_IT_IS
MOVI ANIM_HEAD_IDLE,A1
JRUC LOAD_ANIMATION
*Mondor will do some action with his head here
AHD_DO_ACTION
MOVE *A8(OZVAL),A0,L
MOVE @ZBASE,A2,L
SUB A2,A0 ;Universe to World Z
MOVB *A7(OARMS_GONE),A14 ;If both arms are missing, get ruthless
CMPK 2,A14 ;Are they both gone?
JRLO AHD_STILL_HAS_ARMS ;BR = No
CMPI MIN_FIRE_Z_2,A0 ;Let Mondor fire at a closer Z
JRUC AHD_DO_FB_BRA ;Wait one mach cycle and we'll find out
AHD_STILL_HAS_ARMS
CMPI MIN_FIRE_Z,A0 ;Is Mondor too close to fire?
AHD_DO_FB_BRA
JRLT AHD_DO_IDLE ;BR = Yes
MOVB *A7(OTHROWING_BOMB),A14 ;Is he throwing a bomb?
JRNZ AHD_DO_IDLE ;BR = Yes, then no FireBalls
*Mondor is going to send a FireBall, the only ? is, how many?
MOVE *A7(OXVEL+16),A14,W
ABS A14 ;Is he jaunting sideways?
CMPK 4,A14
JRHS AHD_FIRE_MULTI_BALLS ;BR = Yes, so fire a few
MOVB *A7(OARMS_GONE),A14 ;If both arms are missing, get ruthless
CMPK 2,A14 ;Are they both gone?
; JRLO AHD_FOB_ONE ;BR = No, so fire one and only one
JRHS AHD_FIRE_MULTI_BALLS ;BR = Yes, so always fire multiple
; MOVI 512,A0 ;1 in 2 when just head is left
; CALLA RANDPER
; JRC AHD_FIRE_MULTI_BALLS ;BR = Lucky bastard
AHD_FOB_ONE
MOVK 1,A4
;AHD_NO_SPEAK
; CLR A6
AHD_STUFF_FB_CNT
MOVB A4,*A8(AnimLoop)
; MOVB A6,*A8(OTALK_FLAG)
MOVI ANIM_HEAD_BREATH_FIRE,A1
JRUC LOAD_ANIMATION
*He's going to fire more than one here
AHD_FIRE_MULTI_BALLS
MOVE *A7(ONOARM_TIME),A14,W
CMPI NOARMS_PISSED,A14 ;Has it been a while with no arms?
JRLO AHD_RAND_MULTI_BALLS ;BR = No
MOVK 8,A0 ;Fire five all the time after a min.
JRUC AHD_DO_RAND_MULTI
AHD_RAND_MULTI_BALLS
MOVK 5,A0
AHD_DO_RAND_MULTI
CALLA RANDU ;Pick Random amount
MOVE A0,A4
; CMPK 3,A4 ;Is it enough to merit talking?
; JRLO AHD_NO_SPEAK ;BR = No
JRUC AHD_STUFF_FB_CNT
; MOVK NUM_TAUNTS,A0 ;Do a little taunting
; CALLA RAND0
; SLL 3,A0
; ADDI TAUNT_TABLE,A0
; MOVB *A0,A6
; JRUC AHD_STUFF_FB_CNT
AHD_LOAD_IT
MOVE *A0,A1,L
JRUC LOAD_ANIMATION
NUM_TAUNTS .EQU 3
TAUNT_TABLE
.BYTE TNUM_TAKE, TNUM_BOOM, TNUM_LAUGH
.EVEN
NUM_BABBLINGS .EQU 9
ALL_BABBLE_BITS .EQU 01FFH ;Must equal (2^NUM_BABBLINGS)-1
BABBLE_TABLE
.BYTE TNUM_LAUGH, TNUM_CMON, TNUM_PRAY, TNUM_NIGHT
.BYTE TNUM_DEVOUR, TNUM_GUTS, TNUM_COWARD, TNUM_MONDOR
.BYTE TNUM_NOTHING
.EVEN
**************************************************************************
* *
* A_INITIALIZE_FIRING *
* *
* Anim Func to any variable initialization that might be *
* necessary. *
* *
* A8 = Ptr to part doing the firing. *
* *
**************************************************************************
A_INITIALIZE_FIRING
CLR A14
MOVB A14,*A8(OMISSES)
MOVB A14,*A8(OSHOTS_TAKEN)
MOVKB 1,*A8(OGUN_IN_HAND)
RETS
**************************************************************************
* *
* A_CLR_GUN_FLAG *
* *
* Anim Func to clear the flag that says this hand holds a gun. *
* *
* A8 = Ptr to part that can hold a gun. *
* *
**************************************************************************
;A_CLR_GUN_FLAG
; CLR A14
; MOVB A14,*A8(OGUN_IN_HAND)
; RETS
**************************************************************************
* *
* A_RANDOM_BURST_COUNT *
* *
* Anim Func to load a random Burst count. *
* *
* A8 = Ptr to part doing the firing *
* *
**************************************************************************
;A_RANDOM_BURST_COUNT
; MOVK 2,A0
; MOVK 6,A1
; CALLA RANGERND
; MOVB A0,*A8(OBURSTCNT)
; 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 2,A0
MOVK 6,A1
CALLA RANGERND
MOVB A0,*A8(ORAPIDCNT)
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_ARM_BURST_DECISION
; MOVB *A8(OBURSTCNT),A14
; DEC A14
; MOVB A14,*A8(OBURSTCNT)
; JRNZ AABD_BRANCH
; RETS
;AABD_BRANCH
; CALLA GETAFARG_LONG
; MOVE A0,A1
; JAUC SetAnim
**************************************************************************
* *
* 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_ARM_RAPIDFIRE_DECISION
MOVB *A8(ORAPIDCNT),A14
DEC A14
MOVB A14,*A8(ORAPIDCNT)
JRNZ AARD_BRANCH
RETS
AARD_BRANCH
CALLA GETAFARG_LONG
MOVE A0,A1
JAUC SetAnim
**************************************************************************
* *
* A_CHEST_DAMAGE *
* *
* Anim Func to intialize a chest damage piece. *
* *
* A8 = Ptr to the piece *
* *
**************************************************************************
A_INIT_CHEST_DAMAGE
MOVKB MAX_DAMAGE_LEVEL,*A8(ODAMAGE)
MOVIM DUMRETS,*A8(OGUNVECT),L
JAUC OBJ_ON
**************************************************************************
* *
* A_TORSO_DAMAGE *
* *
* Anim Func to select animations based on the ODAMAGE field. *
* If ODAMAGE = 1 then fall through *
* = 2 then take Branch #1 *
* = 3 then take Branch #2 *
* *
* A8 = Ptr to torso object *
* AARG+,L = Branch #1 *
* AARG+,L = Branch #2 *
* *
**************************************************************************
A_TORSO_DAMAGE
MOVB *A8(ODAMAGE),A6
DEC A6
JRLE ATD_X ;BR = Fall through, no branch
CALLA GETAFARG_LONG
CMPK 1,A6 ;Take branch 1 or 2?
JRNE ATD_2 ;BR = Take 2
MOVE A0,A1
JAUC SetAnim
ATD_2
CALLA GETAFARG_LONG
MOVE A0,A1
JAUC SetAnim
ATD_X
RETS
**************************************************************************
* *
* A_THRUSTERL_INIT *
* *
* Anim Func to initialize the left thruster. *
* *
* A8 = ptr to the left thruster *
* *
**************************************************************************
A_THRUSTERL_INIT
MOVIM SND_THRUSTER1,*A8(OTHRUSTER_SND),L
MOVIM SND_BGND1_OFF,*A8(OTHRUSTER_SNDOFF),L
RETS
**************************************************************************
* *
* A_THRUSTERR_INIT *
* *
* Anim Func to initialize the right thruster. *
* *
* A8 = ptr to the right thruster *
* *
**************************************************************************
A_THRUSTERR_INIT
MOVIM SND_THRUSTER2,*A8(OTHRUSTER_SND),L
MOVIM SND_BGND2_OFF,*A8(OTHRUSTER_SNDOFF),L
RETS
**************************************************************************
* *
* A_THRUSTER_CHECK_x *
* *
* Anim Func to check if a thruster should fire up. *
* x = L or R for left or right thruster. *
* *
* A8 = Ptr to thruster *
* *
**************************************************************************
A_THRUSTER_CHECK_L
CALLA GET_HEAD_PART_A0
CLR A7
MOVE *A0(OXACCEL),A4,W
JRLE ATC_ZTHRUST
JRUC ATC_XBURN
A_THRUSTER_CHECK_R
CALLA GET_HEAD_PART_A0
CLR A7
MOVE *A0(OXACCEL),A4,W
JRGE ATC_ZTHRUST
ATC_XBURN
ABS A4
CMPI SLED_XYACCEL,A4
JRLO ATC_ZTHRUST
MOVB *A0(OXBURN),A7
ATC_ZTHRUST
MOVE *A0(OZACCEL),A14,W
JRZ ATC_FIRE
ABS A14
CMPI SLED_ZACCEL,A14
JRLO ATC_FIRE
MOVB *A0(OZBURN),A14
ADD A14,A7
ATC_FIRE
SLL 1,A7
JRZ ATC_X
MOVB A7,*A8(AnimLoop)
MOVIM ANIM_THRUSTER_FIRE,*A8(AnimFrm),L
CLRB *A8(AnimSlp)
MOVE *A8(OTHRUSTER_SND),A0,L
JRZ ATC_X
JAUC ONESND_Z
ATC_X
RETS
**************************************************************************
* *
* A_THRUSTER_LOOP *
* *
* Anim func to loop the thruster fire animation. *
* *
* A8 = Ptr to thruster *
* *
**************************************************************************
A_THRUSTER_LOOP
MOVB *A8(AnimLoop),A14
DEC A14
MOVB A14,*A8(AnimLoop)
JRLE ATL_FALLOUT
MOVIM ANIM_THRUSTER_FIRE,*A8(AnimFrm),L
RETS
ATL_FALLOUT
MOVE *A8(OTHRUSTER_SNDOFF),A0,L
JRZ ATL_X
JAUC ONESND
ATL_X
RETS
**************************************************************************
* *
* A_POUND_FUNC *
* *
* Anim Func for pounding reaction. *
* *
**************************************************************************
A_POUND_FUNC
MOVE A8,A5
CALLA GET_HEAD_PART
MOVI 28000H,A0
CALLA RANDU
ADDI 8000H,A0
ADDRM A0,*A8(OYVEL),L
SOUNDZ SND_POUND
MOVE A5,A8
MOVB *A8(AnimLoop),A14
DEC A14
MOVB A14,*A8(AnimLoop)
JRZ APF_X
MOVE *A8(AnimScr),*A8(AnimFrm),L
APF_X
RETS
**************************************************************************
* *
* A_LOSE_GUN_IFNECC *
* *
* Anim Func to let the gun fly off of Mondor's hand, if *
* he has one. *
* *
* A8 = Ptr to arm part *
* *
**************************************************************************
A_LOSE_GUN_IFNECC
MOVB *A8(OGUN_IN_HAND),A14
JRZ ALGI_X
MOVI 80H,A3 ;Max Z velocity
MOVI 20000H,A0 ;Max X&Y velocities
CALLA PreFrag_Center ;Blow from the center
MOVI FRAG_GUN_FLY,B14 ;Use this script
JAUC Fragger ;And get it goin' Boy
ALGI_X
RETS
**************************************************************************
* *
* A_LOSE_GLASSES_IFNECC *
* *
* Anim Func to let the glasses fly off of Mondor's head, if *
* he has them. *
* *
* A8 = Ptr to head part *
* *
**************************************************************************
A_LOSE_GLASSES_IFNECC
MOVE *A8(OPARTS),A0,L
MOVE *A0(OFLAGS),A14,W
BTST B_NODISP,A14
JRNZ ALGLI_X
ORI M_NODISP,A14
MOVE A14,*A0(OFLAGS),W
MOVI 80H,A3 ;Max Z velocity
MOVI 20000H,A0 ;Max X&Y velocities
CALLA PreFrag_Center ;Blow from the center
MOVI FRAG_GLASSES_FLY,B14 ;Use this script
JAUC Fragger ;And get it goin' Boy
ALGLI_X
RETS
**************************************************************************
* *
* A_CLR_OGUN_BLOWN *
* *
* Anim Func to set the OGUN_BLOWN flag. *
* *
**************************************************************************
A_CLR_OGUN_BLOWN
MOVK NUM_HEAD,A1
CALLA FINDPART
JRZ ACOB_X
CLR A14
MOVB A14,*A0(OGUN_BLOWN)
ACOB_X
RETS
**************************************************************************
* *
* A_TURN_ON_ARM_STUMP *
* *
* Anim Func to fire up the arm bone stump. *
* And increment OARMS_GONE in the head-part. *
* *
* A8 = Ptr to arm part that just stumped. *
* *
**************************************************************************
A_TURN_ON_ARM_STUMP
CALLA GET_HEAD_PART_A0
INCB *A0(OARMS_GONE)
CLRB *A0(OTHROWING_BOMB)
MOVB *A8(OPARTID),A1
ADDK NUM_ABONEL-NUM_ARML,A1
CALLA FINDPART
JRZ ATOAS_X
CALLA OBJON
MOVI ANIM_ARM_STUMP,A1
JAUC STRTANIM
ATOAS_X
RETS
**************************************************************************
* *
* A_BLOW_PART *
* *
* Anim func to call function in OPART_BLOW_FUNC *
* *
* A8 = Ptr to part blowing *
* *
**************************************************************************
A_BLOW_PART
.IF AUSTRALIA
RETS
.ENDIF
MOVE *A8(OPART_BLOW_FUNC),A14,L
JRZ ABP_X
JUMP A14
ABP_X
RETS
**************************************************************************
* *
* A_BLOW_HEAD *
* *
* Anim Func to blow the head part. *
* *
* A8 = Ptr to head doing the blowing *
* *
**************************************************************************
A_BLOW_HEAD
MOVI HEAD_BLOW_INIT,B0
MOVI -10000H,A1
MOVI 10000H,A2
MOVI -60000H,A3
MOVI -20000H,A4
JAUC BLOW_PART
**************************************************************************
* *
* A_BLOW_ARM *
* *
* Anim Func to blow an arm part. *
* *
* A8 = Ptr to arm doing the blowing *
* *
**************************************************************************
A_BLOW_ARM
MOVI ARM_BLOW_INIT,B0
JRUC A_BLOW_GEN
**************************************************************************
* *
* A_BLOW_LEG *
* *
* Anim Func to blow a leg part. *
* *
* A8 = Ptr to leg doing the blowing *
* *
**************************************************************************
A_BLOW_LEG
CALLA GET_HEAD_PART_A0
MOVI LEG_BLOW_INIT,B0
A_BLOW_GEN
MOVI 20000H,A1
MOVI 60000H,A2
MOVI -20000H,A3
MOVI 20000H,A4
JAUC BLOW_PART
**************************************************************************
* *
* A_PULL_ARM_SPURT *
* *
* Anim Func to pull the arm blood spurt from the Mega Mondor *
* multi-parter and give it some random X velocity. *
* *
* A8 = Ptr to blood part *
* *
**************************************************************************
A_PULL_ARM_SPURT
CALLA PULL_PART
MOVI 28000H,A0
CALLA RAND0
MOVE *A8(OCTRL),A14,W
BTST B_FLIPH,A14
JRNZ APAS_ADDX
NEG A0
APAS_ADDX
ADDRM A0,*A8(OXVEL),L
RETS
**************************************************************************
* *
* A_PICK3 *
* *
* Anim Func to randomly pick one of three animation branches. *
* *
* A8 = Ptr to object *
* AARG+,L = First branch *
* AARG+,L = Second branch *
* AARG+,L = Third branch *
* *
**************************************************************************
A_PICK3
CALLA GETAFARG_LONG
MOVE A0,A1
MOVK 3,A0
CALLA RAND0
JAZ SetAnim
MOVE A0,A2
CALLA GETAFARG_LONG
MOVE A0,A1
DEC A2
JAZ SetAnim
CALLA GETAFARG_LONG
MOVE A0,A1
JAUC SetAnim
**************************************************************************
* *
* A_START_BIG_SHAKE *
* *
* Anim Func to start a big Mondor shake *
* *
* A8 = Ptr to any part of Mondor *
* *
**************************************************************************
A_START_BIG_SHAKE
MOVK NUM_PIPEL,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_START_MEDIUM_SHAKE *
* *
* Anim Func to start a MEDIUM Mondor shake *
* *
* A8 = Ptr to any part of Mondor *
* *
**************************************************************************
A_START_MEDIUM_SHAKE
MOVK NUM_FOOTR,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_POUND_SCREAM *
* *
* Anim Func to determine if we should scream while we pound. *
* *
* A8 = Ptr to pounding arm *
* *
**************************************************************************
A_POUND_SCREAM
MOVK 1,A3
MOVK 1,A6
JRUC DEFAULT_SCREAM
**************************************************************************
* *
* A_SCREAM_SND *
* *
* Anim Func to activate the proper scream sound for *
* the current scream animation. *
* *
* A8 = ptr to Mondor's head *
* *
**************************************************************************
A_SCREAM_SND
MOVE *A8(OSCREAM_SND),A0,L
CALLA ONESND_Z
JRZ ASS_SOUND_MADE ;BR = Sound was successful
MOVI ANIM_HEAD_IDLE,A1 ;Run the idle,
JRUC LOAD_ANIMATION ;immeadiately
ASS_SOUND_MADE
MOVE A0,*A8(OCUR_SCREAM),L ;Keep here for scream check
RETS
**************************************************************************
* *
* A_SCREAM_HOLD *
* *
* Anim func to call for every tick of the mouth open. *
* *
* A8 = Ptr to the head object *
* AARG+,L = Where to jump to hold mouth open longer. *
* *
**************************************************************************
A_SCREAM_HOLD
MOVE *A8(OCUR_SCREAM),A0,L
CALLA IS_SOUND ;Are we still running the scream?
JAZ A_Anim_DSJ ;BR = Yes, I will allow you to continue
RETS
**************************************************************************
* *
* A_BIG_SHIT_SCREAM *
* *
* Anim func to make Mondor do the big shit scream for *
* losing a part, if the part is not the head. *
* *
* A8 = ptr to part being lost *
* *
**************************************************************************
A_BIG_SHIT_SCREAM
MOVB *A8(OPARTID),A14
CMPK NUM_HEAD,A14
JREQ ABSS_X
MOVK 1,A3
MOVI SND_PART_LOST,A4
MOVI 80,A5
MOVK 1,A6
JRUC MAKE_MONDOR_SCREAM
ABSS_X
RETS
**************************************************************************
* *
* A_LOAD_PART_BLOW *
* *
* Anim func to load the OPART_BLOW_FUNC field of an object. *
* *
**************************************************************************
A_LOAD_PART_BLOW
CALLA GETAFARG_LONG
MOVE A0,*A8(OPART_BLOW_FUNC),L
RETS
**************************************************************************
* *
* A_CHECK_POUND *
* *
* Anim func to see if this pissed Mondor off enough to *
* pound. *
* *
* A8 = ptr to arm *
* *
**************************************************************************
A_CHECK_POUND
MOVKB 1,*A8(ONO_GET) ;Limit gun grab 'til after next throw
MOVB *A8(OSHOTS_TAKEN),A14
CMPK 10,A14 ;Did he shoot enough before losing?
JRLO ACP_POUND ;BR = No, so get pissed, you should.
MOVI ANIM_ARM_IDLE,A1
JRUC LOAD_ANIMATION
ACP_POUND
MOVI ANIM_ARM_POUND,A1
JRUC LOAD_ANIMATION
**************************************************************************
* *
* 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
; CLRB *A0(OFDAM_GOING)
MOVIB 200,*A0(OCLRFDAM) ;Delay clearing for this many ticks
MOVB *A8(OPARTID),A7
CMPK NUM_HEAD,A7
JREQ ACIF_GO_FINAL
CMPK NUM_ARML,A7 ;Was this an arm that got blasted?
JRLO ACIF_LEG ;BR = No, must've been a leg then
MOVB *A0(OARMS_GONE),A14
CMPK 2,A14 ;First or second arm toasted?
JRLO ACIF_FIRST_ARM ;BR = First arm
MOVK TNUM_RIP,A6 ;Say this for the second arm
JRUC ACIF_TALK
ACIF_FIRST_ARM
MOVK TNUM_FLESH,A6 ;Say this for the first arm
JRUC ACIF_TALK
ACIF_LEG
MOVB *A0(OLEGS_GONE),A14
INC A14
MOVB A14,*A0(OLEGS_GONE)
CMPK 2,A14 ;First or second leg toasted?
JRLO ACIF_FIRST_LEG ;BR = First leg
MOVK TNUM_GETUP,A6 ;Say this for the second leg
JRUC ACIF_TALK
ACIF_FIRST_LEG
MOVK TNUM_WORSE,A6 ;Say this for the first leg
ACIF_TALK
MOVK NUM_HEAD,A1
CALLA FINDPART
MOVB A6,*A0(OTALK_FLAG) ;Still taunt the player
JAUC PULL_ANIM
*Start the final explosion
*A0 = Ptr to head-part
ACIF_GO_FINAL
MOVE A8,A1
MOVE A0,A8
CALLA ALL_COLLS_OFF
MOVE A1,A8
MOVKB 1,*A0(OFDAM_GOING) ;Flag the final damage
MOVIM 1,@GUNS_OFF,W
MOVB *A0(OPARTS_LOST),A14
CMPK 5,A14
JRLO ACIF_NOT_TOTAL
MOVKM 1,@MONDOR_TOTAL,W ;Set the total flag
ACIF_NOT_TOTAL
MOVI PID_POWERUPD0,A0
CALLA KILLPROC_ALL
MOVI ANIM_FINAL_EXPLOSION,A1
JAUC SetAnim
**************************************************************************
* *
* A_TURN_OFF_NEXT_PART *
* *
* Anim func to turn off the next part in the craft. *
* *
* A8 = Ptr to Mondor part *
* AARG+,L = Branch if there are more parts to turn off *
* *
**************************************************************************
A_TURN_OFF_NEXT_PART
CALLA GET_HEAD_PART_A0
MOVK 1,A6
ATONP_LOOP
MOVE *A0(OFLAGS),A14
BTST B_NODISP,A14
JRNZ ATONP_NEXT ;BR = Already off
CALLA OBJOFF
CALLA GETAFARG_LONG
MOVE A0,*A8(AnimFrm),L
RETS
ATONP_NEXT
INC A6
CMPK NUM_TORSOL,A6
JRHS ATONP_ALL_DONE
MOVE *A0(OPARTS),A0,L
JRNZ ATONP_LOOP
ATONP_ALL_DONE
RETS
**************************************************************************
* *
* A_KEEP_US_CENTERED *
* *
* Anim Func to keep the OCENTERED flag set. *
* *
* A8 = Ptr to any Mondor part. *
* *
**************************************************************************
A_KEEP_US_CENTERED
CALLA GET_HEAD_PART_A0
MOVKB 2,*A0(OCENTER_FLAG)
MOVIB 120,*A0(OCLRCENTER)
RETS
**************************************************************************
* *
* A_GOOD_TO_GO *
* *
* Anim func to set up Mondor for the final explode. *
* *
* A8 = ptr to any mondor part. *
* *
**************************************************************************
A_GOOD_TO_GO
CALLA GET_HEAD_PART
CLRB *A8(OCENTER_FLAG) ;No more centering
CALLA PULL_ANIM ;No more random movement
MOVK NUM_FOOTL,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_MAKE_HEAD_LOOK *
* *
* Anim Func to make the head look at the hand that lost *
* the gun. *
* *
* A8 = Ptr to hand that lost it. *
* *
**************************************************************************
A_MAKE_HEAD_LOOK
MOVK NUM_HEAD,A1
CALLA FINDPART
JRZ AMHL_NO_HEAD_FOUND
MOVB *A8(OPARTID),*A0(OGUN_BLOWN) ;Mark it for the head
AMHL_NO_HEAD_FOUND
CALLA GET_HEAD_PART
CLRM *A8(OARM_WAIT),W ;Let arm work again
RETS
**************************************************************************
* *
* A_START_TALKIN *
* *
* Anim func to fire off the talk sound after the intial *
* wait. *
* *
* A8 = Ptr to Mondor's head *
* AARG+,L = Script loop point *
* *
**************************************************************************
A_START_TALKIN
CALLA GETAFARG_LONG
MOVE A0,*A8(AnimScr),L ;Setup talk loop
MOVE *A8(OTALK_SCRIPT),A1,L
MOVE *A1+,A0,L
MOVE A1,*A8(OTALK_SCRIPT),L
MOVE A0,*A8(OTALK_SND),L
CALLA ONESND ;Fire off the speech
JRZ AST_SOUND_MADE ;BR = Sound was successful
CLRB *A8(OTALK_FLAG) ;Clear that flag
MOVI ANIM_HEAD_IDLE,A1 ;Run the idle,
JRUC LOAD_ANIMATION ;immeadiately
AST_SOUND_MADE
JRUC A_TALK_NEXT ;And setup the next
**************************************************************************
* *
* A_TALK_NEXT *
* *
* Anim func to load the next talk sleep time. *
* *
* A8 = Ptr to Mondor's head *
* *
**************************************************************************
A_TALK_NEXT
; MOVE *A8(OTALK_SND),A0,L
; JRZ ATN_SOUND_MADE
; CALLA ONESND ;Fire off the speech
; JRZ ATN_SOUND_MADE ;BR = Sound was successful
; CLRB *A8(OTALK_FLAG) ;Clear that flag
; MOVI ANIM_HEAD_IDLE,A1 ;Run the idle,
; JRUC LOAD_ANIMATION ;immeadiately
;ATN_SOUND_MADE
; CLRM *A8(OTALK_SND),L
MOVE *A8(OTALK_SCRIPT),A1,L
MOVB *A1(0),*A8(AnimSLP) ;Load next close pause
ADDK 8,A1
MOVE A1,*A8(OTALK_SCRIPT),L
RETS
**************************************************************************
* *
* A_TALK_END *
* *
* Anim func for completion of one syllable of speech. *
* Decrements syllable count and loads next sleep if necessary. *
* *
* A8 = Ptr to Mondor's head *
* *
**************************************************************************
A_TALK_END
MOVB *A8(OSCREAM),A0 ;Does Mondor need a scream?
JRZ ATE_NO_SCREAMING ;BR = No
MOVB *A8(OSCREAM_SEV),A14 ;If so, is it worth blowing this off?
JRNZ MONDOR_SCREAM_IMM ;BR = Yes
ATE_NO_SCREAMING
MOVE @GAME_STATE,A14,W
CMPI INGAMEOV,A14 ;Did we land in game over?
JRNZ ATE_GAME_ON ;BR = No
MOVB *A8(OTALK_FLAG),A14 ;We are in game over
CMPI TNUM_MOMMY,A14 ;Only allowed to say, mommy line
JREQ ATE_GAME_ON ;BR = and we are
ATE_GET_THE_HELL_OUT
CLRB *A8(OTALK_FLAG) ;Clear that flag
MOVI ANIM_HEAD_IDLE,A1 ;Run the idle,
JRUC LOAD_ANIMATION ;immeadiately
ATE_GAME_ON
MOVE *A8(OTALK_SND),A0,L
CALLA IS_SOUND ;Are we still running the same sound?
JRNZ ATE_GET_THE_HELL_OUT ;BR = No
MOVB *A8(AnimLoop),A14
DEC A14 ;Any more syllables left?
MOVB A14,*A8(AnimLoop)
JRNZ ATE_NEXT_SYL ;BR = Yes, do next syllable
CLRB *A8(OTALK_FLAG) ;Clear that flag
MOVB A14,*A8(OSCREAM) ;Clear scream flag, it looks stupid
JRUC ATE_X
ATE_NEXT_SYL
MOVE *A8(OTALK_SCRIPT),A1,L ;Advance the script
; MOVE *A1(0),*A8(OTALK_SND),L ;Load the next sound
; ADDK 32,A1
MOVB *A1(0),*A8(AnimSLP) ;Load next open pause
ADDK 8,A1
MOVE A1,*A8(OTALK_SCRIPT),L
MOVE *A8(AnimScr),*A8(AnimFrm),L ;Loop the animation
ATE_X
RETS
**************************************************************************
* *
* A_HEAD_INTRO *
* *
* Anim func to setup Mondor's head for the intro speech. *
* *
* A8 = Ptr to Mondor's head *
* *
**************************************************************************
A_HEAD_INTRO
MOVKB TNUM_SUSHI,*A8(OTALK_FLAG)
RETS
**************************************************************************
* *
* A_INIT_ARM *
* *
* Anim func to initialize Mondor's arms for action. *
* *
* A8 = Ptr to arm object *
* *
**************************************************************************
A_INIT_ARM
CALLR TURN_ON_SCALE_SHAD
MOVI FLESH1p,A0
CALLA CHANGE_PAL
ORIM M_NOPARTANI,*A8(OFLAGS),W
MOVI ANIM_ARM_INIT,A1
JAUC STRT_ANIM
**************************************************************************
* *
* A_INIT_HEAD *
* *
* Anim func to initialize Mondor's head for action. *
* *
* A8 = Ptr to head object *
* *
**************************************************************************
A_INIT_HEAD
CALLR TURN_ON_SCALE_SHAD
MOVI FHEDcc1,A0
CALLA CHANGE_PAL
ORIM M_NOPARTANI,*A8(OFLAGS),W
MOVIB -2,*A8(OZOFF)
PUSH A8
CALLA GET_HEAD_PART
MOVE *A8(OZVAL),A1,L
CALLA SET_ANIPZU
PULLQ A8
MOVI ANIM_HEAD_INTRO,A1
JAUC STRT_ANIM
**************************************************************************
* *
* A_INIT_GLASSES *
* *
* Anim func to initialize Mondor's head for action. *
* *
* A8 = Ptr to head object *
* *
**************************************************************************
A_INIT_GLASSES
ANDNIM M_NOSCALE|M_NOSHADOW,*A8(OFLAGS),W
MOVI GLASPAL2,A0
CALLA CHANGE_PAL
MOVIB -3,*A8(OZOFF)
PUSH A8
CALLA GET_HEAD_PART
MOVE *A8(OZVAL),A1,L
CALLA SET_ANIPZU
PULLQ A8
RETS
**************************************************************************
* *
* A_START_MOVEMENT *
* *
* Anim func to start the master part animating with the *
* move decision animation. *
* *
* A8 = Ptr to any part *
* *
**************************************************************************
A_START_MOVEMENT
CALLA GET_HEAD_PART
MOVI ANIM_MOVEMENT,A1
CALLA STRT_ANIM
MOVE *A8(OPARTS),A8,L
MOVI ANIM_VELOCITY_WATCH,A1
JAUC STRT_ANIM
**************************************************************************
* *
* A_START_GEAR_OUT *
* *
* Anim func to start the pods and foot rests extending. *
* *
* A8 = Ptr to any part of Mondor *
* *
**************************************************************************
A_START_GEAR_OUT
CALLA GET_HEAD_PART_A0
MOVK 8,A6
MOVI CRAFT_CVECT,A1
ASGO_CVECT_LOOP
MOVE A1,*A0(OCVECT),L
MOVE *A0(OPARTS),A0,L
DSJS A6,ASGO_CVECT_LOOP
MOVK NUM_PODL,A1
CALLA FINDPART ;Get the left pod object
MOVI ANIM_THRUSTER_OUT_L,A1
CALLA STRTANIM ;Start it out
MOVE *A0(OPARTS),A0,L
MOVI ANIM_THRUSTER_OUT_R,A1
CALLA STRTANIM ;Start right on it's way
MOVK NUM_PLATE,A1
CALLA FINDPART ;Find license plate
MOVI ANIM_PLATE_OUT,A1 ;Start
CALLA STRTANIM
MOVK NUM_PIPEL,A1
CALLA FINDPART ;Find left foot rest pipe
MOVI ANIM_FOOT_OUT,A1 ;Start
CALLA STRTANIM
MOVE *A0(OPARTS),A0,L ;Now the right side
JAUC STRTANIM ;Start
**************************************************************************
* *
* A_FOOT_ON *
* *
* Anim func to turn on the foot rest parts. *
* *
* A8 = Ptr to a pipe object *
* *
**************************************************************************
A_FOOT_ON
CALLR TURN_ON_SCALE_SHAD
MOVK NUM_FOOTL,A1
CALLA FINDPART ;Get the left foot rest object
CALLA OBJON ;Turn it on, Turn it on Again
MOVE *A0(OPARTS),A0,L ;Same with the right
JAUC OBJON
**************************************************************************
* *
* A_THRUSTER_EXTENDED *
* *
* Anim func to run on a thruster when it is fully extended. *
* *
* A8 = Ptr to thruster *
* AARG+,L = Animation to jump to *
* *
**************************************************************************
A_THRUSTER_EXTENDED
CALLR TURN_ON_SCALE_SHAD
JAUC A_AnimGo
**************************************************************************
* *
* A_SCALE_PAL *
* *
* Anim func to turn on scaling and change the palette of *
* an object. *
* *
* A8 = Ptr to object *
* AARG+,L = New palette *
* *
**************************************************************************
A_SCALE_PAL
CALLR TURN_ON_SCALE_SHAD
JAUC A_CHANGE_PAL
**************************************************************************
* *
* A_OBJ_OFF_SCALE_PAL *
* *
* Anim func to turn an object off, turn on scaling and *
* change the palette! Whew! *
* *
* A8 = Ptr to object *
* AARG+,L = New palette *
* AARG+,L = Alternate, non-violent palette *
* *
**************************************************************************
A_OBJ_OFF_SCALE_PAL
CALLR TURN_ON_SCALE_SHAD
CALLA OBJ_OFF
JRUC A_CHANGE_PAL_VIOLENCE
**************************************************************************
* *
* A_GET_SHAD_MULTI *
* *
* Anim func to get a shadow for the given multi-part object. *
* *
* A8 = Ptr to any part *
* *
**************************************************************************
A_GET_SHAD_MULTI
CALLA GET_HEAD_PART
JAUC GET_SHAD_MULTI
**************************************************************************
* *
* TURN_ON_SCALE_SHAD *
* *
* Kill the NOSCALE flag on an object and it's shadow. *
* *
* A8 = Ptr to object *
* *
**************************************************************************
TURN_ON_SCALE_SHAD
PUSH A0
ANDNIM M_NOSCALE|M_NOSHADOW,*A8(OFLAGS),W
MOVE *A8(OSHAD),A0,L
JRZ TOS_X
ANDNIM M_NOSCALE,*A0(OFLAGS),W
TOS_X
PULLQ A0
RETS
**************************************************************************
* *
* MONDOR_CVECT *
* *
**************************************************************************
MONDOR_CVECT
WWL OID_PROCKET,~MASK_PLAYER,MONDOR_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,MONDOR_EXPLOSION_COLL
WL 0,DUMCRETS
*Special chest gun vector
MONDOR_CHEST_CVECT
WWL OID_PROCKET,~MASK_PLAYER,MONDOR_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,MONDOR_CHEST_EXP_COLL
WL 0,DUMCRETS
**************************************************************************
* *
* CRAFT_CVECT *
* *
**************************************************************************
CRAFT_CVECT
WWL OID_PROCKET,~MASK_PLAYER,MONDOR_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,CRAFT_EXPLOSION_COLL
WL 0,DUMCRETS
**************************************************************************
* *
* PLATE_CVECT *
* *
**************************************************************************
PLATE_CVECT
WWL OID_PROCKET,~MASK_PLAYER,MONDOR_ROCKET_COLL
WWL OID_PEXPLOSION,~MASK_PLAYER,PLATE_EXPLOSION_COLL
WL 0,DUMCRETS
*Craft seat hits the ground
CRAFT_SEAT_CVECT
WWL OID_GRND,0FFFFH,SEAT_GROUND_COLL
WL 0,DUMCRETS
**************************************************************************
* *
* SEAT_GROUND_COLL *
* *
* Ground collision service for the craft's seat. *
* *
* A8 = Ptr to seat object *
* *
**************************************************************************
SEAT_GROUND_COLL
SOUND1 SND_SEAT_BOUNCE
MOVE *A8(OYVEL),A3,L
CMPI 80000H,A3
JRLT SGC_NOT_FIRST
MOVK NUM_TORSOL,A1
CALLA FINDPART
MOVI ANIM_JOSH_MORPH,A1
; MOVI ANIM_START_MONDOR,A1
CALLA STRTANIM
SGC_NOT_FIRST
SRA 2,A3
CMPI 10000H,A3
JRGE SGC_OK
CLR A3
SGC_OK
NEG A3
MOVE A3,*A8(OYVEL),L
JRNZ SGC_X
MOVE A3,*A8(OYACCEL),W
MOVIM CRAFT_CVECT,*A8(OCVECT),L
ANDNIM M_GCOLL,*A8(OFLAGS),W
CREATE PID_HELGA,PROC_THRONE_HELGA
SGC_X
RETS
**************************************************************************
* *
* MONDOR_ROCKET_COLL - Collision vector with Player rocket bomb. *
* A0 = Ptr to rocket object *
* A8 = Ptr to MONDOR part *
* *
**************************************************************************
MONDOR_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
**************************************************************************
* *
* MONDOR_EXPLOSION_COLL - Collision vector for Player explosion against *
* generic Mondor part. *
* A0 = Ptr to explosion object *
* A8 = Ptr to MONDOR part *
* *
**************************************************************************
MONDOR_EXPLOSION_COLL
MOVI 512,A0
CALLA RANDPER
JRC MEC_DO_SMALL_BLOW
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
JRZ MEC_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 MONDOR_ZMAX-100H,A1 ;Should we blast him back?
JRGT MEC_NO_BLOW_BACK ;BR = No, not close enough.
JRUC MEC_JERK_HIM
MEC_DO_SMALL_BLOW
MOVE A0,A4
MOVK 20,A0
MOVK 4,A1
CALLA RANGERND
SWAP A0,A4
JRUC MONDOR_TAKE_ROCKET
**************************************************************************
* *
* MONDOR_CHEST_EXP_COLL - Collision vector for Player explosion against *
* Mondor's chest. *
* A0 = Ptr to explosion object *
* A8 = Ptr to MONDOR part *
* *
**************************************************************************
MONDOR_CHEST_EXP_COLL
MOVI 50,A4
*A4 = Blow back duration, if we decide to blow back
MONDOR_TAKE_ROCKET
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
JRZ MEC_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 MONDOR_ZMAX-100H,A1 ;Should we blast him back?
JRGT MEC_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 MEC_JERK_HIM ;BR = Yes, then don't go back
MOVB *A0(ONOSET_ZVEL),A14 ;Are we currently blowing back?
JRNZ MEC_JERK_HIM ;BR = Yes, then don't do it again
MOVE *A0(OZVEL),A14,L ;Determine how much time to blowback
JRGE MEC_FULL_BLOWBACK ;BR = Set full time
SRA 8,A14
ADD A4,A14 ;Calculate accordingly
CMPK 5,A14 ;Too small?
JRGE MEC_SET_ZBLOW_TIME ;BR = no, it'll do
MOVK 5,A14 ;Min ticks
JRUC MEC_SET_ZBLOW_TIME
MEC_FULL_BLOWBACK
MOVE A4,A14 ;Max ticks
MEC_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
MOVK 1,A3
CLR A6
CMPK 20,A4 ;Was this a short burst?
JRLS MEC_DO_BLOW_SCREAM ;BR = Yes, then short scream
MOVK 2,A6 ;Do the patented blow back yell
MEC_DO_BLOW_SCREAM
CALLR DEFAULT_SCREAM
JRUC MEC_NO_BLOW_BACK
*Just give the rig a jolt.
*A5 = Ptr to explosion object
MEC_JERK_HIM
MOVK NUM_FOOTL,A1
CALLA FINDPART ;The foot rest will shake ust
JRZ MEC_NO_BLOW_BACK ;BR = Couldn't find the part
MOVI ANIM_SMALL_SHAKE,A1 ;Start a shaker anim
CALLA STRTANIM
MEC_NO_BLOW_BACK
CALLA OBJ_CONST ;Turn constant color on
MOVKB 6,*A8(OFLASHTIME)
MOVB *A8(OROCKETHIT),A14 ;Should we actually take damage?
JRNZ MEC_X ;BR = No, we are waiting
MOVKB 1,*A8(OROCKETHIT) ;Flag the hit, and use to delay
SOUNDZ SND_EXPLODE_ON_MONDOR ;Make our own explosion sound
MOVE *A5(OID),A0,W ;We can find out who did this
CALLA POID_TO_PDATA ;by getting the Player's data area.
*
*Entry point for somebody to score a major hit on Mondor.
*A2 = Ptr to player doing the hitting
*A5 = 0
*A8 = Ptr to Mondor part being hit
*
MONDOR_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 MEC_DONE ;BR = Right, then no one else goes
MOVK 5,A1
MOVI OHITS,A3
CALLA HIT_ENEMY
JRLO MEC_NO_KILL
CLR A14
MOVE A14,*A8(OHITS),L
MOVB *A8(ODAMAGE),A14
INC A14
CMPK MAX_DAMAGE_LEVEL,A14 ;Is the damage maxed out?
JRLS MEC_DAMAGE ;BR = No, go to the next level!
*
*Cannot lose a part completely until all other parts are fully damaged.
*
*Only one final damage animation at a time
; MOVB *A7(OFDAM_GOING),A14
; JRNZ MEC_DONE
*Except for the legs, they can go right away
MOVB *A8(OPARTID),A4
CMPK NUM_LEGL,A4 ;Is this the left leg?
JREQ MEC_LOSE_PART ;BR = Yes, then it my blow when ready
CMPK NUM_LEGR,A4 ;Is this the right leg?
JREQ MEC_LOSE_PART ;BR = Yes, then it my blow when ready
MOVK NUM_TORSOL,A1 ;Start with the Torso pieces
CALLA FINDPART ;Get the part
MOVK NUM_TORSO_PARTS,A6
MEC_CHECK_NEXT_DAMAGE
MOVB *A0(ODAMAGE),A14
CMPK MAX_DAMAGE_LEVEL,A14 ;Is this part fully damaged?
JRLO MEC_NO_KILL ;BR = No, then we cannot lose part
MOVE *A0(OPARTS),A0,L
DSJS A6,MEC_CHECK_NEXT_DAMAGE
*A4 = OPARTID
MEC_LOSE_PART
CMPK NUM_HEAD,A4 ;Is this his head?
JRNE MEC_LOSE_PART2 ;BR = No, just lose the part
*
*Both arms must be toasted before head is allowed to go
*
MOVB *A7(OARMS_GONE),A14
CMPK 2,A14 ;Are they both gone?
JRLO MEC_NO_KILL ;BR = No
MEC_LOSE_PART2
SUBK NUM_TORSOL,A4
SLL 5,A4
ADDI FINAL_ANIM_TABLE,A4
MOVE *A4,A1,L ;Get the final animation for this part
JRZ MEC_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
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 9900,A1
CALLA SCORE ;Killing is the best for points
MOVK NUM_PIPEL,A1
CALLA FINDPART ;The foot rest will shake ust
JRZ MEC_DONE ;BR = Couldn't find the part
MOVI ANIM_BIG_SHAKE,A1 ;Start a shaker anim
CALLA STRTANIM
JRUC MEC_DONE
*We can damage our little hearts out!
*A7 = Ptr to head-part
MEC_DAMAGE
MOVB A14,*A8(ODAMAGE)
MOVB *A8(OPARTID),A14
SUBK NUM_TORSOL,A14
SLL 5,A14
ADDI DAMAGE_ANIM_TABLE,A14
MOVE *A14,A1,L ;Get the damage animation for this part
JRZ MEC_NO_DAMAGE
; CALLA GET_HEAD_PART_A0
; MOVKB 1,*A0(OCENTER_FLAG)
; MOVIB 70,*A0(OCLRCENTER)
CALLA STRT_ANIM ;and start it animating
MOVI 4900,A1
CALLA SCORE ;Damage is good for points
MOVK NUM_FOOTR,A1
CALLA FINDPART ;The foot rest will shake ust
JRZ MEC_DONE ;BR = Couldn't find the part
MOVI ANIM_MEDIUM_SHAKE,A1 ;Start a shaker anim
CALLA STRTANIM
MOVK 1,A3
CLR A6
CALLR DEFAULT_SCREAM
; RANDENT TAB_DAMAGE_SOUNDS,NUM_DAMAGE_SNDS,5,L
; CALLA ONESND_Z
JRUC MEC_DONE
MEC_NO_DAMAGE
*
*A5 = Ptr to explosion object, 0 = No explosion object
*
MEC_NO_KILL
MOVB *A8(OPARTID),A6
CMPK NUM_HEAD,A6
JRNE MEC_CHECK_ARM
*Make head scream when hit by a rocket
MOVK 3,A0
CALLA RANDU
MOVE A0,A3
CLR A6
CALLR DEFAULT_SCREAM
JRUC MEC_DONE
MEC_CHECK_ARM
CMPK NUM_ARML,A6
JREQ MEC_CHK_ARM_GUN
CMPK NUM_ARMR,A6
JRNE MEC_DONE
*Make gun fly out of his hand when hit by a rocket
MEC_CHK_ARM_GUN
MOVB *A8(OGUN_IN_HAND),A14 ;Is he holding a gun in this hand?
JRZ MEC_DONE ;BR = No, do the regular thang
CLR A14
MOVB A14,*A8(OGUN_IN_HAND) ;Not holding that gun anymore
; MOVK NUM_HEAD,A1
; CALLA FINDPART
; JRZ MEC_NO_HEAD_FOUND
; MOVB A6,*A0(OGUN_BLOWN) ;Mark it for the head
;MEC_NO_HEAD_FOUND
MOVI ANIM_ARM_LOSE_GUN,A1
CALLR LOAD_ANIMATION ;Start the animation happening
MEC_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
MEC_X
RETS
**************************************************************************
* *
* MONDOR_GUNVECT *
* *
* Gun Vector for all of Mondor's parts. The part will flash *
* and increase in damage if necessary. *
* *
* A2 = Ptr to player hitting Mondor *
* A8 = Ptr to part *
* *
**************************************************************************
MONDOR_GUNVECT
MOVB *A8(O_BEING_DAMAGED),A14 ;Is this part currently under attack?
JRNZ MGV_X ;BR = Yes
CALLA OBJ_CONST ;Turn constant color on
MOVKB 4,*A8(OFLASHTIME)
SOUNDZ SND_FLESH_HIT
MOVB *A8(ODAMAGE),A5
CMPK MAX_DAMAGE_LEVEL,A5 ;Is the damage maxed for this object?
JRHI MGV_NO_FRAGS ;BR = Yes
MOVE *A2(PPLASMASHOTS),A14,W
JRZ MGV_BLOODY
MMTM SP,A0,A3,A4
MMTM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
MOVI FRAG_EXPLOSION_ONE,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
MOVK NUM_FOOTL,A1
CALLA FINDPART ;The foot rest will shake ust
JRZ MGV_NO_SHAKE ;BR = Couldn't find the part
MOVI ANIM_SMALL_SHAKE,A1 ;Start a shaker anim
CALLA STRTANIM
MGV_NO_SHAKE
MMFM SP,A0,A3,A4
CALLA BLOODY_BULLET_HIT
MOVI BULLET_HITS-5,A1 ;More powerful hits
JRUC MGV_DO_HIT
MGV_BLOODY
CALLA BLOODY_BULLET_HIT
MGV_NO_FRAGS
MOVI BULLET_HITS,A1
MGV_DO_HIT
MOVI OBULLET_HITS,A3
CALLA HIT_ENEMY ;Enough hits to merit damage?
JRLO MGV_X ;BR = No
CLR A14
MOVE A14,*A8(OBULLET_HITS),L ;Clear count
MOVB *A8(ODAMAGE),A14
INC A14
CMPK MAX_DAMAGE_LEVEL,A14 ;Is the damage maxed out?
JRLS MONDOR_MAJOR_HIT ;BR = No, bullets allowed
CALLA ANY_BOMBS ;Are there any rockets out there?
JRZ MONDOR_MAJOR_HIT ;BR = No, then let bullets finish
MGV_X
RETS
**************************************************************************
* *
* CRAFT_EXPLOSION_COLL *
* *
* Collision vector for player explosion against the craft. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to Craft part *
* *
**************************************************************************
CRAFT_EXPLOSION_COLL
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
JRZ CEC_X ;BR = No, so bail
CLR A14
MOVB A14,*A8(OCHEWEDROCKET) ;Clear the rocket flag
MOVE A0,A5 ;Visiting explosion goes here
CALLA GET_HEAD_PART_A0 ;Check this velocity stuff on head
MOVE A0,A7 ;Head-part stays in A7
MOVE *A8(OZVAL),A1,L
MOVE @ZBASE,A14,L
SUB A14,A1 ;Universe to World Z
CMPI MONDOR_ZMAX-100H,A1 ;Should we blast him back?
JRGT CEC_NO_BLOW_BACK ;BR = No, not close enough.
MOVK NUM_FOOTR,A1
CALLA FINDPART ;The foot rest will shake ust
JRZ CEC_NO_BLOW_BACK ;BR = Couldn't find the part
MOVI ANIM_MEDIUM_SHAKE,A1 ;Start a shaker anim
CALLA STRTANIM
CEC_NO_BLOW_BACK
CALLA OBJ_CONST ;Turn constant color on
MOVKB 6,*A8(OFLASHTIME)
MOVB *A8(OROCKETHIT),A14 ;Should we actually take damage?
JRNZ CEC_X ;BR = No, we are waiting
MOVKB 1,*A8(OROCKETHIT) ;Flag the hit, and use to delay
SOUNDZ SND_EXPLODE_ON_MONDOR ;Make our own explosion sound
MOVE *A5(OID),A0,W ;We can find out who did this
CALLA POID_TO_PDATA ;by getting the Player's data area.
MOVB *A8(OPARTID),A4
*Check if we hit the pods
CMPK NUM_PODL,A4 ;Is it the left?
JRNE CEC_CK_PODR ;BR = No
MOVK NUM_ARML,A1 ;Check left arm
JRUC CEC_CK_POD_FIRE
CEC_CK_PODR
CMPK NUM_PODR,A4 ;Is it the right?
JRNE CEC_DONE ;BR = No
MOVK NUM_ARMR,A1 ;Check the right arm
CEC_CK_POD_FIRE
CALLA FINDPART
MOVB *A0(ODAMAGE),A14
CMPK MAX_DAMAGE_LEVEL,A14 ;Is arm completely gone?
JRLS CEC_NO_FIRE ;BR = No, then no fire
*Spawn an engine fire
MOVK 5,A0
CALLA RAND0
SLL 5,A0
ADDI POD_FIRE_TAB,A0
MOVE *A0,A3,L
MOVK 1,A9
MOVI INIT_POD_FIRE,B0
CALLA SPAWN_FIRE
CEC_NO_FIRE
CEC_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
CEC_X
RETS
**************************************************************************
* *
* PLATE_EXPLOSION_COLL *
* *
* Collision vector for player explosion against the license plate. *
* *
* A0 = Ptr to explosion object *
* A8 = Ptr to part *
* *
**************************************************************************
PLATE_EXPLOSION_COLL
MOVB *A8(OCHEWEDROCKET),A14 ;Did he really take a rocket?
JRZ PEC_X ;BR = No, so bail
CLR A14
MOVB A14,*A8(OCHEWEDROCKET) ;Clear the rocket flag
MOVE A0,A5 ;Visiting explosion goes here
SOUNDZ SND_GUN_FLY ;Make our own explosion sound
MOVE *A5(OID),A0,W ;We can find out who did this
CALLA POID_TO_PDATA ;by getting the Player's data area.
MOVI 1000,A1
CALLA SCORE ;Explosions are always good for points
CALLA OBJ_OFF
CALLA COLLS_OFF
MMTM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
MOVI 180H,A3 ;Max Z velocity
MOVI 30000H,A0 ;Max X&Y velocities
CALLA PreFrag_Center ;Blow from the center
MOVI FRAG_PLATE_FLY,B14 ;Use this script
CALLA Fragger ;And get it goin' Boy
MMFM SP,B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
PEC_X
RETS
**************************************************************************
* *
* CRAFT_GUNVECT *
* *
* Gun Vector for all of the craft parts. A ding sound will be *
* made for effect, and that's all. *
* *
* A2 = Ptr to player hitting the craft *
* A8 = Ptr to part *
* *
**************************************************************************
CRAFT_GUNVECT
CALLA DGV_FRAG_SPARK ;Spark it up
MOVB *A8(OPARTID),A4
CMPK NUM_TORSOL,A4 ;Sanity check, are we a craft part?
JRHS CGV_X ;BR = No
MOVE A4,A0
DEC A0
SRL 1,A0
SLL 5,A0
ADDI TAB_METAL_SOUNDS,A0
MOVE *A0,A0,L ;Grab us a sound from the desk table
CALLA ONESND_Z
CGV_X
RETS
**************************************************************************
* *
* INCREASE_DAMAGE_LEVEL *
* *
* Use this routine to increase the damage level on *
* a given part. *
* *
* A8 = Ptr to part *
* *
**************************************************************************
INCREASE_DAMAGE_LEVEL
MOVB *A8(ODAMAGE),A14
CMPK MAX_DAMAGE_LEVEL,A14
JRHS IDL_X
INC A14
MOVB A14,*A8(ODAMAGE)
IDL_X
RETS
**************************************************************************
* *
* A_CHANGE_PAL_VIOLENCE *
* *
* Anim func to change the palette based on the violence level. *
* *
* A8 = Ptr to object *
* AARG+,L = Palette if violence level is high *
* AARG+,L = Paleete if violence level is med/low *
* *
**************************************************************************
A_CHANGE_PAL_VIOLENCE
CALLA GETAFARG_LONG
MOVE @VIOLENCE_LEVEL,A14,W
DEC A14
JAP CHANGE_PAL ;BR = Violence is high
CALLA GETAFARG_LONG ;Get the alternate palette
JAUC CHANGE_PAL
**************************************************************************
* *
* Sounds for Mondor *
* *
**************************************************************************
SND_HEAD_SHAKE
.WORD 0F343H,46,0828BH,0 ;Rapid head shake
SND_SCREAM
.WORD 0F342H,62,08284H,0 ;Mondor screams
SND_BLOW_BACK
.WORD 0F342H,26,08294H,0 ;Mondor gets blown back
SND_BLOOD_SPRAY
.WORD 0E300H,60,0A197H,0 ;Blood spray from bone stump
NUM_DAMAGE_SNDS .EQU 6
TAB_DAMAGE_SOUNDS
.LONG SND_DAMAGE1,SND_DAMAGE2,SND_DAMAGE3,SND_DAMAGE4
.LONG SND_DAMAGE5,SND_DAMAGE6
SND_DAMAGE1
.WORD 0E242H,21,0A526H,0 ;Mondor gets damaged #1
SND_DAMAGE2
.WORD 0E242H,25,0A523H,0 ;Mondor gets damaged #7
SND_DAMAGE3
.WORD 0E242H,29,0A529H,0 ;Mondor gets damaged #3
SND_DAMAGE4
.WORD 0E242H,40,0A52CH,0 ;Mondor gets damaged #4
SND_DAMAGE5
.WORD 0E242H,29,0A52FH,0 ;Mondor gets damaged #5
SND_DAMAGE6
.WORD 0E242H,40,0A520H,0 ;Mondor gets damaged #6
SND_FLESH_HIT
.WORD 0F302H,17,0A1E9H,0 ;Flesh Hit on Mondor
SND_PART_PREAMBLE
.WORD 0F144H,60,0A38BH,0 ;Preamble to Mondor's part lost scream
SND_PART_LOST
.WORD 0F344H,150,08286H,0 ;Mondor screams cause he lost a part
SND_FINAL_DEATH
.WORD 0F345H,521,0829AH,0 ;Mondor's final death scream
SND_THRUSTER1
.WORD 0F101H,1,05186H,0 ;Thruster sound, make it a background
SND_THRUSTER2
.WORD 0F201H,1,05187H,0 ;Thruster sound, make it a background
SND_POUND
.WORD 0F330H,73,0A13BH,0 ;Mondor pounds
SND_INTRO_ROAR
.WORD 0E342H,74,08281H,0 ;Introductory ROAR!
SND_GUN_GRAB
.WORD 0F340H,10,0A389H,0 ;Mondor grabs his gun
SND_GUN_FLY
.WORD 0E141H,46,0A3B1H,0 ;Gun gets knocked out of hand
;SND_FINAL_EXPLODE1
; .WORD 0E148H,200,08303H,0 ;Final explosion sound, channel 1
;SND_FINAL_EXPLODE2
; .WORD 0E248H,200,08304H,0 ;Final explosion sound, channel 2
;SND_FINAL_EXPLODE3
; .WORD 0E348H,200,08305H,0 ;Final explosion sound, channel 3
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_HUH
.WORD 0E340H,23,08289H,0 ;"Huh!?"
;SND_PREASE_TO_ENJOY
; .WORD 0E349H,143,08280H,0 ;"Prease to enjoy, your worst nightmare"
SND_BUTT_HURT
.WORD 0E34AH,34,0827BH,0 ;Manager's ass hurts from fall
SND_GEAR_OUT
.WORD 0E348H,36,0A1FDH,0 ;Mondor's gear comes out
SND_SEAT_BOUNCE
.WORD 0F342H,27,0A33BH,0 ;Manager's seat bounces
;SND_MONDOR_BATTLE
; .WORD 0F0FDH,1,08005H,0 ;Battle Mondor tune
SND_EXPLODE_ON_MONDOR
.WORD 0F341H,60,0A38DH,0 ;Explosion when rocket hits Mondor
NUM_MONDOR_PARTS .EQU 21
NUM_BODY_PARTS .EQU 7 ;Legs, Arms, Head, Chest
NUM_TORSO_PARTS .EQU 2 ;Number of pieces making up the Torso
MONDOR_INIT
.byte NUM_MONDOR_PARTS, 0, 0, 5 ;OBJCNT, PRCCNT, IMGPALCNT, PALCNT
.long VESTPAL1,PANPAL1,FHEDcc1,PODS,FLESH1p ;Palettes used
.word OID_MONDOR, OM_COLL
; .LONG CRAFT_CVECT
.LONG DUMCOLL
*
* .long IMG
* .word OCTRL, OFLAGS, OZOFF, OPTION_FLAGS
*
LWWWW CRFT_SEAT_A, DMAWNZ, 0, 3, OM_COLL|OM_GUNV|OM_CFUNC ;OM_ANIM
.LONG CRAFT_SEAT_CVECT
.LONG CRAFT_GUNVECT
; .LONG ANIM_DROP_IN
.LONG C_SEAT_INIT
LWWWW CRFT_SEAT_A, DMAWNZ|M_FLIPH, 0, 3, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
NUM_PODL .EQU 3
LWWWW POD_L_A4, DMAWNZ, M_NOSCALE|M_NODISP, 4, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
NUM_PODR .EQU 4
LWWWW POD_L_A4, DMAWNZ|M_FLIPH, M_NOSCALE|M_NODISP, 4, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
NUM_FOOTL .EQU 5 ;This part is used for small shake of Mondor
LWWWW CRFT_FOOT, DMAWNZ, M_NODISP, 4, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
NUM_FOOTR .EQU 6 ;This part is used for medium shake of Mondor
LWWWW CRFT_FOOT, DMAWNZ|M_FLIPH, M_NODISP, 4, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
NUM_PIPEL .EQU 7 ;This part is used for BIG shake of Mondor
LWWWW CRFT_FOOT_A, DMAWNZ, M_NOSCALE|M_NODISP, 5, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
LWWWW CRFT_FOOT_A, DMAWNZ|M_FLIPH, M_NOSCALE|M_NODISP, 5, OM_PRVGUNV|OM_CFUNC
.LONG C_CRAFT_PART_INIT
NUM_PLATE .EQU 9
LWWWW PLATOUT1, DMAWNZ, M_NOSCALE|M_NODISP, 2, OM_COLL|OM_GUNV|OM_CFUNC
.LONG PLATE_CVECT
.LONG METAL_GUNVECT
.LONG C_PLATE_PART_INIT
NUM_TORSOL .EQU 10
LWWWW HELMON1_01A, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, 0, OM_COLL|OM_GUNV|OM_ANIM|OM_CFUNC
.LONG MONDOR_CHEST_CVECT
.LONG MONDOR_GUNVECT
.LONG ANIM_JOSH_MORPH
.LONG C_MONDOR_PART_INIT
NUM_TORSOR .EQU 11
LWWWW HELMON1_01B, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, 0, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CHEST_CVECT
.LONG C_MONDOR_PART_INIT
NUM_LEGL EQU 12
LWWWW HELMON1_01C, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, -1, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
NUM_LEGR .EQU 13
LWWWW HELMON1_01D, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, -1, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
NUM_ARML .EQU 14
LWWWW HELMON1_01E, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, 1, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
NUM_ARMR .EQU 15
LWWWW HELMON1_01E, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, 1, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
NUM_HEAD .EQU 16
LWWWW HELMON1_01E, DMAWNZ, M_NODISP|M_NOSCALE|M_NOSHADOW, -2, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
LWWWW HELMON1_01E, DMAWNZ|M_FLIPH, M_NODISP|M_NOSCALE|M_NOSHADOW, -3, OM_COLL|OM_GUNV
.LONG 0,0
LWWWW HELMON1_01E, DMAWNZ|M_FLIPH, M_NODISP|M_NOSCALE|M_NOSHADOW, -1, OM_COLL
.LONG DUMCOLL
LWWWW HELMON1_01E, DMAWNZ|M_FLIPH, M_NODISP|M_NOSCALE|M_NOSHADOW, -1, OM_COLL
.LONG DUMCOLL
NUM_ABONEL .EQU 20
LWWWW BONE_STUMP, DMAWNZ, M_NODISP|M_NOSHADOW, 2, OM_COLL
.LONG DUMCOLL
NUM_ABONER .EQU 21
LWWWW BONE_STUMP, DMAWNZ|M_FLIPH, M_NODISP|M_NOSHADOW, 2, OM_COLL
.LONG DUMCOLL
*
* Use for dropping in Mondor on the seat
*
.if 0
NUM_TORSOL .EQU 10
LWWWW TORSO_0, DMAWNZ, 0, 0, OM_COLL|OM_GUNV|OM_CFUNC
.LONG MONDOR_CHEST_CVECT
.LONG MONDOR_GUNVECT
.LONG C_MONDOR_PART_INIT
NUM_TORSOR .EQU 11
LWWWW TORSO_0, DMAWNZ|M_FLIPH, 0, 0, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CHEST_CVECT
.LONG C_MONDOR_PART_INIT
NUM_LEGL EQU 12
LWWWW LEG_A, DMAWNZ, 0, -1, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
NUM_LEGR .EQU 13
LWWWW LEG_A, DMAWNZ|M_FLIPH, 0, -1, OM_COLL|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG C_MONDOR_PART_INIT
NUM_ARML .EQU 14
LWWWW L_IDL_A_1, DMAWNZ, M_NOPARTANI, 1, OM_COLL|OM_ANIM|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG AAIDLE_A
.LONG C_MONDOR_PART_INIT
NUM_ARMR .EQU 15
LWWWW L_IDL_A_1, DMAWNZ|M_FLIPH, M_NOPARTANI, 1, OM_COLL|OM_ANIM|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG AAIDLE_A
.LONG C_MONDOR_PART_INIT
NUM_HEAD .EQU 16
LWWWW H_IDL_A_1, DMAWNZ, 0, -2, OM_COLL|OM_ANIM|OM_PRVGUNV|OM_CFUNC
.LONG MONDOR_CVECT
.LONG ANIM_HEAD_INTRO
.LONG C_MONDOR_PART_INIT
LWWWW H_IDLGLA1, DMAWNZ, M_NOSHADOW, -3, OM_COLL|OM_GUNV
.LONG 0,0
LWWWW TORSO_2, DMAWNZ, M_NODISP, -1, OM_COLL
.LONG DUMCOLL
LWWWW TORSO_1, DMAWNZ, M_NODISP, -1, OM_COLL
.LONG DUMCOLL
.endif
**************************************************************************
* *
* 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 script to keep tabs on the velocity and movement boundries
*
ANIM_VELOCITY_WATCH
LWL 1,1|AFunc,A_VELOCITY_WATCH
.LONG 0
*
*Handle Mondor's craft movement
*
ANIM_MOVEMENT
LWL 1,1|AFunc,A_MOVE_AROUND
.LONG 0
*
*Animation number equates, used to tell decision funcs where animation
*just came from
*
ANUM_IDLE .EQU 0
ANUM_666 .EQU 1
ANUM_FIST .EQU 2
ANUM_GET .EQU 3
ANUM_PNT .EQU 4
ANUM_THROW .EQU 5
*
*HEAD animation numbers.
*
ANUM_NO .EQU 1
ANUM_YES .EQU 2
ANUM_BREATHE_FIRE .EQU 3
ANUM_SCREAM .EQU 4
ANUM_SCREAM_LT .EQU 5
ANUM_SCREAM_RT .EQU 6
ANUM_SHAKE .EQU 7
ANUM_TALK .EQU 8
ANUM_LOOK .EQU 9
ACTION_HEAD_NUMS .EQU 4
LAST_HEAD_NUM .EQU 10
*
* Table of each arm action
*
ACTIONS_ARM
.LONG ANIM_ARM_IDLE,ANIM_ARM_666,ANIM_ARM_FIST,ANIM_ARM_GET
.LONG ANIM_ARM_PNT,ANIM_ARM_THROW
*
*ARM AT REST
*
ANIM_ARM_INIT
LWLL 1,30|AFunc,A_AnimGo+2,AAIDLE_A
ANIM_ARM_IDLE
.LONG AAIDLE_A,AAIDLE_A,AAIDLE_C,AAIDLE_D
AAIDLE_A
LWLL L_IDL_A_1,1|AFunc,A_CHANGE_PAL+2,FLESH1p
LWL 1,1|AFunc,A_SELECT_ARM_IDLE_TIME
LW 1,0
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_IDLE
;AAIDLE_B
; LWL L_IDL_B_1,1|AFunc,A_SELECT_ARM_IDLE_TIME
; LW 1,0
; LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_IDLE
AAIDLE_C
LWLLL L_IDL_C_1,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LWL 1,1|AFunc,A_SELECT_ARM_IDLE_TIME
LW 1,0
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_IDLE
AAIDLE_D
LWLLL L_IDL_D_1,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LWL 1,1|AFunc,A_SELECT_ARM_IDLE_TIME
LW 1,0
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_IDLE
*
*INTERNATIONAL SIGN OF THE DEVIL
*
ANIM_ARM_666
.LONG AA666_A,AA666_A,AA666_C,AA666_D
AA666_A
LW L_666_A_1,5
LW L_666_A_2,5
LW L_666_A_3,5
LW L_666_A_4,9
LW L_666_A_3,9
LW L_666_A_4,9
LW L_666_A_3,9
LW L_666_A_4,9
LW L_666_A_3,5
LW L_666_A_2,5
LW L_666_A_1,5
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_666
;AA666_B
; LW L_666_B_1,5
; LW L_666_B_2,5
; LW L_666_B_3,5
; LW L_666_B_4,9
; LW L_666_B_3,9
; LW L_666_B_4,9
; LW L_666_B_3,9
; LW L_666_B_4,9
; LW L_666_B_3,5
; LW L_666_B_2,5
; LW L_666_B_1,5
; LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_666
AA666_C
LWLLL L_666_C_1,5|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LW L_666_C_2,5
LW L_666_C_3,5
LW L_666_C_4,9
LW L_666_C_3,9
LW L_666_C_4,9
LW L_666_C_3,9
LW L_666_C_4,9
LW L_666_C_3,5
LW L_666_C_2,5
LW L_666_C_1,5
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_666
AA666_D
LWLLL L_666_D_1,5|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LW L_666_D_2,5
LW L_666_D_3,5
LW L_666_D_4,9
LW L_666_D_3,9
LW L_666_D_4,9
LW L_666_D_3,9
LW L_666_D_4,9
LW L_666_D_3,5
LW L_666_D_2,5
LW L_666_D_1,5
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_666
*
*WHY I OUGHTTA SOCK YA ONE RIGHT IN THE KISSER
*
ANIM_ARM_FIST
.LONG AAFIST_A,AAFIST_A,AAFIST_C,AAFIST_D
AAFIST_A
LW L_FST_A_1,5
LW L_FST_A_2,5
LW L_FST_A_3,5
LW L_FST_A_4,5
LW L_FST_A_5,9
LW L_FST_A_4,9
LW L_FST_A_5,9
LW L_FST_A_3,5
LW L_FST_A_2,5
LW L_FST_A_1,5
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_FIST
;AAFIST_B
; LW L_FST_B_1,5
; LW L_FST_B_2,5
; LW L_FST_B_3,5
; LW L_FST_B_4,5
; LW L_FST_B_5,9
; LW L_FST_B_4,9
; LW L_FST_B_5,9
; LW L_FST_B_3,5
; LW L_FST_B_2,5
; LW L_FST_B_1,5
; LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_FIST
AAFIST_C
LWLLL L_FST_C_1,5|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LW L_FST_C_2,5
LW L_FST_C_3,5
LW L_FST_C_4,5
LW L_FST_C_5,9
LW L_FST_C_4,9
LW L_FST_C_5,9
LW L_FST_C_3,5
LW L_FST_C_2,5
LW L_FST_C_1,5
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_FIST
AAFIST_D
LWLLL L_FST_D_1,5|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LW L_FST_D_2,5
LW L_FST_D_3,5
LW L_FST_D_4,5
LW L_FST_D_5,9
LW L_FST_D_4,9
LW L_FST_D_5,9
LW L_FST_D_3,5
LW L_FST_D_2,5
LW L_FST_D_1,5
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_FIST
*
*GRENADE THROW
*
ANIM_ARM_THROW
.LONG AATHROW_A,AATHROW_A,AATHROW_C,AATHROW_D
AATHROW_A
LWLWW L_THR_A_1,5|AFunc,A_Set_Rel_Byte_Head+2,OTHROWING_BOMB,1
LW L_THR_A_2,5
LW L_THR_A_3,5
LW L_THR_A_4,5
LW L_THR_A_5,5
LW L_THR_A_6,9
LW L_THR_A_7,4
LWLLWW L_THR_A_8,4|AFunc,A_SPAWN_PROJECTILE+4,GRENADE_INIT,-88,-44
LW L_THR_A_9,4
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_THROW
;AATHROW_B
; LWLWW L_THR_B_1,5|AFunc,A_Set_Rel_Byte_Head+2,OTHROWING_BOMB,1
; LW L_THR_B_2,5
; LW L_THR_B_3,5
; LW L_THR_B_4,5
; LW L_THR_B_5,5
; LW L_THR_B_6,9
; LW L_THR_B_7,4
; LWLLWW L_THR_B_8,4|AFunc,A_SPAWN_PROJECTILE+4,GRENADE_INIT,-88,-44
; LW L_THR_B_9,4
; LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_THROW
AATHROW_C
LWLWW 1,1|AFunc,A_Set_Rel_Byte_Head+2,OTHROWING_BOMB,1
LWLLL L_THR_C_1,4|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LW L_THR_C_2,5
LW L_THR_C_3,5
LW L_THR_C_4,5
LW L_THR_C_5,5
LW L_THR_C_6,9
LW L_THR_C_7,4
LWLLWW L_THR_C_8,4|AFunc,A_SPAWN_PROJECTILE+4,GRENADE_INIT,-88,-44
LW L_THR_C_9,4
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_THROW
AATHROW_D
LWLWW 1,1|AFunc,A_Set_Rel_Byte_Head+2,OTHROWING_BOMB,1
LWLLL L_THR_D_1,4|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LW L_THR_D_2,5
LW L_THR_D_3,5
LW L_THR_D_4,5
LW L_THR_D_5,5
LW L_THR_D_6,9
LW L_THR_D_7,4
LWLLWW L_THR_D_8,4|AFunc,A_SPAWN_PROJECTILE+4,GRENADE_INIT,-88,-44
LW L_THR_D_9,4
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_THROW
*
*GET THIS BOYEEEEE!
*
ANIM_ARM_GET
.LONG AAGET_A,AAGET_A,AAGET_C,AAGET_D
AAGET_A
LW L_THR_A_1,5
LW L_THR_A_2,5
LW L_THR_A_3,5
LW L_THR_A_4,5
LW L_THR_A_5,5
LWLL L_THR_A_6,15|AFunc,A_SOUNDZ+2,SND_GUN_GRAB
LWLL R_GN2_A_1,6|AFunc,A_CHANGE_PAL+2,GARMS1p
LW R_GN2_A_2,6
LWL R_GN2_A_3,6|AFunc,A_INITIALIZE_FIRING
LW R_GN2_A_4,6
*Common shoot animation hook
AAGET_SHOOT
LW 1,6
AAGET_SHOOTER
LWL 1,5|AFunc,A_RANDOM_RAPID_COUNT
AAGET_RAPID_FIRE
LWLWWWW 1,7|AFunc,A_ARM_FIRE_FNC+4,-81,-45,-81,-54
LWLL 1,1|AFunc,A_ARM_RAPIDFIRE_DECISION+2,AAGET_RAPID_FIRE
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,7,20
LW 1,0
LWLL 1,1|AFunc,A_AnimFrm+2,AAGET_SHOOTER
;AAGET_B
; LW L_THR_B_1,5
; LW L_THR_B_2,5
; LW L_THR_B_3,5
; LW L_THR_B_4,5
; LW L_THR_B_5,5
; LWLL L_THR_B_6,15|AFunc,A_SOUNDZ+2,SND_GUN_GRAB
; LW R_GN2_B_1,6
; LW R_GN2_B_2,6
; LWL R_GN2_B_3,6|AFunc,A_INITIALIZE_FIRING
; LWLL R_GN2_B_4,6|AFunc,A_AnimFrm+2,AAGET_SHOOT
AAGET_C
LWLLL L_THR_C_1,5|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LW L_THR_C_2,5
LW L_THR_C_3,5
LW L_THR_C_4,5
LW L_THR_C_5,5
LWLL L_THR_C_6,15|AFunc,A_SOUNDZ+2,SND_GUN_GRAB
LWLLL R_GN2_C_1,6|AFunc,A_CHANGE_PAL_VIOLENCE+4,GARMS2p,GARMS2pG
LW R_GN2_C_2,6
LWL R_GN2_C_3,6|AFunc,A_INITIALIZE_FIRING
LWLL R_GN2_C_4,6|AFunc,A_AnimFrm+2,AAGET_SHOOT
AAGET_D
LWLLL L_THR_D_1,5|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LW L_THR_D_2,5
LW L_THR_D_3,5
LW L_THR_D_4,5
LW L_THR_D_5,5
LWLL L_THR_D_6,15|AFunc,A_SOUNDZ+2,SND_GUN_GRAB
LWLLL R_GN2_D_1,6|AFunc,A_CHANGE_PAL_VIOLENCE+4,GARMS3p,GARMS3pG
LW R_GN2_D_2,6
LWL R_GN2_D_3,6|AFunc,A_INITIALIZE_FIRING
LWLL R_GN2_D_4,6|AFunc,A_AnimFrm+2,AAGET_SHOOT
*
*POUND HAND
*
ANIM_ARM_POUND
.LONG AAPOUND_A,AAPOUND_A,AAPOUND_C,AAPOUND_D
AAPOUND_A
LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
LWL 1,1|AFunc,A_POUND_SCREAM
LWLL 1,1|AFunc,A_AnimGo+2,AAPOUND_A_LOOP
AAPOUND_A_LOOP
LW L_FST_A_7,3
LW L_THR_A_3,3
LW L_THR_A_4,3
LW L_THR_A_5,6
LW L_THR_A_4,2
LW L_THR_A_3,2
LW L_FST_A_7,2
LWL L_FST_A_6,6|AFunc,A_POUND_FUNC
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_GET
;AAPOUND_B
; LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
; LWL 1,1|AFunc,A_POUND_SCREAM
; LWLL 1,1|AFunc,A_AnimGo+2,AAPOUND_B_LOOP
;AAPOUND_B_LOOP
; LW L_FST_B_7,3
; LW L_THR_B_3,3
; LW L_THR_B_4,3
; LW L_THR_B_5,6
; LW L_THR_B_4,2
; LW L_THR_B_3,2
; LW L_FST_B_7,2
; LWL L_FST_B_6,6|AFunc,A_POUND_FUNC
; LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_GET
AAPOUND_C
LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
LWL 1,1|AFunc,A_POUND_SCREAM
LWLLL L_FST_C_7,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LWLL 1,1|AFunc,A_AnimGo+2,AAPOUND_C_LOOP
AAPOUND_C_LOOP
LW L_FST_C_7,3
LW L_THR_C_3,3
LW L_THR_C_4,3
LW L_THR_C_5,6
LW L_THR_C_4,2
LW L_THR_C_3,2
LW L_FST_C_7,2
LWL L_FST_C_6,6|AFunc,A_POUND_FUNC
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_GET
AAPOUND_D
LWLW 1,1|AFunc,A_Set_AnimLoop+1,3
LWL 1,1|AFunc,A_POUND_SCREAM
LWLLL L_FST_D_7,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LWLL 1,1|AFunc,A_AnimGo+2,AAPOUND_D_LOOP
AAPOUND_D_LOOP
LW L_FST_D_7,3
LW L_THR_D_3,3
LW L_THR_D_4,3
LW L_THR_D_5,6
LW L_THR_D_4,2
LW L_THR_D_3,2
LW L_FST_D_7,2
LWL L_FST_D_6,6|AFunc,A_POUND_FUNC
LWLW 1,1|AFunc,A_ARM_DECISION+1,ANUM_GET
*
*POINT IT OUT TO THE PLAYER
*
ANIM_ARM_PNT
.LONG AAPNT_A,AAPNT_A,AAPNT_A,AAPNT_A
AAPNT_A
LWL 1,1|AFunc,A_POINT_CHECK
LW L_PNT_A_1,5
LW L_PNT_A_2,5
LW L_PNT_A_3,9
LW L_PNT_A_2,9
LW L_PNT_A_3,9
LW L_PNT_A_2,5
LW L_PNT_A_1,5
LWLW L_IDL_A_1,1|AFunc,A_ARM_DECISION+1,ANUM_PNT
*
*LEG AT REST
*
ANIM_LEG_IDLE
.LONG ALIDLE_A,ALIDLE_B,ALIDLE_C,ALIDLE_D
ALIDLE_A
LWL LEG_A,1|AFunc,PULL_ANIM
ALIDLE_B
LWLLL LEG_B,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,LEG1p,LEG1pG
LWL 1,1|AFunc,PULL_ANIM
ALIDLE_C
LWLLL LEG_C,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,LEG2p,LEG2pG
LWL 1,1|AFunc,PULL_ANIM
ALIDLE_D
LWLLL LEG_D,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,LEG3p,LEG3pG
LWL 1,1|AFunc,PULL_ANIM
*This is the intro sequence for Mondors head
ANIM_HEAD_INTRO
LW 1,70
LWL 1,1|AFunc,A_HEAD_INTRO
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_IDLE
*
* Idle frames for the head
*
ANIM_HEAD_IDLE
.LONG AHIDLE_A,AHIDLE_A,AHIDLE_C,AHIDLE_D
AHIDLE_A
LWL H_IDL_A_1,1|AMulti|AFunc,A_SELECT_HEAD_IDLE_TIME
LW H_IDLGLA1,1
LWLL 1,1|AFunc,A_AnimGo+2,AHIDLE_LOOP
AHIDLE_B
LWL H_IDL_A_1,1|AFunc,A_SELECT_HEAD_IDLE_TIME
LWLL 1,1|AFunc,A_AnimGo+2,AHIDLE_LOOP
AHIDLE_C
LWLLL H_IDL_C_1,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FHEDcc2,FHEDcc2G
LWL 1,1|AFunc,A_SELECT_HEAD_IDLE_TIME
LWLL 1,1|AFunc,A_AnimGo+2,AHIDLE_LOOP
AHIDLE_D
LWLLL H_IDL_D_1,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FHEDcc3,FHEDcc3G
LWL 1,1|AFunc,A_SELECT_HEAD_IDLE_TIME
LWLL 1,1|AFunc,A_AnimGo+2,AHIDLE_LOOP
AHIDLE_LOOP
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_IDLE
.LONG 0
SCREAM_TABLE
.LONG ANIM_HEAD_SCREAM,ANIM_HEAD_SCREAM_LEFT,ANIM_HEAD_SCREAM_RIGHT
*
* Mondor SCREAMS
*
ANIM_HEAD_SCREAM
.LONG AHSCREAM_A,AHSCREAM_B,AHSCREAM_C,AHSCREAM_D
AHSCREAM_A
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCM_A_1,1|AMulti
LW H_SCMGLA1,4
LW H_SCM_A_2,1|AMulti
LW H_SCMGLA2,4
AHSA_LOOP
LWLL H_SCM_A_3,1|AMulti|AFunc,A_SCREAM_HOLD+2,AHSA_LOOP
LW H_SCMGLA3,1
LW H_SCM_A_2,1|AMulti
LW H_SCMGLA2,4
LW H_SCM_A_1,1|AMulti
LW H_SCMGLA1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM
AHSCREAM_B
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCM_A_1,4
LW H_SCM_A_2,4
AHSB_LOOP
LWLL H_SCM_A_3,1|AFunc,A_SCREAM_HOLD+2,AHSB_LOOP
LW H_SCM_A_2,4
LW H_SCM_A_1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM
AHSCREAM_C
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCM_C_1,4
LW H_SCM_C_2,4
AHSC_LOOP
LWLL H_SCM_C_3,1|AFunc,A_SCREAM_HOLD+2,AHSC_LOOP
LW H_SCM_C_2,4
LW H_SCM_C_1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM
AHSCREAM_D
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCM_D_1,4
LW H_SCM_D_2,4
AHSD_LOOP
LWLL H_SCM_D_3,1|AFunc,A_SCREAM_HOLD+2,AHSD_LOOP
LW H_SCM_D_2,4
LW H_SCM_D_1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM
*
* Mondor SCREAMS to our left
*
ANIM_HEAD_SCREAM_LEFT
.LONG AHSCREAML_A,AHSCREAML_B,AHSCREAML_C,AHSCREAML_D
AHSCREAML_A
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCL_A_1,1|AMulti
LW H_SCLGLA1,4
LW H_SCL_A_2,1|AMulti
LW H_SCLGLA2,4
LW H_SCL_A_3,1|AMulti
LW H_SCLGLA3,4
AHSLA_LOOP
LWLL H_SCL_A_4,1|AMulti|AFunc,A_SCREAM_HOLD+2,AHSLA_LOOP
LW H_SCLGLA4,1
LW H_SCL_A_3,1|AMulti
LW H_SCLGLA3,4
LW H_SCL_A_2,1|AMulti
LW H_SCLGLA2,4
LW H_SCL_A_1,1|AMulti
LW H_SCLGLA1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM_LT
AHSCREAML_B
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCL_A_1,4
LW H_SCL_A_2,4
LW H_SCL_A_3,4
AHSLB_LOOP
LWLL H_SCL_A_4,1|AFunc,A_SCREAM_HOLD+2,AHSLB_LOOP
LW H_SCL_A_3,4
LW H_SCL_A_2,4
LW H_SCL_A_1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM_LT
AHSCREAML_C
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCL_C_1,4
LW H_SCL_C_2,4
LW H_SCL_C_3,4
AHSLC_LOOP
LWLL H_SCL_C_4,1|AFunc,A_SCREAM_HOLD+2,AHSLC_LOOP
LW H_SCL_C_3,4
LW H_SCL_C_2,4
LW H_SCL_C_1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM_LT
AHSCREAML_D
LWL 1,1|AFunc,A_SCREAM_SND
LW H_SCL_D_1,4
LW H_SCL_D_2,4
LW H_SCL_D_3,4
AHSLD_LOOP
LWLL H_SCL_D_4,1|AFunc,A_SCREAM_HOLD+2,AHSLD_LOOP
LW H_SCL_D_3,4
LW H_SCL_D_2,4
LW H_SCL_D_1,3
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_SCREAM_LT
*
* Mondor SCREAMS to our right
*
ANIM_HEAD_SCREAM_RIGHT
.LONG AHSCREAMR_A,AHSCREAMR_B,AHSCREAMR_C,AHSCREAMR_D
AHSCREAMR_A
LWL 1,1|AFunc,A_SCREAM_SND
LWW H_SCL_A_1,1|AMulti|AFlip,M_FLIPH
LW H_SCLGLA1,4
LW H_SCL_A_2,1|AMulti
LW H_SCLGLA2,4
LW H_SCL_A_3,1|AMulti
LW H_SCLGLA3,4
AHSRA_LOOP
LWLL H_SCL_A_4,1|AMulti|AFunc,A_SCREAM_HOLD+2,AHSRA_LOOP
LW H_SCLGLA4,1
LW H_SCL_A_3,1|AMulti
LW H_SCLGLA3,4
LW H_SCL_A_2,1|AMulti
LW H_SCLGLA2,4
LW H_SCL_A_1,1|AMulti
LW H_SCLGLA1,3
LWWLW H_IDL_A_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SCREAM_RT
AHSCREAMR_B
LWL 1,1|AFunc,A_SCREAM_SND
LWW H_SCL_A_1,4|AFlip,M_FLIPH
LW H_SCL_A_2,4
LW H_SCL_A_3,4
AHSRB_LOOP
LWLL H_SCL_A_4,1|AFunc,A_SCREAM_HOLD+2,AHSRB_LOOP
LW H_SCL_A_3,4
LW H_SCL_A_2,4
LW H_SCL_A_1,3
LWWLW H_IDL_A_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SCREAM_RT
AHSCREAMR_C
LWL 1,1|AFunc,A_SCREAM_SND
LWW H_SCL_C_1,4|AFlip,M_FLIPH
LW H_SCL_C_2,4
LW H_SCL_C_3,4
AHSRC_LOOP
LWLL H_SCL_C_4,1|AFunc,A_SCREAM_HOLD+2,AHSRC_LOOP
LW H_SCL_C_3,4
LW H_SCL_C_2,4
LW H_SCL_C_1,3
LWWLW H_IDL_C_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SCREAM_RT
AHSCREAMR_D
LWL 1,1|AFunc,A_SCREAM_SND
LWW H_SCL_D_1,4|AFlip,M_FLIPH
LW H_SCL_D_2,4
LW H_SCL_D_3,4
AHSRD_LOOP
LWLL H_SCL_D_4,1|AFunc,A_SCREAM_HOLD+2,AHSRD_LOOP
LW H_SCL_D_3,4
LW H_SCL_D_2,4
LW H_SCL_D_1,3
LWWLW H_IDL_D_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SCREAM_RT
*
*Animations for Mondor talking
*
ANIM_TALK
.LONG ATALK_TT_A, ATALK_TT_B, ATALK_TT_C, ATALK_TT_D
ATALK_TT_A
LW 1,0
LWLL 1,1|AFunc,A_START_TALKIN+2,ATTT_A_LOOP
ATTT_A_LOOP
LWL H_SCM_A_1,1|AMulti|AFunc,A_TALK_NEXT
LW H_SCMGLA1,0
LWL H_IDL_A_1,1|AMulti|AFunc,A_TALK_END
LW H_IDLGLA1,0
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_TALK
ATALK_TT_B
LW 1,0
LWLL 1,1|AFunc,A_START_TALKIN+2,ATTT_B_LOOP
ATTT_B_LOOP
LWL H_SCM_A_1,0|AFunc,A_TALK_NEXT
LWL H_IDL_A_1,0|AFunc,A_TALK_END
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_TALK
ATALK_TT_C
LW 1,0
LWLL 1,1|AFunc,A_START_TALKIN+2,ATTT_C_LOOP
ATTT_C_LOOP
LWL H_SCM_C_1,0|AFunc,A_TALK_NEXT
LWL H_IDL_C_1,0|AFunc,A_TALK_END
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_TALK
ATALK_TT_D
LW 1,0
LWLL 1,1|AFunc,A_START_TALKIN+2,ATTT_D_LOOP
ATTT_D_LOOP
LWL H_SCM_D_1,0|AFunc,A_TALK_NEXT
LWL H_IDL_D_1,0|AFunc,A_TALK_END
LWLW 1,1|AFunc,A_HEAD_DECISION+1,ANUM_TALK
*
* Mondor breathes fire
*
ANIM_HEAD_BREATH_FIRE
.LONG AHBREATHE_A,AHBREATHE_B,AHBREATHE_C,AHBREATHE_D
AHBREATHE_A
LWLWW H_SCM_A_1,1|AMulti|AFunc,A_Set_Rel_Byte_Head+2,OSPITTING_FIRE,1
LW H_SCMGLA1,4
LW H_SCM_A_2,1|AMulti
LW H_SCMGLA2,4
LW H_SCM_A_3,1|AMulti
LW H_SCMGLA3,3
AHB_A_LOOP
LWLLWW 1,10|AFunc,A_SPAWN_PROJECTILE+4,FIRE_BALL_INIT,0,-33
LWLL 1,1|AFunc,A_Anim_DSJ+2,AHB_A_LOOP
LW H_SCM_A_2,1|AMulti
LW H_SCMGLA2,4
LW H_SCM_A_1,1|AMulti
LW H_SCMGLA1,3
LWLW H_IDL_A_1,1|AMulti|AFunc,A_HEAD_DECISION+1,ANUM_BREATHE_FIRE
LW H_IDLGLA1,1
AHBREATHE_B
LWLWW H_SCM_A_1,4|AFunc,A_Set_Rel_Byte_Head+2,OSPITTING_FIRE,1
LW H_SCM_A_2,4
LW H_SCM_A_3,3
AHB_B_LOOP
LWLLWW 1,10|AFunc,A_SPAWN_PROJECTILE+4,FIRE_BALL_INIT,0,-33
LWLL 1,1|AFunc,A_Anim_DSJ+2,AHB_B_LOOP
LW H_SCM_A_2,4
LW H_SCM_A_1,3
LWLW H_IDL_A_1,1|AFunc,A_HEAD_DECISION+1,ANUM_BREATHE_FIRE
AHBREATHE_C
LWLWW H_SCM_C_1,4|AFunc,A_Set_Rel_Byte_Head+2,OSPITTING_FIRE,1
LW H_SCM_C_2,4
LW H_SCM_C_3,3
AHB_C_LOOP
LWLLWW 1,10|AFunc,A_SPAWN_PROJECTILE+4,FIRE_BALL_INIT,0,-33
LWLL 1,1|AFunc,A_Anim_DSJ+2,AHB_C_LOOP
LW H_SCM_C_2,4
LW H_SCM_C_1,3
LWLW H_IDL_C_1,1|AFunc,A_HEAD_DECISION+1,ANUM_BREATHE_FIRE
AHBREATHE_D
LWLWW H_SCM_D_1,4|AFunc,A_Set_Rel_Byte_Head+2,OSPITTING_FIRE,1
LW H_SCM_D_2,4
LW H_SCM_D_3,6
AHB_D_LOOP
LWLLWW 1,10|AFunc,A_SPAWN_PROJECTILE+4,FIRE_BALL_INIT,0,-33
LWLL 1,1|AFunc,A_Anim_DSJ+2,AHB_D_LOOP
LW H_SCM_D_2,4
LW H_SCM_D_1,3
LWLW H_IDL_D_1,1|AFunc,A_HEAD_DECISION+1,ANUM_BREATHE_FIRE
*
* Mondor shake that head
*
ANIM_HEAD_SHAKE
.LONG AHSHAKE_A,AHSHAKE_B,AHSHAKE_C,AHSHAKE_D
AHSHAKE_A
LWLW 1,1|AFunc,A_Set_AnimLoop+1,4
LWLL H_NOP_A_2,1|AMulti|AFunc,A_SOUNDZ+2,SND_HEAD_SHAKE
LW H_NOPGLA2,1
AHSK_A_LOOP
LW H_NOP_A_3,1|AMulti
LW H_NOPGLA3,2
LW H_NOP_A_2,1|AMulti
LW H_NOPGLA2,1
LW H_IDL_A_1,1|AMulti
LW H_IDLGLA1,1
LWW H_NOP_A_2,1|AMulti|AFlip,M_FLIPH
LW H_NOPGLA2,1
LW H_NOP_A_3,1|AMulti
LW H_NOPGLA3,2
LW H_NOP_A_2,1|AMulti
LW H_NOPGLA2,1
LW H_IDL_A_1,1|AMulti|AFlip,0
LW H_IDLGLA1,1
LWLL H_NOP_A_2,1|AMulti|AFunc,A_Anim_DSJ+2,AHSK_A_LOOP
LW H_NOPGLA2,1
LW H_NOP_A_3,1|AMulti
LW H_NOPGLA3,2
LW H_NOP_A_2,1|AMulti
LW H_NOPGLA2,1
LW H_IDL_A_1,1|AMulti
LW H_IDLGLA1,1
LWW H_NOP_A_2,1|AMulti|AFlip,M_FLIPH
LW H_NOPGLA2,1
LW H_NOP_A_3,1|AMulti
LW H_NOPGLA3,2
LW H_NOP_A_2,1|AMulti
LW H_NOPGLA2,1
LWWLW H_IDL_A_1,1|AMulti|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SHAKE
LW H_IDLGLA1,1
AHSHAKE_B
LWLW 1,1|AFunc,A_Set_AnimLoop+1,4
LWLL H_NOP_A_2,1|AFunc,A_SOUNDZ+2,SND_HEAD_SHAKE
AHSK_B_LOOP
LW H_NOP_A_3,1
LW H_NOP_A_2,1
LW H_IDL_A_1,1
LWW H_NOP_A_2,1|AFlip,M_FLIPH
LW H_NOP_A_3,1
LW H_NOP_A_2,1
LW H_IDL_A_1,1|AFlip,0
LWLL H_NOP_A_2,1|AFunc,A_Anim_DSJ+2,AHSK_B_LOOP
LW H_NOP_A_3,1
LW H_NOP_A_2,1
LW H_IDL_A_1,1
LWW H_NOP_A_2,1|AFlip,M_FLIPH
LW H_NOP_A_3,1
LW H_NOP_A_2,1
LWWLW H_IDL_A_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SHAKE
AHSHAKE_C
LWLW 1,1|AFunc,A_Set_AnimLoop+1,4
LWLL H_NOP_C_2,1|AFunc,A_SOUNDZ+2,SND_HEAD_SHAKE
AHSK_C_LOOP
LW H_NOP_C_3,1
LW H_NOP_C_2,1
LW H_IDL_C_1,1
LWW H_NOP_C_2,1|AFlip,M_FLIPH
LW H_NOP_C_3,1
LW H_NOP_C_2,1
LW H_IDL_C_1,1|AFlip,0
LWLL H_NOP_C_2,1|AFunc,A_Anim_DSJ+2,AHSK_C_LOOP
LW H_NOP_C_3,1
LW H_NOP_C_2,1
LW H_IDL_C_1,1
LWW H_NOP_C_2,1|AFlip,M_FLIPH
LW H_NOP_C_3,1
LW H_NOP_C_2,1
LWWLW H_IDL_C_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SHAKE
AHSHAKE_D
LWLW 1,1|AFunc,A_Set_AnimLoop+1,4
LWLL H_NOP_D_2,1|AFunc,A_SOUNDZ+2,SND_HEAD_SHAKE
AHSK_D_LOOP
LW H_NOP_D_3,1
LW H_NOP_D_2,1
LW H_IDL_D_1,1
LWW H_NOP_D_2,1|AFlip,M_FLIPH
LW H_NOP_D_3,1
LW H_NOP_D_2,1
LW H_IDL_D_1,1|AFlip,0
LWLL H_NOP_D_2,1|AFunc,A_Anim_DSJ+2,AHSK_D_LOOP
LW H_NOP_D_3,1
LW H_NOP_D_2,1
LW H_IDL_D_1,1
LWW H_NOP_D_2,1|AFlip,M_FLIPH
LW H_NOP_D_3,1
LW H_NOP_D_2,1
LWWLW H_IDL_D_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_SHAKE
*
* Mondor looks to the left
*
ANIM_HEAD_LOOK_LEFT
.LONG AHLL_A,AHLL_B,AHLL_C,AHLL_D
AHLL_A
LW H_NOP_A_1,1|AMulti
LW H_NOPGLA1,1
AHLL_A_IN
LWLL 1,2|AFunc,A_SOUND+2,SND_HUH
LW H_NOP_A_2,1|AMulti
LW H_NOPGLA2,3
LW H_NOP_A_3,1|AMulti
LW H_NOPGLA3,15
LW H_NOP_A_2,1|AMulti
LW H_NOPGLA2,4
LW H_NOP_A_1,1|AMulti
LW H_NOPGLA1,4
LWWLW H_IDL_A_1,1|AMulti|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_LOOK
LW H_IDLGLA1,1
AHLL_B
LW H_NOP_A_1,1
AHLL_B_IN
LWLL 1,2|AFunc,A_SOUND+2,SND_HUH
LW H_NOP_A_2,3
LW H_NOP_A_3,15
LW H_NOP_A_2,4
LW H_NOP_A_1,4
LWWLW H_IDL_A_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_LOOK
AHLL_C
LW H_NOP_C_1,1
AHLL_C_IN
LWLL 1,2|AFunc,A_SOUND+2,SND_HUH
LW H_NOP_C_2,3
LW H_NOP_C_3,15
LW H_NOP_C_2,4
LW H_NOP_C_1,4
LWWLW H_IDL_C_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_LOOK
AHLL_D
LW H_NOP_D_1,1
AHLL_D_IN
LWLL 1,2|AFunc,A_SOUND+2,SND_HUH
LW H_NOP_D_2,3
LW H_NOP_D_3,15
LW H_NOP_D_2,4
LW H_NOP_D_1,4
LWWLW H_IDL_D_1,1|AFlip|AFunc,0,A_HEAD_DECISION+1,ANUM_LOOK
*
*Mondor looks to the right
*
ANIM_HEAD_LOOK_RIGHT
.LONG AHLR_A,AHLR_B,AHLR_C,AHLR_D
AHLR_A
LWWLL H_NOP_A_1,1|AMulti|AFlip|AFunc,M_FLIPH,A_AnimFrm+2,AHLL_A_IN
LW H_NOPGLA1,1
AHLR_B
LWWLL H_NOP_A_1,1|AFlip|AFunc,M_FLIPH,A_AnimFrm+2,AHLL_B_IN
AHLR_C
LWWLL H_NOP_C_1,1|AFlip|AFunc,M_FLIPH,A_AnimFrm+2,AHLL_C_IN
AHLR_D
LWWLL H_NOP_D_1,1|AFlip|AFunc,M_FLIPH,A_AnimFrm+2,AHLL_D_IN
*
*Mondor loses his gun
*
ANIM_ARM_LOSE_GUN
.LONG ALG_A,ALG_A,ALG_C,ALG_D
ALG_A
LWLL L_THR_A_4,1|AFunc,A_CHANGE_PAL+2,FLESH1p
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_GUN_FLY,80h,20000h
LWLL L_THR_A_5,12|AFunc,A_SOUNDZ+2,SND_GUN_FLY
LW L_THR_A_4,6
LW L_THR_A_3,6
LW L_THR_A_2,6
LWL L_THR_A_1,6|AFunc,A_MAKE_HEAD_LOOK
LWL L_IDL_A_1,6|AFunc,A_CLR_OGUN_BLOWN
LWL 1,1|AFunc,A_CHECK_POUND
;ALG_B
; LWLLLL L_THR_B_4,1|AFunc,A_PreFrag_Center+6,FRAG_GUN_FLY,80h,20000h
; LWLL L_THR_B_5,12|AFunc,A_SOUNDZ+2,SND_GUN_FLY
; LW L_THR_B_4,6
; LW L_THR_B_3,6
; LW L_THR_B_2,6
; LWL L_THR_B_1,6|AFunc,A_MAKE_HEAD_LOOK
; LWL L_IDL_B_1,6|AFunc,A_CLR_OGUN_BLOWN
; LWL 1,1|AFunc,A_CHECK_POUND
ALG_C
LWLLL L_THR_C_4,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH2p,FLESH2pG
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_GUN_FLY,80h,20000h
LWLL L_THR_C_5,12|AFunc,A_SOUNDZ+2,SND_GUN_FLY
LW L_THR_C_4,6
LW L_THR_C_3,6
LW L_THR_C_2,6
LWL L_THR_C_1,6|AFunc,A_MAKE_HEAD_LOOK
LWL L_IDL_C_1,6|AFunc,A_CLR_OGUN_BLOWN
LWL 1,1|AFunc,A_CHECK_POUND
ALG_D
LWLLL L_THR_D_4,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,FLESH3p,FLESH3pG
LWLLLL 1,1|AFunc,A_PreFrag_Center+6,FRAG_GUN_FLY,80h,20000h
LWLL L_THR_D_5,12|AFunc,A_SOUNDZ+2,SND_GUN_FLY
LW L_THR_D_4,6
LW L_THR_D_3,6
LW L_THR_D_2,6
LWL L_THR_D_1,6|AFunc,A_MAKE_HEAD_LOOK
LWL L_IDL_D_1,6|AFunc,A_CLR_OGUN_BLOWN
LWL 1,1|AFunc,A_CHECK_POUND
*
*TABLE OF DAMAGE ANIMATIONS FOR MONDOR (INDEXED VIA OPARTID)
*
DAMAGE_ANIM_TABLE
.LONG ANIM_LEFT_TORSO_DAMAGE ;Torso - left
.LONG ANIM_RIGHT_TORSO_DAMAGE ;Torso - right
.LONG ANIM_LEG_DAMAGE ;Leg - left
.LONG ANIM_LEG_DAMAGE ;Leg - right
.LONG ANIM_ARM_DAMAGE ;Arm - left
.LONG ANIM_ARM_DAMAGE ;Arm - right
.LONG ANIM_HEAD_DAMAGE ;Head
ANIM_LEFT_TORSO_DAMAGE
LWLL 1,1|AFunc,A_TORSO_DAMAGE+4,ANIM_LEFT_TORSO_DAMAGE2
.LONG ANIM_LEFT_TORSO_DAMAGE3
LWL 1,1|AFunc,PULL_ANIM
ANIM_LEFT_TORSO_DAMAGE2
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_SHIRT_CHUNK
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LWL 1,1|AFunc,A_INIT_CHEST_DAMAGE
LWL 1,1|AFunc,PULL_ANIM
ANIM_LEFT_TORSO_DAMAGE3
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_SHIRT_CHUNK
LWLLL TORSO_4,1|AFunc,A_CHANGE_PAL_VIOLENCE+4,CHESTdp1,CHESTdp1G
LWL 1,1|AFunc,PULL_ANIM
ANIM_RIGHT_TORSO_DAMAGE
LWLL 1,1|AFunc,A_TORSO_DAMAGE+4,ANIM_RIGHT_TORSO_DAMAGE2
.LONG ANIM_RIGHT_TORSO_DAMAGE3
LWL 1,1|AFunc,PULL_ANIM
ANIM_RIGHT_TORSO_DAMAGE2
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_SHIRT_CHUNK
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
LW 1,1|AMulti
; LWL TORSO_2,1|AFunc,A_INIT_CHEST_DAMAGE
LWL 1,1|AFunc,A_INIT_CHEST_DAMAGE
LWL 1,1|AFunc,PULL_ANIM
ANIM_RIGHT_TORSO_DAMAGE3
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_SHIRT_CHUNK
LWWLLL TORSO_3,1|AFlip|AFunc,0,A_CHANGE_PAL_VIOLENCE+4,CHESTdp1,CHESTdp1G
LWL 1,1|AFunc,PULL_ANIM
ANIM_LEG_DAMAGE
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_JEANS_CHUNK
LWLL 1,1|AFunc,A_LOAD_ANIMATION+2,ANIM_LEG_IDLE
ANIM_ARM_DAMAGE
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_LOSE_GUN_IFNECC
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWLL 1,1|AFunc,A_LOAD_ANIMATION+2,ANIM_ARM_IDLE
ANIM_HEAD_DAMAGE
LWLLLL 1,15|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION_SMALL,80h,40000h
LWL 1,1|AFunc,A_LOSE_GLASSES_IFNECC
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWLL 1,1|AFunc,A_LOAD_ANIMATION+2,ANIM_HEAD_IDLE
*
*TABLE OF FINAL ANIMATIONS FOR MONDOR (INDEXED VIA OPARTID)
*
FINAL_ANIM_TABLE
.LONG 0 ;Torso - left
.LONG 0 ;Torso - right
.LONG ANIM_LEG_FINAL ;Leg - left
.LONG ANIM_LEG_FINAL ;Leg - right
.LONG ANIM_ARM_FINAL ;Arm - left
.LONG ANIM_ARM_FINAL ;Arm - right
.LONG ANIM_HEAD_FINAL ;Head
ANIM_LEG_FINAL
LWLL 1,1|AFunc,A_SOUND+2,SND_PART_PREAMBLE
LWL 1,1|AFunc,A_BIG_SHIT_SCREAM
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
LWLL 1,1|AFunc,A_LOAD_PART_BLOW+2,A_BLOW_LEG
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWLLWW LEG_E,5|AFunc,A_SPAWN_BLOOD+4,LEG_STUMP_INIT,15,62
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,1|AFunc,A_RANDOM_MULTI_CHUNK
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
LWL 1,1|AFunc,A_START_MEDIUM_SHAKE
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,10
LW 1,0
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
LWL 1,1|AFunc,A_START_MEDIUM_SHAKE
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,10
LW 1,0
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
LWL 1,1|AFunc,A_START_MEDIUM_SHAKE
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWL 1,5|AFunc,A_BLOW_PART
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,10
LW 1,0
LWL 1,1|AFunc,A_CHECK_IF_FINAL
LEG_BLOW_INIT
.LONG LEG_D
.WORD DMAWNZ, 0, OM_CFUNC|OM_DUMCOLL
.LONG C_GREEN_STRTANIM,LEG3pG,ANIM_BLOW_SCREEN
ARM_BLOW_INIT
.LONG L_IDL_D_1
.WORD DMAWNZ, 0, OM_CFUNC|OM_DUMCOLL
.LONG C_GREEN_STRTANIM,FLESH3pG,ANIM_BLOW_SCREEN
HEAD_BLOW_INIT
.LONG H_IDL_D_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
LEG_STUMP_INIT
.LONG BONE_STUMP,DUMCOLL
.WORD OID_JUNK,DMAWNZ,M_DEAD|M_NOPARTANI|M_OPARTSXY,0
.LONG C_GREEN_STRTANIM,GLOOD_P,ANIM_ARM_STUMP
ANIM_ARM_FINAL
LWLL 1,1|AFunc,A_SOUND+2,SND_PART_PREAMBLE
LWL 1,1|AFunc,A_BIG_SHIT_SCREAM
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
LWLL 1,1|AFunc,A_LOAD_PART_BLOW+2,A_BLOW_ARM
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,1|AFunc,A_LOSE_GUN_IFNECC
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
LWL L_IDL_E_1,30|AFunc,A_TURN_ON_ARM_STUMP
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_BIG_SHIT_EXPLOSION
ANIM_HEAD_FINAL
LWLL 1,1|AFunc,A_SOUND+2,SND_PART_PREAMBLE
LWLLLL 1,1|AFunc,A_PreFrag_Box+6,FRAG_EXPLOSION,80h,40000h
LWLL 1,1|AFunc,A_SOUNDZ+2,SND_FINAL_DEATH
LWLL 1,1|AFunc,A_LOAD_PART_BLOW+2,A_BLOW_HEAD
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,3|AFunc,A_BLOW_PART
LWL 1,1|AFunc,A_RANDOM_MULTI_CHUNK
*The following three lines replace the three after that for
*an explosion with sound
LW H_SCM_D_1,3
LW H_SCM_D_2,3
LW H_SCM_D_3,1
LWLL 1,1|AFunc,A_AnimFrm+2,ANIM_BIG_SHIT_EXPLOSION
*
*Bloody stump stuff
*
ANIM_ARM_STUMP
LWLL 1,1|AFunc,A_GREEN_IF_NEC+2,GLOOD_P
LWLW 1,40|AFunc,A_Set_AnimLoop+1,55
AAS_LOOP
LWLLWW BLOOD_B_1,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLLWW BLOOD_B_2,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLLWW BLOOD_B_3,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLLWW BLOOD_B_4,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLLWW BLOOD_B_5,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLLWW BLOOD_B_6,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLLWW BLOOD_B_7,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LWLWW BONE_STUMP,1|AFunc,A_RAND_AnimSLP+2,1,15
LWLL 1,0|AFunc,A_Anim_DSJ+2,AAS_LOOP
AAS_LOOP2
LW BLOOD_B_1,2
LWLLWW BLOOD_B_2,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LW BLOOD_B_3,2
LWLLWW BLOOD_B_4,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LW BLOOD_B_5,2
LWLLWW BLOOD_B_6,2|AFunc,A_RAND_SPAWN_BLOOD+4,ARM_SPRAY_INIT,0,0
LW BLOOD_B_7,2
LWLWW BONE_STUMP,1|AFunc,A_RAND_AnimSLP+2,1,15
LWLL 1,0|AFunc,A_AnimFrm+2,AAS_LOOP2
ARM_SPRAY_INIT
.LONG BLOOD_A_1,DUMCOLL
.WORD OID_JUNK,DMAWNZ,M_DEAD|M_NOPARTANI|M_OPARTSXY,2
.LONG C_GREEN_STRTANIM,GLOOD_P,ANIM_ARM_SPRAY
ANIM_ARM_SPRAY
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,1,4
LWLWL BLOOD_A_2,0|AFunc,A_RAND_SOUNDZ+3,500,SND_BLOOD_SPRAY
LW BLOOD_A_3,0
LW BLOOD_A_4,0
LW BLOOD_A_5,0
LW BLOOD_A_6,0
LW BLOOD_A_7,0
LW BLOOD_A_8,0
LW BLOOD_A_9,0
LW BLOOD_A_10,0
LW BLOOD_A_11,0
LWL BLOOD_A_12,0|AFunc,A_PULL_ARM_SPURT
LW BLOOD_A_13,0
LW BLOOD_A_14,0
LW BLOOD_A_15,0
LW BLOOD_A_16,0
LWL BLOOD_A_17,0|AFunc,A_INIT_BLOOD_DROP
LWL 1,1|AFunc,PULL_ANIM
**************************************************************************
* *
* C_GREEN_STRTANIM *
* *
* Create func to change the palette to green if *
* necessary, then jump to C_STRTANIM *
* *
* A0 = Ptr to un-inserted object *
* *
**************************************************************************
C_GREEN_STRTANIM
MOVE *B0+,B14,L
MOVE @VIOLENCE_LEVEL,A14,W
DEC A14
JRP CGS_RED
MMTM SP,A0,A8
MOVE A0,A8
MOVE B14,A0
CALLA CHANGE_PAL
MMFM SP,A0,A8
CGS_RED
JAUC C_STRTANIM
**************************************************************************
* *
* A_GLOOD_IF_NEC *
* *
* Anim func to change to green blood if necessary. *
* *
* A8 = Ptr to object *
* AARG+,L = Palette we are changing to *
* *
**************************************************************************
A_GREEN_IF_NEC
MOVE @VIOLENCE_LEVEL,A14,W
DEC A14
JRP AGIN_X
CALLA GETAFARG_LONG
JAUC CHANGE_PAL
AGIN_X
RETS
**************************************************************************
* *
* Mondor's big gig in the sky *
* *
**************************************************************************
ANIM_FINAL_EXPLOSION
LWLW 1,1|AFunc,A_Set_AnimLoop+1,10
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
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,1|AFunc,A_START_MEDIUM_SHAKE
LWLWW 1,1|AFunc,A_RAND_AnimSLP+2,5,10
LWLL 1,0|AFunc,A_TURN_OFF_NEXT_PART+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_FINAL_EXPLOSION,0100h,40000h
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_Rain+6,FRAG_FINAL_RAIN,80H,40000H
LWLWL 1,1|AFunc,A_CREATEP+3,PID_IND,PROC_GAME_ENDING
LWL 1,1|AFunc,A_DELETE_MONDOR
*
*Thruster animation scripts
*
ANIM_THRUSTER_L
LWL 1,1|AFunc,A_THRUSTERL_INIT
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_THRUSTERL_LOOP
ANIM_THRUSTERL_LOOP
LWL 1,1|AFunc,A_THRUSTER_CHECK_L
.LONG 0
ANIM_THRUSTER_R
LWL 1,1|AFunc,A_THRUSTERR_INIT
LWLL 1,1|AFunc,A_AnimGo+2,ANIM_THRUSTERR_LOOP
ANIM_THRUSTERR_LOOP
LWL 1,1|AFunc,A_THRUSTER_CHECK_R
.LONG 0
ANIM_THRUSTER_FIRE
LW POD_L_B1,2
LWL POD_L_A1,1|AFunc,A_THRUSTER_LOOP
.LONG 0
*Left Thruster extend
ANIM_THRUSTER_OUT_L
LWL 1,6|AFunc,OBJ_ON
LW POD_L_A3,6
LW POD_L_A2,6
LWLL POD_L_A1,6|AFunc,A_THRUSTER_EXTENDED+2,ANIM_THRUSTER_L
*Right Thruster extend
ANIM_THRUSTER_OUT_R
LWL 1,6|AFunc,OBJ_ON
LW POD_L_A3,6
LW POD_L_A2,6
LWLL POD_L_A1,6|AFunc,A_THRUSTER_EXTENDED+2,ANIM_THRUSTER_R
*
*Foot rest animations
*
ANIM_FOOT_OUT
LWL 1,4|AFunc,OBJ_ON
LW CRFT_FOOT_B,4
LW CRFT_FOOT_C,4
LW CRFT_FOOT_D,4
LW CRFT_FOOT_E,4
LW CRFT_FOOT_F,4
LWL CRFT_PIPE,1|AFunc,A_FOOT_ON
LWL 1,1|AFunc,PULL_ANIM
*
* License plate drop
*
ANIM_PLATE_OUT
LWL 1,4|AFunc,OBJ_ON
LW PLATOUT2,4
LW PLATOUT3,4
LW PLATOUT4,4
LWL LISCPLATE1,1|AFunc,TURN_ON_SCALE_SHAD
LWL 1,1|AFunc,PULL_ANIM
*
* Animation to handle the disembodied seat dropping to the ground.
* Note: this animation must be run by the head part only!
*
ANIM_DROP_IN
LWLWW 1,1|AFunc,A_Set_Rel_Word+2,OYACCEL,2000H
LWL 1,1|AFunc,PULL_ANIM
*
* Just the final frame of the big Helga morph. This is what Mondor
* really is.
*
ANIM_MORPH_FINISH
LWLL TORSO_0,1|AMulti|AFunc,A_SCALE_PAL+2,VESTPAL1
LWWLL TORSO_0,1|AMulti|AFlip|AFunc,M_FLIPH,A_SCALE_PAL+2,VESTPAL1
LWLL LEG_A,1|AMulti|AFunc,A_SCALE_PAL+2,PANPAL1
LWWLL LEG_A,1|AMulti|AFlip|AFunc,M_FLIPH,A_SCALE_PAL+2,PANPAL1
LWL L_IDL_A_1,1|AMulti|AFunc,A_INIT_ARM
LWWL L_IDL_A_1,1|AMulti|AFlip|AFunc,M_FLIPH,A_INIT_ARM
LWWL H_IDL_A_1,1|AMulti|AFlip|AFunc,0,A_INIT_HEAD
LWWL H_IDLGLA1,1|AMulti|AFlip|AFunc,0,A_INIT_GLASSES
LWWLLL TORSO_2,1|AMulti|AFlip|AFunc,0,A_OBJ_OFF_SCALE_PAL+4,CHESTdp1,CHESTdp1G
LWWLLL TORSO_1,1|AMulti|AFlip|AFunc,0,A_OBJ_OFF_SCALE_PAL+4,CHESTdp1,CHESTdp1G
LWL 1,1|AMulti|AFunc,OBJ_ON
LWL 1,5|AFunc,OBJ_ON
;ANIM_START_MONDOR
LWL 1,1|AFunc,A_START_GEAR_OUT
; LWL 1,1|AFunc,A_GET_SHAD_MULTI
LW 1,15
; LWLWW 1,1|AFunc,A_Set_Rel_Word_Head+2,OYACCEL,1000H
LW 1,8
LWL 1,7|AFunc,A_GET_SHAD_MULTI
; LWLWW 1,1|AFunc,A_Set_Rel_Word_Head+2,OYACCEL,0
; LWLWW 1,1|AFunc,A_Set_Rel_Word_Head+2,OYVEL+16,0
; LWL 1,1|AFunc,A_GET_SHAD_MULTI
LWLLW 1,1|AFunc,A_Set_Var_Word+3,MONDOR_MORPH_FLAG,1
LWLLW 1,1|AFunc,A_Set_Var_Word+3,NO_CHARITY,0
LWLLW 1,30|AFunc,A_Set_Var_Word+3,GUNS_OFF,0
; LWLL 1,1|AFunc,A_SOUND+2,SND_MONDOR_BATTLE
LWL 1,1|AFunc,A_START_MOVEMENT
LWL 1,1|AFunc,PULL_ANIM
*
*Some miscellaneous fire stuff
*
POD_FIRE_TAB
.WORD -96,-68
.WORD -53,-76
.WORD -73,-87
.WORD -87,-83
.WORD -57,-83
*
*Script to make the glasses fly from Mondor's head
*
FRAG_GLASSES_FLY
.long GLASSES_FLY,F_GLASSES_CHUNK
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
.LONG 0
**************************************************************************
* *
* F_GLASSES_CHUNK - Frag Func for MONDOR glasses. *
* A0 = Ptr to un-inserted object. *
* *
* Note: Frag funcs must preserve A8-A11 and all B-File regs. *
* *
**************************************************************************
F_GLASSES_CHUNK
MOVE *A0(OZVEL),A14,L
ABS A14
NEG A14
MOVE A14,*A0(OZVEL),L
MOVE *A0(OYVEL),A14,L
ABS A14
ADDI 20000H,A14
NEG A14
MOVE A14,*A0(OYVEL),L
MOVIM MCHUNK_COLL,*A0(OCVECT),L ;Set up chunk with Vectors
RETS
GLASSES_FLY
LW H_IDLGLA1,1
LWL 1,1|AFunc,PULL_ANIM
*
*Script to make the license plate fly
*
FRAG_PLATE_FLY
.long PLATE_FLY,F_GUN_CHUNK
.word OID_JUNK,1*800H+1*40H+FRGPAL+FRGGCOL
.LONG 0
PLATE_FLY
LWLW PLT1,1|AFunc,A_INIT_AnimSLP+1,1
PLATE_FLY_LOOP
LW PLT2,0
LW PLT3,0
LW PLT4,0
LW PLT5,0
LW PLT6,0
LW PLT7,0
LWLW PLT8,0|AFunc,A_INC_AnimSLP+1,5
LWLL PLT1,0|AFunc,A_CHUNK_ONSCREEN+2,PLATE_FLY_LOOP
LWL 1,1|AFunc,DELETE_OBJ
**************************************************************************
* *
* PROC_GAME_ENDING *
* *
* Ending message for game. This is when Mondor is defeated. *
* *
**************************************************************************
PROC_GAME_ENDING
MOVIM INEPILOG,@GAME_STATE,W ;Show us the state
MOVKM 1,@GUNS_OFF,W
SLEEP 100
SOUND1 SND_MONDOR_FINALE
SLEEP 2
SOUND1 SND_CHAN0_OFF
SLEEP 180
SOUND1 SND_WALK_INTRO
SLEEP 320 ;Wait for the end of the rain
CLR A4
MOVE @NPLAYERS,A6,W
MOVI P1DATA,A2
PGE_WING_LOOP
MOVE *A2(PWINGS),A14,W
ADD A14,A4
ADDI PDSIZE,A2
DEC A6
JRNN PGE_WING_LOOP
CLR A1
CMPK 5,A4
JRLO PGE_STUFF_WING
MOVK 1,A1
PGE_STUFF_WING
MOVE A1,@DO_AERO_ENDING,W
MOVI CONGRATS_MESS1,A8
JSRP TEXT_SLIDE_UP
SLEEP 80
MOVI CONGRATS_MESS2,A8
JSRP TEXT_SLIDE_UP
SLEEP 80
MOVI CONGRATS_MESS3,A8
JSRP TEXT_SLIDE_UP
MOVI CONGRATS_MESS4,A8
JSRP TEXT_SLIDE_UP
SLEEP 120
CALLA CLRTEXT
SLEEP 2
MOVI CONGRATS_MESS5,A8
JSRP TEXT_SLIDE_UP
MOVI CONGRATS_MESS6,A8
JSRP TEXT_SLIDE_UP
SLEEP 100
MOVE @DO_AERO_ENDING,A14,W
JRNZ PGE_COOL_ENDING
MOVI CONGRATS_MESS7,A8
JSRP TEXT_SLIDE_UP
SLEEP 80
CALLA CLRTEXT
SLEEP 2
MOVI CONGRATS_MESS8,A8
JSRP TEXT_SLIDE_UP
MOVI CONGRATS_MESS9,A8
JSRP TEXT_SLIDE_UP
SLEEP 100
MOVI CONGRATS_MESS10,A8
JSRP TEXT_SLIDE_UP
SLEEP 80
MOVI CONGRATS_MESS11,A8
JSRP TEXT_SLIDE_UP
SLEEP 60
CALLA CLRTEXT
SLEEP 2
MOVI CONGRATS_MESS12,A8
JSRP TEXT_SLIDE_UP
MOVI CONGRATS_MESS13,A8
JSRP TEXT_SLIDE_UP
MOVI CONGRATS_MESS14,A8
JSRP TEXT_SLIDE_UP
SLEEP 150
CALLA CLRTEXT
SLEEP 2
MOVI CONGRATS_MESS15,A8
JSRP TEXT_SLIDE_UP
MOVI CONGRATS_MESS16,A8
JSRP TEXT_SLIDE_UP
SOUND1 SND_WALK_XITION
SLEEP 100
; MOVIM 3,@BONUS_DIRECTION,W
CLRM @BONUS_DIRECTION,W
JAUC WAVE_END_IMM
DIE
PGE_COOL_ENDING
MOVI CONGRATS_MESS7b,A8
JSRP TEXT_SLIDE_UP
SLEEP 80
CALLA CLRTEXT
SLEEP 2
MOVI CONGRATS_MESS8b,A8
JSRP TEXT_SLIDE_UP
SLEEP 80
MOVI CONGRATS_MESS9b,A8
JSRP TEXT_SLIDE_UP
SLEEP 100
MOVI CONGRATS_MESS10,A8
JSRP TEXT_SLIDE_UP
SLEEP 10
; SOUND1 SND_WALK_XITION
* Bring band up here
SLEEP 60
CALLA CLRTEXT
SLEEP 2
* Head for the dressing room
MOVKM 1,@SCROLL_FLAG,W
DIE
**************************************************************************
* *
* TEXT_SLIDE_UP *
* *
* Process subroutine to create text off the bottom of *
* the screen and slide it on. *
* *
* A8 = Ptr to string *
* *
**************************************************************************
TEXT_SLIDE_UP
CALLA LM_SETUP
PUSHP A9
MOVIY 275,A9
JSRP PRINTF
PULLP A9
PUSHP A8
MOVE A2,A8
MOVE A9,A3
MOVE A3,A2
MOVIY 275,A2
MOVK 25,A4
CALLA SLINEVEL_LOAD
SLEEPR A4
CALLA CLR_VEL
PULLP A8
RETP
CONGRATS_MESS1
MESS_MAC RD20FONT,2,197,15+SKYTOPOF,COLOR_PLF,STRCNRMOS,OID_TEXT
.STRING "Congratulations!",0
.EVEN
CONGRATS_MESS2
MESS_MAC RD15FONT,2,197,40+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "You have defeated the NEW ORDER.",0
.EVEN
CONGRATS_MESS3
MESS_MAC RD15FONT,2,197,65+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "Youth all around the world",0
.EVEN
CONGRATS_MESS4
MESS_MAC RD15FONT,2,197,90+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "will be free to pursue their pleasures.",0
.EVEN
CONGRATS_MESS5
MESS_MAC RD15FONT,2,197,20+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "And you will be known throughout history",0
.EVEN
CONGRATS_MESS6
MESS_MAC RD15FONT,2,197,50+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "as the leader of this Revolution!",0
.EVEN
CONGRATS_MESS7
MESS_MAC RD15FONT,2,197,80+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "BUT....",0
.EVEN
CONGRATS_MESS8
MESS_MAC RD15FONT,2,197,20+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "You will NOT be known for partying",0
.EVEN
CONGRATS_MESS9
MESS_MAC RD15FONT,2,197,40+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "with the world's greatest rock band,",0
.EVEN
CONGRATS_MESS10
MESS_MAC RD20FONT,2,197,80+SKYTOPOF,COLOR_PLF,STRCNRMOS,OID_TEXT
.STRING "AEROSMITH!",0
.EVEN
CONGRATS_MESS11
MESS_MAC RD15FONT,2,197,120+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "Why?",0
.EVEN
CONGRATS_MESS12
MESS_MAC RD15FONT,2,197,20+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "Because you did not successfully locate",0
.EVEN
CONGRATS_MESS13
MESS_MAC RD15FONT,2,197,50+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "All of the band members hidden",0
.EVEN
CONGRATS_MESS14
MESS_MAC RD15FONT,2,197,80+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "throughout the game!",0
.EVEN
CONGRATS_MESS15
MESS_MAC RD15FONT,2,197,40+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "Find all members of AEROSMITH",0
.EVEN
CONGRATS_MESS16
MESS_MAC RD15FONT,2,197,60+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "and become a true Rock legend!",0
.EVEN
*
* Text for alternate "You won" ending
*
CONGRATS_MESS7b
MESS_MAC RD15FONT,2,197,80+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "NOW....",0
.EVEN
CONGRATS_MESS8b
MESS_MAC RD15FONT,2,197,20+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "It's time to get the real party started!",0
.EVEN
CONGRATS_MESS9b
MESS_MAC RD15FONT,2,197,40+SKYTOPOF,COLOR_PWHITE,STRCNRMOS,OID_TEXT
.STRING "Midway presents the world's greatest rock band,",0
.EVEN
*
* Sounds for the ending sequence
*
SND_MONDOR_FINALE
.word 0f1f0h,162,8556h,0
SND_WALK_INTRO
.WORD 0F0FDH,1,08024H,0 ;Walk this way, intro loop
SND_WALK_XITION
.WORD 0F0FDH,1,08026H,0 ;Walk this way, transition
*
* Wimpy green palettes for the fucking Australian govt.
*
FLESH2pG:
.word 61
.word 00000h,07fffh,02906h,03147h,03989h,049ech,045cah,024e5h
.word 05a4dh,055aah,0628fh,06ed0h,072f1h,07b32h,01165h,00421h
.word 03568h,021e5h,01483h,01cc4h,04e0ch,065cah,0662dh,00460h
.word 00e85h,03208h,001e0h,001a7h,00260h,00260h,04e0bh,002e5h
.word 00120h,010e0h,00188h,00162h,01dc3h,0722ch,061cdh,0768fh
.word 01503h,06ad5h,067f1h,046e8h,002a0h,05e0bh,05e8eh,05dcdh
.word 01929h,04f27h,05a30h,04a10h,06b18h,06a0bh,00d8ch,02d48h
.word 03267h,064a3h,026e5h,01fa3h,0158bh
FLESH3pG:
.word 62
.word 00000h,07fffh,072f1h,07b32h,0628fh,05a4dh,04e0ch,06ed0h
.word 045cah,03527h,03568h,03989h,02926h,024c5h,00081h,00d40h
.word 00900h,01483h,01ea7h,04549h,00480h,01a23h,01cc4h,02a25h
.word 00d60h,00269h,01965h,00580h,055adh,065aah,0116ah,04a31h
.word 049cch,0294ah,00f05h,056b5h,00de0h,05652h,06bfah,0662dh
.word 06a0bh,01d8ah,01307h,01de3h,06652h,04e0bh,02883h,039adh
.word 066d6h,0728fh,0560bh,054a3h,0722ch,05e8eh,072f7h,05ab2h
.word 0262fh,029eeh,03a51h,029abh,01506h,06317h
CHESTdp1G:
.word 60
.word 00000h,07fdfh,00420h,00060h,00080h,00100h,00160h,00240h
.word 02927h,014c5h,02483h,04907h,00300h,001c0h,000c0h,00c83h
.word 02929h,03989h,024c6h,003eeh,01c64h,035adh,0354ah,045cah
.word 045e9h,03527h,030e8h,045ceh,00c84h,05a4dh,04e0ch,059adh
.word 06a4eh,06a51h,065eeh,059abh,01a04h,04e52h,02d8bh,00120h
.word 00120h,04549h,03e0fh,02064h,01d07h,05483h,05907h,065aah
.word 06968h,07713h,051d1h,01483h,0356dh,0496ch,05278h,045ech
.word 040e8h,01d29h,04e0bh,06f18h
FHEDcc2G:
.word 64
.word 00000h,07fffh,045cah,00180h,001a0h,03527h,00620h,03989h
.word 006a5h,04e0ch,02926h,00020h,05a4dh,049e8h,02d45h,01645h
.word 03568h,066afh,03d87h,04483h,018c5h,07b32h,045a7h,00140h
.word 028e3h,059aah,03e2ah,04948h,00080h,01483h,06ef1h,028a4h
.word 003e0h,05483h,02883h,06a31h,04dc7h,0662dh,04e0bh,07610h
.word 06bf5h,0720ch,035adh,072f1h,05273h,06eb5h,02529h,06f5ah
.word 059cdh,0728fh,049ach,06f17h,07b37h,05a8eh,0562bh,06a0bh
.word 02962h,07de0h,07d40h,06400h,001a0h,05400h,07c00h,07ce0h
FHEDcc3G:
.word 64
.word 00000h,07fffh,000e0h,00565h,01145h,04949h,035adh,04beeh
.word 03949h,049adh,03989h,02906h,00020h,05a4dh,00220h,04631h
.word 03527h,045cah,0628fh,04e0ch,018c5h,07b32h,01e27h,03483h
.word 0294ah,028a5h,00060h,01483h,056b5h,04e0bh,05a30h,001a0h
.word 05549h,02883h,06ab0h,021a6h,06739h,06631h,059aah,00a25h
.word 077bdh,00260h,06ab5h,0662dh,02a67h,072d1h,04beah,021c3h
.word 00280h,05e92h,06527h,05a8eh,057b5h,07759h,07a10h,02562h
.word 0520bh,07de0h,07d40h,06400h,00120h,05400h,07c00h,07ce0h
GARMS2pG:
.word 62
.word 00000h,07fffh,03989h,045cah,03568h,01862h,00c42h,02926h
.word 03147h,04e0ch,05a4dh,049ech,01cc4h,001a5h,001a0h,02e68h
.word 01a44h,020c5h,00920h,01aa5h,00220h,05e8eh,04e0bh,0628fh
.word 06ed0h,07b32h,072f1h,01482h,0332ah,059aah,02267h,02aa8h
.word 0662ch,024a3h,00340h,02ea7h,06569h,02f27h,01780h,04883h
.word 0722ch,0716bh,071a9h,0560bh,043b1h,02b87h,003a0h,076afh
.word 065eeh,017a4h,05dceh,03083h,035adh,05610h,02920h,02529h
.word 05ad6h,04a52h,03587h,06483h,077b5h,07ffch
GARMS3pG:
.word 61
.word 00000h,07fffh,03989h,045cah,03568h,01862h,00c42h,02906h
.word 03127h,001a0h,000e0h,024c5h,045ceh,01cc4h,034c5h,04e0ch
.word 04527h,00200h,05a4dh,05e8eh,04e0bh,0628fh,01625h,06ed0h
.word 07b32h,033a9h,059aah,06a0ch,01882h,024a3h,01aa7h,072f1h
.word 00dc3h,00260h,04549h,06589h,04a31h,05652h,059cdh,006a5h
.word 05ad6h,06318h,00300h,02529h,035adh,06547h,060c4h,00ba0h
.word 06883h,0720ch,076afh,03e73h,04ad6h,01a23h,02920h,0114ah
.word 03587h,06a51h,05a92h,077b5h,07ffch
LEG1pG:
.word 61
.word 00000h,07fffh,02929h,018a5h,00821h,01063h,01044h,020e7h
.word 0316bh,039adh,024e9h,05273h,0356eh,04631h,05ab5h,02d26h
.word 020c2h,041eeh,077bch,06716h,039aah,05293h,01d08h,01883h
.word 045cah,066afh,07b33h,0564dh,06ef1h,00320h,072f1h,06e4dh
.word 05a0ah,069cch,05627h,02748h,00280h,01b45h,05907h,04e0ch
.word 051c8h,059aah,06631h,0764eh,037a9h,03c20h,05dech,0622ah
.word 04bd2h,00b80h,06c83h,076afh,071edh,065a6h,057f5h,07483h
.word 07f74h,01d07h,00c83h,00c84h,02d8bh
LEG2pG:
.word 58
.word 00000h,07fffh,02929h,018a5h,00021h,01042h,01044h,020e7h
.word 0356ah,039adh,024e9h,05651h,0356eh,04631h,05ab5h,03126h
.word 024a3h,045ceh,077bdh,07335h,03989h,05692h,01d08h,01883h
.word 00120h,009a0h,01580h,04529h,03946h,00ea0h,038c6h,03483h
.word 045cah,06b5ah,0654ah,05949h,04927h,01ea6h,05bb2h,059cdh
.word 05a4dh,059aah,048a3h,00f61h,0666eh,04b8eh,05da7h,071cbh
.word 071edh,069aah,07359h,065c9h,050a3h,069b0h,01d07h,00c83h
.word 00c84h,02d8bh
LEG3pG:
.word 62
.word 00000h,07fffh,02929h,018a5h,00821h,01442h,01044h,020e7h
.word 0356bh,039adh,024e9h,05631h,0356eh,04a31h,05ab5h,02926h
.word 020c2h,045ceh,07bddh,06716h,0398ah,05293h,00140h,005a1h
.word 038c5h,01d08h,01883h,00621h,002c0h,03925h,04549h,054c6h
.word 05929h,03527h,06b5ah,0654ah,059cdh,051abh,041aah,04751h
.word 050cah,01a46h,0562eh,03b2eh,04883h,03883h,05107h,06e0fh
.word 06443h,066d5h,06693h,04543h,071ceh,04e0ch,021adh,07359h
.word 076d6h,07a73h,01d07h,00c83h,00c84h,02d8bh
.END