wwf-wrestlemania/FINISEQ.ASM

1740 lines
39 KiB
NASM
Executable File

**************************************************************
*
* Software: Michael J. Lynch
* Initiated: 5/02/95
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
**************************************************************
.file "finiseq.asm"
.title "Finish moves sequences"
.width 132
.option b,d,l,t
.mnolist
.include "macros.h"
.include "mproc.equ" ;Mproc equates
.include "sys.equ"
.include "game.equ"
.include "plyr.equ"
.include "anim.equ"
.include "sound.h"
.include "ring.equ"
.include "display.equ"
.include "ring.equ"
.include "takerimg.h"
.include "bretimg.h"
.include "doinkimg.h"
.include "yokoimg.h"
.include "razorimg.h"
.include "leximg.h"
.include "shawnimg.h"
.include "bamimg.h"
.include "damage.equ"
.include "miscimg.glo"
.INCLUDE "SWEAT.EQU"
BSSX close_the_door,16
BSSX close_the_floor,16
BSSX dead_wrestler,32
BSSX finish_completed,16
BSSX wres_mv_done,16
BSSX guy_in,16
BSSX guy_up,16
.bss pal_test,16*64
.ref KILL
.ref triple_sound
.ref change_anim1a
.ref DO_CROWD_CHEER
.ref UNDNEG_P
.ref RNDRNG0
.ref do_roll
******************************************************************************
* *
* Bret Hart Finish Move Sequences *
* *
******************************************************************************
.if NUM_BRET_FINISHES
#******************************************************************
*
* Bret Hart finish move #1
SUBR hrt_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_BRET_FINISHES > 1
#******************************************************************
*
* Bret Hart finish move #2
SUBR hrt_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Bam Bam Bigelow Finish Move Sequences *
* *
******************************************************************************
.if NUM_BAM_FINISHES
#******************************************************************
*
* Bam Bam finish move #1
SUBR bam_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_BAM_FINISHES > 1
#******************************************************************
*
* Bam Bam finish move #2
SUBR bam_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Yokozuna Finish Move Sequences *
* *
******************************************************************************
.if NUM_YOKO_FINISHES
#******************************************************************
*
* Yokozuna finish move #1
SUBR yok_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_YOKO_FINISHES > 1
#******************************************************************
*
* Yokozuna finish move #2
SUBR yok_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Doink The Clown Finish Move Sequences *
* *
******************************************************************************
.if NUM_DOINK_FINISHES
#******************************************************************
*
* Doink finish move #1
SUBR dnk_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_DOINK_FINISHES > 1
#******************************************************************
*
* Doink finish move #2
SUBR dnk_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Razor Ramon Finish Move Sequences *
* *
******************************************************************************
.if NUM_RAZOR_FINISHES
#******************************************************************
*
* Razor Ramon finish move #1
SUBR rzr_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_RAZOR_FINISHES > 1
#******************************************************************
*
* Razor Ramon finish move #2
SUBR rzr_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Lex Lugar Finish Move Sequences *
* *
******************************************************************************
.if NUM_LEX_FINISHES
#******************************************************************
*
* Lex Lugar finish move #1
SUBR lex_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_LEX_FINISHES > 1
#******************************************************************
*
* Lex Lugar finish move #2
SUBR lex_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Undertaker Finish Move Sequences *
* *
******************************************************************************
.if NUM_TAKER_FINISHES
.endif
.if NUM_TAKER_FINISHES > 1
#******************************************************************
*
* Undertaker finish move #2
SUBR und_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
* *
* Shawn Michaels Finish Move Sequences *
* *
******************************************************************************
.if NUM_SHAWN_FINISHES
#******************************************************************
*
* Shawn Michaels finish move #1
SUBR shn_finish1_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
.if NUM_SHAWN_FINISHES > 1
#******************************************************************
*
* Shawn Michaels finish move #2
SUBR shn_finish2_move
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETFACING ;ANI_XFLIP <- not primary anim
.word ANI_SET_WRESTLER_XFLIP
.word ANI_SETMODE,MODE_NORMAL
.word ANI_END
.endif
******************************************************************************
;
; The wrestler being knocked into the coffin MUST start at a Z of
; greater than 1430h and end up at a Z of 1428h when in the coffin.
;
HOLE_XPOS .equ 1250
HOLE_YPOS .equ 197
;MAT_BACK_Z .equ ((RING_TOP+20)|1000h)
MAT_BACK_Z .equ ((RING_Z_CENTER+20)|1000h)
TMBSTN_Z .equ MAT_BACK_Z
MAT_FRONT_Z .equ MAT_BACK_Z+27
COF_BACK_Z .equ MAT_BACK_Z+28
COF_FRONT_Z .equ COF_BACK_Z+2
DOOR_CLOSE_Z .equ COF_FRONT_Z+2
WRES_Z .equ ((COF_BACK_Z)&0fffh)
EXP_Z .equ MAT_FRONT_Z+1
COFFIN_VEL .equ 4
NUM_PUFFS .equ 25
#********************************************************************
*
* Do little explosions and puffs of smoke above hole in ring
*
SUBRP #exp1_anim
.long SMOKE01
.long SMOKE02
.long SMOKE03
.long SMOKE04
.long SMOKE05
.long SMOKE06
.long SMOKE07
.long SMOKE08
.long SMOKE09
.long SMOKE10
.long 0
SUBRP #exp2_anim
.long SMOKEB01
.long SMOKEB02
.long SMOKEB03
.long SMOKEB04
.long SMOKEB05
.long SMOKEB06
.long SMOKEB07
.long SMOKEB08
.long SMOKEB09
.long SMOKEB10
.long 0
SUBRP #ltl_puff
.long #exp1_anim
.long #exp2_anim
SUBRP ltl_exp
movk 10,a0 ; Sleep a random amount of time before
calla RNDRNG0 ; we start the little puff of smoke
addk 1,a0
calla PRCSLP
movi 80,a0 ; Get a random X position above the hole
calla RNDRNG0 ; To fire off the puff of smoke
subi 40,a0
movi HOLE_XPOS,a14
add a14,a0 ; Translate to hole position
move a0,*a13(256)
movi 30,a0 ; Get a random Y position above the hole
calla RNDRNG0 ; To fire off the puff of smoke
subi 25,a0
addi HOLE_YPOS,a0 ; Translate to hole position
move a0,*a13(256+16)
movi 10,a0 ; Get a random Z position
calla RNDRNG0
addi EXP_Z,a0 ; Translate to hole Z position (in front of coffin)
move a0,*a13(256+32)
movi 7,a0 ; Get a random velocity to use
calla RNDRNG0
addk 2,a0
move a0,*a13(256+48)
movk 1,a0 ; Get a random smoke puff to use
calla RNDRNG0
sll 5,a0
movi #ltl_puff,a9
add a0,a9
move *a9,a9,L ; Pointer to puff animation
move *a13(256),a0 ; Get X position
sll 16,a0
move *a13(256+16),a1 ; Get Y position
sll 16,a1
move *a13(256+32),a3 ; Get Z position
move *a9+,a2,L ; Get first image
movi DMAWNZ|M_3D,a4 ; Flags
movi CLSFRWK,a5 ; This is the class
clr a6 ; No velocities
clr a7
calla BEGINOBJ ; Make the first one
; Now make an explosion sound
movi 1252,a3
calla SNDSND
#puff_lp
SLEEPK 3 ; Let us see it
move *a9+,a0,L ; Get next image
jrz #puff_done ; br = no more images
move *a8(OCTRL),a1 ; Change the image
calla obj_aniq
move *a8(OYPOS),a14 ; Get current Y Position
move *a13(256+48),a1 ; Get the velocity
sub a1,a14 ; Add it
move a14,*a8(OYPOS) ; Write it back
jruc #puff_lp ; Go do next image in sequence
#puff_done
calla DELOBJA8 ; Kill off the object
DIE
#********************************************************************
*
* Do Undertakers Coffin rising from below
*
SUBRP #mat_anim
.long MATCOF01
.long MATCOF02
.long MATCOF03
.long MATCOF04
SUBRP #mat_anim2
.long 0
SUBRP #cof_anim1
.long COFFIN02
.long COFFIN03
.long COFFIN04
.long COFFIN05
SUBRP #cof_anim2
.long 0
SUBRP #tstone_anim
.long TMBSTN01
SUBRP #tstone_test
.long TMBSTN02
.long TMBSTN03
.long TMBSTN04
.long TMBSTN05
.long TMBSTN06
.long TMBSTN07
.long TMBSTN08
.long 0
SUBR und_coffin_up
clr a14 ; Set up the state machine
move a14,@close_the_door
move a14,@close_the_floor
SLEEP TSEC*2
movi #mat_anim,a9 ; Start up the mat animation
movi [HOLE_XPOS,0],a0
movi DMAWNZ|M_3D,a4
movi [HOLE_YPOS,0],a1
move *a9+,a2,L
movi MAT_BACK_Z,a3
movi CLSFRWK,a5
clr a6
clr a7
calla BEGINOBJ
#man_loop
SLEEPK 3 ; Display the frame
move *a9+,a0,L ; Are we done ?
jrz #do_open_mat ; br = yes
move *a8(OCTRL),a1 ; Change to next frame
calla obj_aniq
jruc #man_loop
#do_open_mat
move a8,a11 ; Save the the object pointer
move *a8(OCTRL),a1 ; Change the image to the front piece
movi MATCOF05B,a0
calla obj_aniq
movi [HOLE_XPOS,0],a0 ; Create the front piece
movi DMAWNZ|M_3D,a4
movi [HOLE_YPOS,0],a1
movi MATCOF05A,a2,L
movi MAT_FRONT_Z,a3
movi CLSFRWK,a5
clr a6
clr a7
calla BEGINOBJ
SLEEPK 2
; Now make some little explosions above the hole
movi NUM_PUFFS,a9 ; Make 25 little puffs of smoke
#exp_clp
CREATE0 ltl_exp
dsjs a9,#exp_clp
; Now start the coffin rising up
CREATE0 do_up_coffin ; Make the coffin come up through
; the floor
#wait_fclose
SLEEPK 1 ; Wait to be told to close the floor
move @close_the_floor,a14
jrz #wait_fclose
SLEEPK 15
calla DELOBJA8 ; Delete the back piece
movi #mat_anim2,a9 ; Set up for close animation
move a11,a8 ; Get saved object pointer
#fc_loop
move *-a9,a0,L ; Change the image
move *a8(OCTRL),a1
calla obj_aniq
SLEEPK 3
cmpi #mat_anim,a9 ; Are we done ?
jrnz #fc_loop ; br = no
calla DELOBJA8 ; Get rid of this mat piece
SLEEPK 3
movk 2,a14
move a14,@close_the_floor ; Let whoever know floor is closed
; Now Bring up the tombstone
movi 0fh,a0
calla triple_sound
; movi #tstone_anim,a9 ; Set up to bring up the tombstone
movi #tstone_test,a9 ; Set up to bring up the tombstone
movi [HOLE_XPOS,0],a0 ; And create the first object
movi DMAWNZ|M_3D,a4
movi [HOLE_YPOS-18,0],a1
move *a9+,a2,L
movi TMBSTN_Z,a3
movi CLSFRWK,a5
clr a6
clr a7
push a9
calla BEGINOBJ
pull a9
SLEEPK 4 ; Let's see it
#stn_up
move *a9+,a0,L ; Get the next image
jrz #stn_done ; br = no more images
move *a8(OCTRL),a1
calla obj_aniq ; Change the image
SLEEPK 4 ; Let's see it
jruc #stn_up ; Do next image
#stn_done
movk 3,a14
move a14,@close_the_floor ; Let whoever know tombstone is up
move a14,@finish_completed
DIE
SUBRP do_up_coffin
movi #cof_anim1,a9
movi [HOLE_XPOS+7,0],a0 ; Create the Coffin
movi DMAWNZ|M_3D,a4
movi [HOLE_YPOS+108,0],a1
move a1,a10
movi COFFIN01,a2
movi COF_BACK_Z,a3 ; Make it in front of mat pieces
movi CLSFRWK,a5
clr a6
clr a7
calla BEGINOBJ
move a8,*a13(256),L ; Save the object pointer
; Make some sound while moving up
movi 014h,a0
calla triple_sound
movk COFFIN_VEL,a14 ; Start it 4 pixels high
move a14,*a8(OSIZEY)
#mv_up_lp
SLEEPK 1
move *a8(OSIZEY),a14 ; Get the size of the object
cmpi 136,a14 ; Are we at full size yet ?
jrz #open_lp ; br = yes
addk COFFIN_VEL,a14 ; Make it 4 pixels larger
move a14,*a8(OSIZEY)
move *a8(OYPOS),a14 ; Get its current position
subk COFFIN_VEL,a14 ; Move it up 4 pixels
move a14,*a8(OYPOS) ; Write it back
jruc #mv_up_lp ; Go display it
#open_lp
move *a9+,a0,L ; Now open the coffin door
cmpi COFFIN05,a0 ; Is the door open ?
jrz #open_done ; br = yes
move *a8(OCTRL),a1
calla obj_aniq
SLEEPK 3
jruc #open_lp
#open_done
movk 1,a14
move a14,@close_the_door
move *a8(OCTRL),a1 ; Keep the last piece
calla obj_aniq
move *a8(OYPOS),a14 ; Get the current position
movi DMAWNZ|M_3D,a4
movi [HOLE_XPOS+7,0],a0 ; And create the front piece
move a14,a1
sll 16,a1
movi COFFIN6A,a2
movi COF_FRONT_Z,a3 ; Make sure its in front of back piece
movi CLSFRWK,a5
clr a6
clr a7
calla BEGINOBJ
move a8,*a13(256+32),L ; Save away it's object pointer
move *a13(256),a9,L ; Back piece object pointer
movi HOLE_XPOS+7,a14
move a14,*a13(256+64)
move *a9(OYPOS),*a13(256+80) ; Save the Y position
move *a13(256+32),a10,L ; Front piece object pointer
CREATE0 hover_coffin
move a0,*a13(256+96),L ; Save the process pointer
#wait_to_close
SLEEPK 3 ; Now wait until told to close the
move @close_the_door,a14 ; coffin door
cmpi 2,a14
jrlt #wait_to_close
move *a13(256+96),a0,L ; Get the hover craft process pointer
calla KILL ; And kill him off
move *a13(256),a8,L ; Get the back piece object pointer
movi #cof_anim2,a9 ; Now close the door
#close_loop
move *-a9,a0,L ; Pointer to image header
cmpi COFFIN02,a0 ; Are we at this image
jrnz #no_z_adj ; br = no
move *a13(256+32),a8,L ; Get front piece object pointer
push a0
calla DELOBJA8 ; Get rid of front piece
pull a0
move *a13(256),a8,L ; Get back piece object pointer
movi DOOR_CLOSE_Z,a14 ; Change its Z to in front of wrestler
move a14,*a8(OZPOS)
#no_z_adj
move *a8(OCTRL),a1 ; Change the image
calla obj_aniq
SLEEPK 1 ; Lets see it
cmpi #cof_anim1,a9 ; Are we done closing the door ?
jrne #close_loop ; br = no
movi COFFIN01,a0 ; Change the image to the closed
move *a8(OCTRL),a1 ; coffin image
calla obj_aniq
movk 3,a14
move a14,@close_the_door
; Make a slamming door sound
movi 03dh,a0
calla triple_sound
; Shake the coffin around when the door slams shut
movk 16,a9 ; Number of shakes
#shk_lp
movk 4,a0
calla RNDRNG0
subk 2,a0
move *a13(256+64),a14
add a0,a14
move a14,*a8(OXPOS)
movk 2,a0
calla RNDRNG0
subk 2,a0
move *a13(256+80),a14
add a0,a14
move a14,*a8(OYPOS)
SLEEPK 1
dsjs a9,#shk_lp
move *a13(256+64),*a8(OXPOS)
move *a13(256+80),*a8(OYPOS)
; Now make some little explosions above the hole
movi NUM_PUFFS,a9 ; Make 25 little puffs of smoke
exp_clp
CREATE0 ltl_exp
dsjs a9,exp_clp
; Make some sound while moving down
movi 011h,a0
calla triple_sound
movi 136,a14 ; Set starting size of image
move a14,*a8(OSIZEY)
#mv_dn_lp
CREATE0 ltl_exp
SLEEPK 1 ; Lets see it
move *a8(OSIZEY),a14 ; Get current size
cmpi 1,a14 ; Are we at <= 1 pixel
jrle #mv_dn_done ; br = yes
subk COFFIN_VEL,a14
move a14,*a8(OSIZEY)
move *a8(OYPOS),a14 ; Get the current position
addk COFFIN_VEL,a14
move a14,*a8(OYPOS) ; And write it back
jruc #mv_dn_lp
#mv_dn_done
calla DELOBJA8 ; Get rid of the coffin
movk 1,a14 ; Tell the floor to close up
move a14,@close_the_floor
DIE ; We done
#*************************************************************
*
* Hover coffin - makes the coffin look like it's hovering
* This guy runs until killed by process that creates it
*
* a9 = *object 1
* a10 = *object 2
SUBRP hover_coffin
move *a10(OYPOS),a11 ; Get start Y position
#reset_a8
movk 1,a8 ; Start with move down
#do_agin
SLEEPK 7
move *a9(OYPOS),a14 ; Get current Y position
add a8,a14 ; Add in delta
move a14,*a9(OYPOS) ; Write it back
move *a10(OYPOS),a14 ; Get current Y position
add a8,a14 ; Add it delta
move a14,*a10(OYPOS) ; Write it back
sub a11,a14 ; Subtract current from start
abs a14 ; Make sure its positive
cmpi 2,a14 ; <= 3
jrle #do_agin ; br = yes
move a8,a8 ; a8 negative ?
jrn #reset_a8 ; br = yes
movk 1,a8 ; set to -1
not a8
CREATE0 ltl_exp
CREATE0 ltl_exp
CREATE0 ltl_exp
CREATE0 ltl_exp
CREATE0 ltl_exp
CREATE0 ltl_exp
CREATE0 ltl_exp
CREATE0 ltl_exp
jruc #do_agin ; keep a bouncin
DIE
#*****************************************************************************
*
* Closes the coffin door
*
SUBRP close_door
movk 2,a14
move a14,@close_the_door
rets
#****************************************************************************
*
* Checks to see if coffin door is open
*
SUBRP is_door_open
move *a13(ANIMODE),a1
andni MODE_STATUS,a1
move @close_the_door,a14
jrz #door_not_open
ori MODE_STATUS,a1
#door_not_open
move a1,*a13(ANIMODE)
rets
#****************************************************************************
*
* Checks to see if the dead guy is ready to be stuffed into the coffin
*
SUBRP is_guy_up
move *a13(ANIMODE),a1
andni MODE_STATUS,a1
move @guy_up,a14
jrz #guy_not_up
ori MODE_STATUS,a1
#guy_not_up
move a1,*a13(ANIMODE)
rets
#****************************************************************************
*
* Checks to see if the dead guy is in the coffin
*
SUBRP is_he_in
move *a13(ANIMODE),a1
andni MODE_STATUS,a1
move @guy_in,a14
jrz #guy_not_in
ori MODE_STATUS,a1
#guy_not_in
move a1,*a13(ANIMODE)
rets
#****************************************************************************
*
* Makes a wrestler disappear after being shut into the coffin
*
SUBRP disappear_wrestler
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY|MODE_NOSHADOW|MODE_INVISIBLE
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_SETPLYRMODE,MODE_DEAD
.word ANI_ROT
#****************************************************************************
*
* Make wrestler disappear - Monitors the state of the coffin door and makes
* the dead wrestler invisible when the door is closed.
*
SUBRP make_wres_disappear
move *a13(ANIMODE),a1
andni MODE_STATUS,a1
move @close_the_door,a14
cmpi 3,a14
jrnz #not_time
PUSH a1,a13
move @dead_wrestler,a13,L
movi disappear_wrestler,a0
calla change_anim1a
PULL a1,a13
ori MODE_STATUS,a1
#not_time
move a1,*a13(ANIMODE)
rets
#*****************************************************************************
*
* Set the flag to tell that the guy is ready to be knocked into the coffin
*
SUBRP guy_is_up
movk 1,a14
move a14,@guy_up
rets
#*****************************************************************************
*
* Adjust facing checks the wrestlers facing direction.
*
SUBRP adjust_facing
move *a13(FACING_DIR),a14
ori (MOVE_LEFT|MOVE_DOWN),a14
andni (MOVE_RIGHT|MOVE_UP),a14
move a14,*a13(FACING_DIR)
move *a13(OBJ_CONTROL),a14
ori M_FLIPH,a14
move a14,*a13(OBJ_CONTROL)
rets
#*****************************************************************************
*
* Adjust taker facing checks takers facing direction.
*
SUBRP adjust_taker_facing
move *a13(FACING_DIR),a14
andni (MOVE_LEFT|MOVE_DOWN),a14
ori (MOVE_RIGHT|MOVE_UP),a14
move a14,*a13(FACING_DIR)
move *a13(OBJ_CONTROL),a14
andni M_FLIPH,a14
move a14,*a13(OBJ_CONTROL)
rets
#*****************************************************************************
*
* Check roll checks to see if the dead guy nees to be rolled down and does it
* if need be.
*
SUBRP check_roll
move *a13(ANIMODE),a0
andni MODE_STATUS,a0
move *a13(OBJ_ZPOSINT),a1
cmpi (RING_Z_CENTER+20),a1
jrgt #roll_done
move *a13(STICK_VAL_CUR),a1
ori MOVE_DOWN,a1
move a1,*a13(STICK_VAL_CUR)
PUSH a0
calla do_roll
PULL a0
ori MODE_STATUS,a0
#roll_done
move a0,*a13(ANIMODE)
rets
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP rzr_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
; Now Stand the bugger up
WL 3,R3GU2A+FR1
WL 3,R3GU2A+FR2
WL 3,R3GU4A+FR3
WL 3,R3GU4A+FR4
WL 3,R3GU4A+FR5
WL 3,R3GU4A+FR6
WL 3,R3GU4A+FR7
WL 3,R3GU4A+FR8
WL 3,R3GU4A+FR9
WL 3,R3GU4A+FR10
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP rzr_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 8,R4WP5C+FR1
WL 8,R4WP5C+FR2
WL 8,R4WP5C+FR3
WL 8,R4WP5C+FR4
WL 8,R4WP5C+FR5
WL 8,R4WP5C+FR6
WL 8,R4WP5C+FR7
WL 8,R4WP5C+FR8
WL 8,R4WP5C+FR7
WL 8,R4WP5C+FR6
WL 8,R4WP5C+FR5
WL 8,R4WP5C+FR4
WL 8,R4WP5C+FR3
WL 8,R4WP5C+FR2
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP hrt_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,H3GU4A+FR1
WL 7,H3GU4A+FR2
WL 7,H3GU4A+FR3
WL 7,H3GU4A+FR4
WL 7,H3GU4A+FR5
WL 7,H3GU4A+FR6
WL 7,H3GU4A+FR7
WL 7,H3GU4A+FR8
WL 7,H3GU4A+FR9
WL 7,H3GU4A+FR10
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP hrt_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 5,H4TI4B+FR1
WL 5,H4TI4B+FR2
WL 5,H4TI4B+FR3
WL 5,H4TI4B+FR4
WL 5,H4TI4B+FR5
WL 5,H4TI4B+FR6
WL 5,H4TI4B+FR7
WL 5,H4TI4B+FR8
WL 5,H4TI4B+FR7
WL 5,H4TI4B+FR6
WL 5,H4TI4B+FR5
WL 5,H4TI4B+FR4
WL 5,H4TI4B+FR3
WL 5,H4TI4B+FR2
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP und_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,U3SU4A+FR1
WL 7,U3SU4A+FR2
WL 7,U3SU4A+FR3
WL 7,U3SU4A+FR4
WL 7,U3SU4A+FR5
WL 7,U3SU4A+FR6
WL 7,U3SU4A+FR7
WL 7,U3SU4A+FR8
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP und_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 10,U4TI4C+FR1
WL 10,U4TI4C+FR3
WL 10,U4TI4C+FR5
WL 10,U4TI4C+FR7
WL 10,U4TI4C+FR5
WL 10,U4TI4C+FR3
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP yok_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,Y3GU2A+FR1
WL 7,Y3GU2A+FR2
WL 7,Y3GU2A+FR3
WL 7,Y3GU2A+FR4
WL 7,Y3GU2A+FR6
WL 7,Y3GU2A+FR7
WL 7,Y3GU2A+FR8
WL 7,Y3GU2A+FR10
WL 7,Y3GU2A+FR11
WL 7,Y3GU2A+FR12
WL 7,Y3GU4A+FR13
WL 7,Y3GU4A+FR14
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP yok_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 10,Y4TI4C+FR4
WL 10,Y4TI4C+FR5
WL 10,Y4TI4C+FR6
WL 10,Y4TI4C+FR7
WL 10,Y4TI4C+FR8
WL 10,Y4TI4C+FR7
WL 10,Y4TI4C+FR6
WL 10,Y4TI4C+FR5
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP shn_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,S3GU2A+FR1
WL 7,S3GU2A+FR2
WL 7,S3GU4A+FR3
WL 7,S3GU4A+FR4
WL 7,S3GU4A+FR5
WL 7,S3GU4A+FR6
WL 7,S3GU4A+FR7
WL 7,S3GU4A+FR8
WL 7,S3GU4A+FR9
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP shn_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 9,S4TI4B+FR1
WL 9,S4TI4B+FR2
WL 9,S4TI4B+FR3
WL 9,S4TI4B+FR4
WL 9,S4TI4B+FR3
WL 9,S4TI4B+FR2
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP bam_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,B3GU4A+FR1
WL 7,B3GU4A+FR2
WL 7,B3GU4A+FR3
WL 7,B3GU4A+FR4
WL 7,B3GU4A+FR5
WL 7,B3GU4A+FR6
WL 7,B3GU4A+FR7
WL 7,B3GU4A+FR8
WL 7,B3GU4A+FR9
WL 7,B3GU4A+FR10
WL 7,B3GU4A+FR11
WL 7,B3GU4A+FR12
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP bam_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 8,B4TI4A+FR1
WL 8,B4TI4A+FR2
WL 8,B4TI4A+FR3
WL 8,B4TI4A+FR4
WL 8,B4TI4A+FR5
WL 8,B4TI4A+FR6
WL 8,B4TI4A+FR7
WL 8,B4TI4A+FR6
WL 8,B4TI4A+FR5
WL 8,B4TI4A+FR4
WL 8,B4TI4A+FR3
WL 8,B4TI4A+FR2
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP dnk_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,D3GU4A+FR1
WL 7,D3GU4A+FR2
WL 7,D3GU4A+FR3
WL 7,D3GU4A+FR4
WL 7,D3GU4A+FR5
WL 7,D3GU4A+FR6
WL 7,D3GU4A+FR7
WL 7,D3GU4A+FR8
WL 7,D3GU4A+FR9
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP dnk_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 6,D4SW4C+FR1
WL 6,D4SW4C+FR2
WL 6,D4SW4C+FR3
WL 6,D4SW4C+FR4
WL 6,D4SW4C+FR5
WL 6,D4SW4C+FR6
WL 6,D4SW4C+FR5
WL 6,D4SW4C+FR4
WL 6,D4SW4C+FR3
WL 6,D4SW4C+FR2
WL ANI_GOTO,#loop
#*****************************************************************************
*
* Stand wrestler changes the dead wrestlers animation to a standing position
*
SUBRP lex_stand_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; First roll the guy down to the bottom of the ring if need be
#rl_loop
.word ANI_PAUSE,1
WL ANI_CODE,check_roll
WL ANI_IFSTATUS,#rl_loop
WL 7,L3GU4A+FR1
WL 7,L3GU4A+FR2
WL 7,L3GU4A+FR3
WL 7,L3GU4A+FR4
WL 7,L3GU4A+FR5
WL 7,L3GU4A+FR6
WL 7,L3GU4A+FR7
WL 7,L3GU4A+FR8
WL 7,L3GU4A+FR9
WL 7,L3GU4A+FR10
; Tell all he's up there
WL ANI_CODE,guy_is_up
; Face him the right direction
WL ANI_CODE,adjust_facing
; And finally make him dizzy
SUBRP lex_fdizzy_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
#loop
WL 8,L4TI4B+FR5
WL 8,L4TI4B+FR6
WL 8,L4TI4B+FR7
WL 8,L4TI4B+FR8
WL 8,L4TI4B+FR9
WL 8,L4TI4B+FR8
WL 8,L4TI4B+FR7
WL 8,L4TI4B+FR6
WL ANI_GOTO,#loop
SUBRP stand_table
.long hrt_stand_anim ;0 Bret Hart
.long rzr_stand_anim ;1 Razor Ramon
.long und_stand_anim ;2 Undertaker
.long yok_stand_anim ;3 Yokozuna
.long shn_stand_anim ;4 Shawn Michaels
.long bam_stand_anim ;5 Bam Bam
.long dnk_stand_anim ;6 Doink
.long 0 ;7 spare
.long lex_stand_anim ;8 Lex Luger
SUBRP stand_wrestler
FACETBL stand_table
calla change_anim1a
rets
SUBRP dizzy_table
.long hrt_fdizzy_anim ;0 Bret Hart
.long rzr_fdizzy_anim ;1 Razor Ramon
.long und_fdizzy_anim ;2 Undertaker
.long yok_fdizzy_anim ;3 Yokozuna
.long shn_fdizzy_anim ;4 Shawn Michaels
.long bam_fdizzy_anim ;5 Bam Bam
.long dnk_fdizzy_anim ;6 Doink
.long 0 ;7 spare
.long lex_fdizzy_anim ;8 Lex Luger
SUBRP dizzy_wrestler
FACETBL dizzy_table
calla change_anim1a
rets
#*****************************************************************************
*
* Raise dead anim
*
SUBRP raise_dead_anim
; Uninterruptable, no autoflip, no gravity
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
.word ANI_PAUSE,(TSEC/2)
; Now make him stand up
WL ANI_CODE,stand_wrestler
#*****************************************************************************
*
* Raises the dead guy off the floor and starts a standing dizzy animation
* for the dead guy.
*
SUBRP raise_dead
SLEEP TSEC/2 ; Give him a bit before standing up
PUSH a13
move @dead_wrestler,a13,L
movi raise_dead_anim,a0
calla change_anim1a
PULL a13
DIE
TIME_FOR_MOVE .equ 16
#*****************************************************************************
*
* This sets the guy is in the coffin flag
*
SUBRP guy_is_in
movk 1,a14
move a14,@guy_in
rets
#*****************************************************************************
*
* Sets the X, Y, and Z velocities of the dead wrestler being pushed into the
* coffin.
*
SUBRP set_speeds
move *a13(OBJ_XPOSINT),a2
movi HOLE_XPOS+7,a1
sub a2,a1
movi TIME_FOR_MOVE,a2
sll 16,a1
divs a2,a1
move a1,*a13(OBJ_XVEL),L
move *a13(OBJ_ZPOSINT),a2
cmpi WRES_Z,a2
jrge #is_in_front
movi WRES_Z,a2
move a2,*a13(OBJ_ZPOSINT)
#is_in_front
movi WRES_Z,a1
sub a2,a1
movi TIME_FOR_MOVE,a2
sll 16,a1
divs a2,a1
move a1,*a13(OBJ_ZVEL),L
rets
#*****************************************************************************
*
* Push in animation - pushes the dead wrestler into the coffin
*
SUBRP push_in_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP|MODE_NOGRAVITY|MODE_NOSHADOW
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
; Set the X,Y,and Z velocities
WL ANI_CODE,set_speeds
; Make a woosh sound while he's moving to coffin
.word ANI_SOUND,014h
; Wait for him to get there
.word ANI_PAUSE,TIME_FOR_MOVE
; Stop him from moving anymore
.word ANI_ZEROVELS
; Make a crash sound when he's in
.word ANI_SOUND,0bh
; Glitch him up 27 pixels
WL ANI_SET_YVEL,1b0000h
.word ANI_PAUSE,1
; Stop him from moving
.word ANI_ZEROVELS
; Tell everyone who is interested that he's made it
WL ANI_CODE,guy_is_in
; Make him be dizzy
WL ANI_CODE,dizzy_wrestler
#*****************************************************************************
*
* Pushes the dead guy into the coffin
*
SUBRP push_to_coffin
PUSH a13
move @dead_wrestler,a13,L
movi push_in_anim,a0
calla change_anim1a
PULL a13
rets
#*****************************************************************************
*
* #2 Undertaker raise the dead animation
*
SUBR und_2_raise_dead_anim
.word ANI_SETMODE,MODE_UNINT|MODE_NOAUTOFLIP ;uninterruptable
.word ANI_ZEROVELS
.word ANI_SETSPEED,100h
WL ANI_CODE,adjust_taker_facing
; This rises the dead guy up off of the floor to a standing dizzy
; position.
WLWWWW ANI_CREATEPROC,raise_dead,0,0,0,0
; Start the coffin rising up
WLWWWW ANI_CREATEPROC,und_coffin_up,0,0,0,0
WLWW ANI_SHADOWTRAIL,UNDNEG_P,5,15 ;pal,rate,lifespan
; This is what taker does to raise the dead guy
WL 4,U5RV5A+FR1
WL 4,U5RV5A+FR2
WL 4,U5RV5A+FR3
#loopa
WL 5,U5RV5A+FR4
WL 5,U5RV5A+FR5
WL 15,U5RV5A+FR6
WL 5,U5RV5A+FR5
WL ANI_CODE,DO_CROWD_CHEER
WL ANI_CODE,is_guy_up
WL ANI_IFNOTSTATUS,#loopa
; Let the dead guy stand there being dizzy fer a bit
#loop
WL 5,U5RV5A+FR4
WL 5,U5RV5A+FR5
WL 15,U5RV5A+FR6
WL 5,U5RV5A+FR5
WL ANI_CODE,DO_CROWD_CHEER
WL ANI_CODE,is_door_open
WL ANI_IFNOTSTATUS,#loop
WL 5,U5RV5A+FR4
WL 4,U5RV5A+FR3
WL 4,U5RV5A+FR2
WL 4,U5RV5A+FR1
; This is what taker does to push the guy into the coffin
WLWW ANI_SHADOWTRAIL,UNDNEG_P,2,8 ;pal,rate,lifespan
WL 7,U4PS3A+FR1
WL 7,U4PS3A+FR2
WL 7,U4PS3A+FR3
; This pushes the dead guy into the coffin and lets him stand in it
; being dizzy for a bit
; Make a grunt sound when push start
.word ANI_SOUND,02dh
WL ANI_CODE,push_to_coffin
.word ANI_SET_RPTCOUNT,(TSEC*3)/(7*6)
#loop1
WL 7,U4PS3A+FR5
WL 7,U4PS3A+FR6
WL 7,U4PS3A+FR7
WL 7,U4PS3A+FR8
WL 7,U4PS3A+FR7
WL 7,U4PS3A+FR6
WL ANI_CODE,DO_CROWD_CHEER
WL ANI_CODE,is_he_in
WL ANI_IFNOTSTATUS,#loop1
.word ANI_DEC_RPTCOUNT
WL ANI_IF_RPTCOUNT,#loop1
; Now close the door
.word ANI_SOUND,2dh ; Push door shut effort grunt
WL ANI_CODE,close_door
#d_loop
.word ANI_PAUSE,5
WL ANI_CODE,make_wres_disappear
WL ANI_IFNOTSTATUS,#d_loop
WL 7,U4PS3A+FR5
WL 7,U4PS3A+FR3
WL 7,U4PS3A+FR2
WL 7,U4PS3A+FR1
; And last but not least raise arm and leave crowd cheering
.word ANI_SHADOWTRAIL,0 ;off
WL 4,U5RV5A+FR1
WL 4,U5RV5A+FR2
WL 4,U5RV5A+FR3
WL 4,U5RV5A+FR4
WL 4,U5RV5A+FR5
#loop3
WL ANI_CODE,DO_CROWD_CHEER
WL 50,U5RV5A+FR6
WL ANI_GOTO,#loop3
.end