wwf-wrestlemania/BACKUP/SHAWN.ASM

2483 lines
49 KiB
NASM
Raw Permalink Normal View History

2021-04-06 15:21:54 -07:00
**************************************************************
*
* Software: Jamie Rivett
* Initiated: 5/18/94
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
**************************************************************
.file "shawn.asm"
.title "Shawn Michaels-specific game code"
.width 132
.option b,d,l,t
.mnolist
.include "macros.h"
.include "mproc.equ" ;Mproc equates
.include "display.equ" ;Display proc equates
.include "gsp.equ" ;Gsp asm equates
.include "sys.equ"
.include "game.equ"
.include "plyr.equ"
.include "anim.equ"
.include "audit.equ"
.include "sound.h"
.include "ring.equ"
.include "lifebar.h"
.include "jjxm.h"
******************************************************************************
* EXTERNAL REFERENCES
.ref change_anim1a,change_anim2a,do_taunt
.ref shn_2_hair_pickup_anim,bounce_off_ropes
;,break_lockup
.ref check_secret_moves,wres_get_but_val_cur
.ref master_keep_attached,lineup_grapple
.ref ck_ignore,climb_turnbuckle,execute_walk,get_opp_plyrmode
.ref get_punch_dtime,wres_get_stick_val_cur
.ref process_ptrs,form_button_value,keep_attached,change_anim1
.ref change_anim2,clear_damage_log,wres_get_stick_rel_cur
.ref wres_get_but_val_down,mode_inair2,wres_get_but_val_up
.ref wres_get_stick_rel_new,JUMP_ROPES
.REF DO_REVERSAL
.REF DO_REVERSAL_MESS
******************************************************************************
* ANIMATION SEQUENCES
.ref start_run_anim
;stands
.ref shn_stand2_anim,shn_stand8_anim
.ref shn_stand4_anim,shn_stand6_anim
.ref shn_torso2_anim,shn_torso8_anim
.ref shn_torso4_anim,shn_torso6_anim
.ref shn_3_head_held_stand_anim
;turns
.ref shn_2_to_4_turn_anim,shn_8_to_6_turn_anim ;stand
.ref shn_4_to_2_turn_anim,shn_6_to_8_turn_anim
.ref shn_4_to_6_turn_anim,shn_6_to_4_turn_anim
.ref shn_2_to_8_turn_anim,shn_8_to_2_turn_anim
.ref shn_4_to_8_turn_anim,shn_6_to_2_turn_anim
.ref shn_2_to_6_turn_anim,shn_8_to_4_turn_anim
.ref shn_2_to_4_turn2_anim,shn_8_to_6_turn2_anim ;torso
.ref shn_4_to_2_turn2_anim,shn_6_to_8_turn2_anim
.ref shn_4_to_6_turn2_anim,shn_6_to_4_turn2_anim
.ref shn_2_to_8_turn2_anim,shn_8_to_2_turn2_anim
.ref shn_4_to_8_turn2_anim,shn_6_to_2_turn2_anim
.ref shn_2_to_6_turn2_anim,shn_8_to_4_turn2_anim
;walks
.ref shn_walk1_f2_anim,shn_walk2_f2_anim,shn_walk4_f2_anim
.ref shn_walk5_f2_anim,shn_walk6_f2_anim,shn_walk8_f2_anim
.ref shn_walk1_f4_anim,shn_walk2_f4_anim,shn_walk4_f4_anim
.ref shn_walk5_f4_anim,shn_walk6_f4_anim,shn_walk8_f4_anim
.ref shn_run2_anim,shn_climb_down_anim,shn_climb_up_anim
;mundane attacks
.ref shn_2_punch_anim,shn_4_punch_anim
.ref shn_2_kick_anim,shn_4_kick_anim
.ref shn_2_push_anim,shn_4_push_anim
.ref shn_2_butt_anim,shn_4_butt_anim
.ref shn_2_knee_anim,shn_4_knee_anim
.ref shn_2_stomp_anim,shn_4_stomp_anim
.ref shn_2_falling_punch_anim,shn_4_falling_punch_anim
.ref shn_bstomp_anim,shn_belbow_anim
.ref shn_flipslam_anim
;special attacks
.ref shn_4_hair_pickup_anim
.ref shn_spinkick_anim,shn_flying_kick_anim
.ref shn_gsuplex_anim,shn_run_stomp_anim
.ref shn_super_speedkick_anim
.ref shn_fstein_anim,shn_backflip_kick_anim
.ref shn_2_pin_anim,shn_4_pin_anim
.ref shn_2_bslam_anim
.ref shn_4_bslam_anim
.ref shn_speed_spinkick_anim,shn_knee_fstein_anim
.ref shn_sliding_kicktoss_anim,shn_break_arm_anim
;reactions
.ref shn_dizzy_anim
.ref shn_2_grabfling_anim,shn_4_grabfling_anim
;blocks
.ref shn_2_block_anim,shn_4_block_anim
******************************************************************************
* SYMBOLS DEFINED IN THIS FILE
******************************************************************************
* EQUATES FOR THIS FILE
#*****************************************************************************
*
* special moves
*
* away-away-super kick - backflip kick
* toward-toward-super kick - frankensteiner
* toward-toward-super punch - german suplex
* charge away-super kick - super speedkick
* roll away-down-fwd super kick - sliding kicktoss
*
shn_secret_moves
.long #speed_kicks ;must have this one
.long #grab_fling
.long #grab_toss
.long #neck_grab
.long #frankensteiner
; .long #german_suplex
; .long #armbreaker
; .long #backflip_kick
; .long #sliding_kicktoss
.long 0
*****************************************************************************
*
* SPECIAL MOVE PROCESSES
*
SUBR shn_smove_table
.long sm_super_speedkick
.long sm_super_speedkick2
.long sm_sliding_kicktoss
.long sm_hdhold_suplex
.long sm_hdhold_frank
.long sm_super_suplex
.long sm_hdhold_kicktoss
.long sm_hdhold_flipslam
.long 0
*******************************************************************************
#grab_toss
.word B_PUNCH | J_AWAY, J_REAL_LR | J_UP | J_DOWN
.word 8000h | 10 ;max
.long scrt_hiptoss
scrt_hiptoss
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #out
;Don't do it when he is on ground
calla get_opp_plyrmode
cmpi MODE_ONGROUND,a0
jrz #out
cmpi MODE_DEAD,a0
jrz #out
move *a13(CLOSEST_DIST),a0
cmpi 70h,a0
jrgt #out
FACE24 shn,bslam_anim
calla change_anim1a
WRSND W_SHAWN,GRABFLING_T1,GRABFLING_T2
rets
*******************************************************************************
#grab_fling
.word B_SPUNCH | J_AWAY, J_REAL_LR | J_UP | J_DOWN
.word 8000h | 10 ;max
.long scrt_grabfling
scrt_grabfling
;Make this miss, rotate to missed opponent,
;and stay rotated to flung opponent, also make
;this work from both angles!
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #out
;If opponent is running, do a hip toss
calla get_opp_plyrmode
cmpi MODE_BOUNCING,a0
jrz #yes
cmpi MODE_RUNNING,a0
jrnz #nope
#yes
FACE24 shn,bslam_anim
calla change_anim1a
WRSND W_SHAWN,GRABFLING_T1,GRABFLING_T2
rets
#nope
;Don't fling when he is on ground
calla get_opp_plyrmode
cmpi MODE_HEADHELD,a0
jrz #out
cmpi MODE_ONGROUND,a0
jrz #out
cmpi MODE_DEAD,a0
jrz #out
FACE24 shn,grabfling_anim
calla change_anim1a
WRSND W_SHAWN,GRABFLING_T1,GRABFLING_T2
rets
*******************************************************************************
#neck_grab
.word B_SPUNCH, J_ALL
.word J_TOWARD, J_REAL_LR
.word J_TOWARD, J_REAL_LR
.word 8000h | 32 ;max
.long #scrt_neck
#scrt_neck
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #out
;Don't do it when he is on ground
calla get_opp_plyrmode
cmpi MODE_ONGROUND,a0
jrz #out
cmpi MODE_DEAD,a0
jrz #out
cmpi MODE_HEADHELD,a0
jrz #out
.ref shn_3_head_hold_anim
movi shn_3_head_hold_anim,a0
calla change_anim1a
#out rets
*******************************************************************************
#speed_kicks
move a13,a0
calla wres_get_but_val_up
btst PLAYER_SKICK_BIT,a0
jrz #no_kick
move *a13(PLYRNUM),a0
.ref get_powerk_dtime
calla get_powerk_dtime
cmpi 85,a0 ;> min?
jrlt #no_kick
; cmpi 100+60,a0 ;< max?
; jrgt #no_kick
callr scrt_kick
setc
rets
#no_kick
clrc
rets
scrt_kick
move *a13(PLYRMODE),a0
cmpi MODE_HEADHELD,a0
jrz #ok
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #out
;Don't do it when he is on ground
calla get_opp_plyrmode
cmpi MODE_ONGROUND,a0
jrz #out
cmpi MODE_DEAD,a0
jrz #out
#ok
SETMODE INAIR
movk 1,a0 ;Ensure leap at
move a0,*a13(OBJ_XVEL),L
movi shn_flying_kick_anim,a0
calla change_anim1a
WRSND W_SHAWN,FLYKICK_T1,FLYKICK_T2
rets
*******************************************************************************
; BITS MASK
;#backflip_kick
; .word B_SKICK, J_ALL
; .word J_AWAY, J_REAL_LR
; .word J_AWAY, J_REAL_LR
; .word 8000h | 50 ;max
; .long #scrt_backflip_kick
;
;#scrt_backflip_kick
; move *a13(ANIMODE),a0
; btst MODE_UNINT_BIT,a0
; jrnz #rets
; movi shn_backflip_kick_anim,a0
; calla change_anim1a
; WRSND W_SHAWN,KICK_T1,KICK_T2
; rets
*******************************************************************************
;#armbreaker
; .word B_PUNCH, J_ALL
; .word J_TOWARD, J_REAL_LR
; .word J_TOWARD, J_REAL_LR
; .word 8000h | 50 ;max
; .long #scrt_armbreaker
;
;#scrt_armbreaker
; move *a13(ANIMODE),a0
; btst MODE_UNINT_BIT,a0
; jrnz #rets
;
; ;only do this if target is blocking
; move *a13(CLOSEST_NUM),a14
; X32 a14
; addi process_ptrs,a14
; move *a14,a14,L
; move *a14(PLYRMODE),a14
; cmpi MODE_BLOCK,a14
; jrne #rets
;
; movi shn_break_arm_anim,a0
; calla change_anim1a
; WRSND W_SHAWN,PUNCH_T1,PUNCH_T2
; rets
*******************************************************************************
#frankensteiner
.word B_SKICK, J_ALL
.word J_TOWARD, J_REAL_LR
.word J_TOWARD, J_REAL_LR
.word 8000h | 32 ;max
.long #scrt_fstein
#scrt_fstein
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #rets
move *a13(PLYRMODE),a0
CMPI MODE_HEADHOLD,a0
jrz #rets
;no frankensteiner if opponent is on the ground
calla get_opp_plyrmode
cmpi MODE_ONGROUND,a0
jreq #rets
cmpi MODE_DEAD,a0
jreq #rets
;don't do it if opponent is behind you
calla ck_ignore
jrc #rets
movi shn_fstein_anim,a0
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
#rets rets
*******************************************************************************
.if 0
STRUCTPD
WORD #CHARGE_TIME ;UDW
WORD #TIMEOUT ;UDW
;in:
; a8 = wrestler process address
SUBRP sm_super_speedkick
#start_over
;charge on stick away
clr a14
move a14,*a13(#CHARGE_TIME),W
#loop1
SLEEPK 1
move *a13(#CHARGE_TIME),a14,W
inc a14
move a14,*a13(#CHARGE_TIME),W
move a8,a0
calla wres_get_stick_val_cur
;arbitrarily define TOWARD to be RIGHT. So if the opponent is to
; our left, flip the L|R direction bits...
;...however, if the stick isn't pointed left or right, don't do
;anything.
move a0,a14
andi MOVE_LEFT|MOVE_RIGHT,a14
jrz #no_flip
move *a8(NEW_FACING_DIR),a14
btst MOVE_LEFT_BIT,a14
jrz #no_flip
xori MOVE_LEFT|MOVE_RIGHT,a0
#no_flip
;if we're still holding away, jump back to #loop1
btst MOVE_LEFT_BIT,a0
jrnz #loop1
;no longer holding away...
move *a13(#CHARGE_TIME),a14
cmpi TSEC*2,a14
jrlt #start_over
;okay, they released after holding away for 2 seconds. Give them
; half a second to push forward + super_kick
movi TSEC/2,a14
move a14,*a13(#TIMEOUT)
#loop2
SLEEPK 1
move a8,a0
calla wres_get_but_val_down
move a0,a0
jrnz #press
move *a13(#TIMEOUT),a14
dec a14
jrz #start_over
move a14,*a13(#TIMEOUT)
jruc #loop2
#press
;we have a button press. Is is super kick?
btst PLAYER_SKICK_BIT,a0
jrz #start_over ;wrong button. No good.
;Check for a towards on the stick.
move a8,a0
calla wres_get_stick_val_cur
move a0,a0
jrz #start_over ;no stick at all. No good.
move *a8(NEW_FACING_DIR),a14
btst MOVE_LEFT_BIT,a14
jrz #no_flip2
xori MOVE_LEFT|MOVE_RIGHT,a0
#no_flip2
btst MOVE_RIGHT_BIT,a0
jrz #start_over ;pooched it
;success! Check for the UNINT bit, then queue it up.
move *a8(ANIMODE),a14
btst MODE_UNINT_BIT,a14
jrnz #start_over
movi shn_super_speedkick_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
jruc #start_over
.endif
#*******************************************************************************
sm_super_speedkick
#TIMEOUT .equ 60
#lp0
SLEEPK 1
#lp
move *a8(GETUP_TIME),a0
jrnz #lp0
clr a11
WAITSWITCH_DWN J_AWAY,0,#lp
movi #TIMEOUT,a11
WAITSWITCH_DWN J_UP_AWAY,0,#lp
WAITSWITCH_DWN J_UP,0,#lp
WAITSWITCH_DWN J_UP_TOWARD,0,#lp
WAITSWITCH_DWN J_TOWARD,0,#lp
WAITSWITCH_DWN B_KICK,J_DOWN_TOWARD,#lp
move *a8(PLYRMODE),a0
cmpi MODE_HEADHELD,a0
jrnz #slam
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
#slam
movi shn_super_speedkick_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
WRSND W_SHAWN,KICK_T1,KICK_T2
SLEEPK 1
jruc #lp
#*******************************************************************************
STRUCTPD
WORD #CHARGE_TIME ;UDW
sm_super_speedkick2
#start_over
clr a14
move a14,*a13(#CHARGE_TIME),W
#loop1
SLEEPK 1
move *a13(#CHARGE_TIME),a14,W
inc a14
move a14,*a13(#CHARGE_TIME),W
move a8,a0
calla wres_get_but_val_cur
btst PLAYER_KICK_BIT,a0
jrz #p1
jruc #loop1
#p1
;no longer holding button
move *a13(#CHARGE_TIME),a14
cmpi 90,a14
jrlt #start_over
;success! Check for the UNINT bit, then queue it up.
move *a8(PLYRMODE),a0
cmpi MODE_HEADHELD,a0
jrnz #slam
;Keep these commented out for now...
; move *a8(ANIMODE),a14
; btst MODE_UNINT_BIT,a14
; jrnz #start_over
; jruc #slam
;#rev
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
move *a8(OBJ_ZPOS),a0,L
addi [5,0],a0
move a0,*a8(OBJ_ZPOS),L
#slam
movi shn_super_speedkick_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
WRSND W_SHAWN,KICK_T1,KICK_T2
jruc #start_over
#*******************************************************************************
sm_hdhold_flipslam
#TIMEOUT .equ 60
#lp0
SLEEPK 1
#lp
move *a8(GETUP_TIME),a0
jrnz #lp0
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #cont
cmpi MODE_HEADHELD,a0
jrnz #lp0
#cont
clr a11
WAITSWITCH_DWN J_TOWARD,0,#lp
movi #TIMEOUT,a11
WAITSWITCH_DWN J_AWAY,0,#lp
WAITSWITCH_DWN B_SPUNCH,J_DOWN_AWAY|J_DOWN_TOWARD,#lp
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #slam
cmpi MODE_HEADHELD,a0
jrnz #lp0
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
#slam
movi shn_flipslam_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
WRSND W_SHAWN,KICK_T1,KICK_T2
SLEEP 60
jruc #lp
#*******************************************************************************
sm_hdhold_suplex
#TIMEOUT .equ 60
#lp0
SLEEPK 1
#lp
move *a8(GETUP_TIME),a0
jrnz #lp0
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #cont
cmpi MODE_HEADHELD,a0
jrnz #lp0
#cont
clr a11
WAITSWITCH_DWN J_AWAY,0,#lp
movi #TIMEOUT,a11
WAITSWITCH_DWN J_TOWARD,0,#lp
WAITSWITCH_DWN J_TOWARD,0,#lp
WAITSWITCH_DWN B_SPUNCH,0,#lp
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #slam
cmpi MODE_HEADHELD,a0
jrnz #lp0
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
move *a8(OBJ_ZPOS),a0,L
addi [5,0],a0
move a0,*a8(OBJ_ZPOS),L
#slam
movi shn_gsuplex_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
WRSND W_SHAWN,KICK_T1,KICK_T2
SLEEP 60
jruc #lp
#*******************************************************************************
sm_hdhold_kicktoss
#TIMEOUT .equ 60
#lp0
SLEEPK 1
#lp
move *a8(GETUP_TIME),a0
jrnz #lp0
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #cont
cmpi MODE_HEADHELD,a0
jrnz #lp0
#cont
clr a11
WAITSWITCH_DWN J_AWAY,0,#lp
movi #TIMEOUT,a11
WAITSWITCH_DWN J_TOWARD,0,#lp
WAITSWITCH_DWN J_TOWARD,0,#lp
WAITSWITCH_DWN B_KICK,J_UP_TOWARD|J_DOWN_TOWARD,#lp
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #slam
cmpi MODE_HEADHELD,a0
jrnz #lp0
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
move *a8(OBJ_ZPOS),a0,L
addi [5,0],a0
move a0,*a8(OBJ_ZPOS),L
#slam
WRSND W_SHAWN,KICK_T1,KICK_T2
movi shn_sliding_kicktoss_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
SLEEP 60
jruc #lp
#*******************************************************************************
sm_hdhold_frank
#TIMEOUT .equ 60
#lp0
SLEEPK 1
#lp
move *a8(GETUP_TIME),a0
jrnz #lp0
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #cont
cmpi MODE_HEADHELD,a0
jrnz #lp0
#cont
clr a11
WAITSWITCH_DWN J_UP,0,#lp
movi #TIMEOUT,a11
WAITSWITCH_DWN J_DOWN,0,#lp
WAITSWITCH_DWN J_DOWN,0,#lp
WAITSWITCH_DWN B_SKICK,J_DOWN_AWAY|J_DOWN_TOWARD,#lp
move *a8(PLYRMODE),a0
cmpi MODE_HEADHOLD,a0
jrz #slam
cmpi MODE_HEADHELD,a0
jrnz #lp0
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
#slam
movi shn_fstein_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
WRSND W_SHAWN,KICK_T1,KICK_T2
SLEEP 60
jruc #lp
#*******************************************************************************
STRUCTPD
WORD #CHARGE_TIME ;UDW
SUBRP sm_super_suplex
;Try to spin around and suplex
#start_over
clr a14
move a14,*a13(#CHARGE_TIME),W
#loop1
SLEEPK 1
move *a13(#CHARGE_TIME),a14,W
inc a14
move a14,*a13(#CHARGE_TIME),W
move a8,a0
calla wres_get_but_val_cur
btst PLAYER_PUNCH_BIT,a0
jrz #p1
jruc #loop1
#p1
;no longer holding button
move *a13(#CHARGE_TIME),a14
cmpi 100,a14
jrlt #start_over
;success! Check for the UNINT bit, then queue it up.
move *a8(PLYRMODE),a0
cmpi MODE_HEADHELD,a0
jrz #rev
move *a8(GETUP_TIME),a0
jrnz #start_over
move *a8(PLYRMODE),a0
cmpi MODE_ONGROUND,a0
jrz #start_over
cmpi MODE_DEAD,a0
jrz #start_over
;Keep these commented out for now...
; move *a8(ANIMODE),a14
; btst MODE_UNINT_BIT,a14
; jrnz #start_over
jruc #slam
#rev
CALLA DO_REVERSAL
CALLA DO_REVERSAL_MESS
;Make sure the reversal works!
movk 10,a0
move a0,*a8(SAFE_TIME)
move *a8(OBJ_ZPOS),a0,L
addi [5,0],a0
move a0,*a8(OBJ_ZPOS),L
#slam
movi shn_gsuplex_anim,a14
move *a8(PLYRMODE),a0
cmpi MODE_RUNNING,a0
jrnz #cont
.ref shn_gsuplex_run_anim
movi shn_gsuplex_run_anim,a14
#cont
move a14,*a8(SPECIAL_MOVE_ADDR),L
WRSND W_SHAWN,KICK_T1,KICK_T2
jruc #start_over
#*******************************************************************************
SUBRP sm_sliding_kicktoss
#TIMEOUT .equ 60
#lp0
SLEEPK 1
#lp
clr a11
; WAITSWITCH_DWN J_AWAY,0,#lp
WAITSWITCH_DWN J_TOWARD,0,#lp
movi #TIMEOUT,a11
WAITSWITCH_DWN J_TOWARD,0,#lp
WAITSWITCH_DWN B_KICK,0,#lp
move *a8(PLYRMODE),a0
cmpi MODE_HEADHELD,a0
jrz #lp0
cmpi MODE_ONGROUND,a0
jrz #lp0
cmpi MODE_DEAD,a0
jrz #lp0
move *a8(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #lp0
move *a8(GETUP_TIME),a0
jrnz #lp0
;Don't do it when he is on ground
PUSH a13
move a8,a13
calla get_opp_plyrmode
PULL a13
cmpi MODE_ONGROUND,a0
jrz #lp
cmpi MODE_DEAD,a0
jrz #lp
;Don't do it if opponent is behind you
calla ck_ignore
jrc #lp
WRSND W_SHAWN,KICK_T1,KICK_T2
movi shn_sliding_kicktoss_anim,a14
move a14,*a8(SPECIAL_MOVE_ADDR),L
SLEEP 60
jruc #lp
#*****************************************************************************
SUBR shawn_ani_init
move *a13(FACING_DIR),a0
btst PLAYER_RIGHT_BIT,a0
jrnz #p1
;Plyr 2
movi shn_stand4_anim,a0
calla change_anim1a
movi shn_torso4_anim,a0
calla change_anim2a
PUSH a10
move a13,a10
CREATE0 do_taunt
PULL a10
rets
#p1
movi shn_stand2_anim,a0
calla change_anim1a
movi shn_torso2_anim,a0
calla change_anim2a
rets
#*****************************************************************************
*
* SHAWNS CONTROL CODE
*
* a13 = * shawn process
SUBR move_shawn
movi shn_secret_moves,a11
calla check_secret_moves
move *a13(PLYRMODE),a0
sll 5,a0 ;x 32
addi #mode_table,a0
move *a0,a0,L
call a0
rets
#mode_table
.long mode_normal ;0
.long mode_running ;1
.long mode_inair ;2
.long mode_attached ;3
.long mode_onground ;4
.long mode_bouncing ;5
.long mode_onturnbkl ;6
.long mode_block ;7
.long mode_dizzy ;8
.long mode_dead ;9
.long mode_oppoverhead ;10
.long mode_climbturnbkl ;11
.long mode_waitanim ;12
.long mode_grapple ;13
.long mode_master ;14
.long mode_slave ;15
.long mode_headhold ;16
.long mode_normal ;17
.long mode_normal ;18
.long mode_headheld ;19
.long mode_puppet ;20
.long mode_inair2 ;21
.long mode_normal ;22
.long mode_normal ;23
.long mode_chokehold ;24
.ref mode_choking
.long mode_choking ;25
#*****************************************************************************
mode_normal
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #no_interrupt
;Perhaps we need to interrupt any sequence when a wrestler has won?
calla get_opp_plyrmode
cmpi MODE_DEAD,a0
jrne #opp_not_dead
;Any button causes a pin
move a13,a0
calla wres_get_but_val_cur
move a0,a0
jrz #opp_not_dead
;Make sure opponent is on the ground!
;First, see if opponent is on the ground.
move *a13(CLOSEST_DIST),a0
cmpi 70h,a0
jrgt #opp_not_dead
move *a13(CLOSEST_NUM),a0
X32 a0
addi process_ptrs,a0
move *a0,a1,L
move *a1(OBJ_YPOS),a0,L
move *a1(GROUND_Y),a14
sll 16,a14
cmp a14,a0
jrgt #opp_notgnd
;Opponent is on ground.
;Now check to see if I'm attached to him in puppet mode!
move *a13(ATTACH_PROC),a1,L
jrz #done
move *a1(ATTACH_PROC),a2,L
cmp a2,a13
;If I'm attached to him, let the move finish!
jrz #opp_not_dead
#done
FACE24 shn,pin_anim
calla change_anim1a
rets
#opp_notgnd
#opp_not_dead
move *a13(IMMOBILIZE_TIME),a0
jrnz #no_climb
move a13,a0
calla wres_get_but_val_cur
btst PLAYER_BLOCK_BIT,a0 ;maybe have to action tables?
jrz #nblk ;1 for down transitions
callr #block ;& 1 for current buttons
#nblk
move a13,a0
calla wres_get_but_val_down
andi 011111b,a0
X32 a0
addi #action_table,a0
move *a0,a0,L
call a0
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #no_interrupt
move a13,a0
calla wres_get_stick_val_cur
move a0,*a13(MOVE_DIR)
calla climb_turnbuckle
jrnc #no_climb
move *a13(WRESTLERNUM),A5
.ref CLIMB_ROPES,ADD_IF_SILENT
MOVI CLIMB_ROPES,A2
MOVI 1000,A0
CALLA ADD_IF_SILENT
rets
#no_climb
calla execute_walk
#no_interrupt
rets
#action_table
;This table accounts for 2 buttons being hit simultaneously.
.long #z ;0
.long #punch ;1
.long #block ;2
.long #z ;3
.long #super_punch ;4
.long #super_punch,#z,#z ;5-7
.long #kick ;8
.long #punchkick,#z,#z,#kick,#z,#z,#z ;9-15
.long #super_kick ;16
.long #z,#z,#z,#graboh,#z,#z,#z ;17-23
.long #kick,#z,#z,#z,#z,#z,#z,#z ;24-31
************
#graboh
rets
#z
rets
************
#punch ;1
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal < 62 95 headbutt
* normal > normal punch
*
* onground < 120 120 elbow drop
* onground > normal punch
*
* running |
* bouncing normal punch
*
* onturnbkl < 60 60 punch
* onturnbkl > normal punch
*
* puppet|inair normal punch
JJXM_INIT
JJXM NORMAL, 58, 45,#punch_hdbutt,#punch_punch
JJXM BLOCK, 75, 85,#punch_armbrk,#punch_punch
JJXM DIZZY, 52, 85,#punch_hdbutt,#punch_punch
JJXM ONGROUND, 120,120,#punch_lbdrop,#punch_punch
JJXM RUNNING, #punch_punch
JJXM BOUNCING, #punch_punch
JJXM ONTURNBKL, #punch_punch
JJXM CLIMBTURNBKL, #punch_punch
JJXM PUPPET, #punch_punch
JJXM INAIR, #punch_punch
JJXM ATTACHED, 58, 45,#punch_hdbutt,#punch_punch
JJXM DEAD, 58, 45,#punch_hdbutt,#punch_punch
JJXM OPPOVERHEAD, 58, 45,#punch_hdbutt,#punch_punch
JJXM WAITANIM, 58, 45,#punch_hdbutt,#punch_punch
JJXM GRAPPLE, 58, 45,#punch_hdbutt,#punch_punch
JJXM MASTER, 58, 45,#punch_hdbutt,#punch_punch
JJXM SLAVE, 58, 45,#punch_hdbutt,#punch_punch
JJXM HEADHOLD, 58, 45,#punch_hdbutt,#punch_punch
JJXM HEADHELD, 58, 45,#punch_hdbutt,#punch_punch
JJXM INAIR2, 58, 45,#punch_hdbutt,#punch_punch
JJXM_END
*****
#punch_armbrk
;If stick is toward opponent, then do quick punches
move a13,a0
calla wres_get_stick_val_cur
move *a13(NEW_FACING_DIR),a1
andi 0ch,a1
cmp a0,a1
jrnz #punch_hdbutt
movi shn_break_arm_anim,a0
calla change_anim1a
WRSND W_SHAWN,GRABHOLD_T1,GRABHOLD_T2
rets
*****
#punch_punch
std_punch
FACE24 shn,punch_anim
calla change_anim1a
WRSND W_SHAWN,PUNCH_T1,PUNCH_T2
rets
*****
#punch_hdbutt
FACE24 shn,butt_anim
calla change_anim1a
WRSND W_SHAWN,HDBUTT_T1,HDBUTT_T2
rets
*****
#punch_lbdrop
FACE24 shn,falling_punch_anim
calla change_anim1a
WRSND W_SHAWN,LBOWDROP_T1,LBOWDROP_T2
rets
************
#block ;2
; clr a0
; move a0,*a13(OBJ_XVEL),L
std_block
FACE24 shn,block_anim
calla change_anim1a
rets
************
#super_punch ;4
JJXM_INIT
JJXM NORMAL, 85, 45,#spunch_special,#spunch_slap ;0
JJXM RUNNING, 85, 45,#spunch_special,#spunch_slap ;1
JJXM INAIR, 85, 45,#spunch_special,#spunch_slap ;2
JJXM ATTACHED, 85, 45,#spunch_special,#spunch_slap ;3
JJXM ONGROUND, 120,120,#spunch_lbowdrop,std_punch ;4
JJXM BOUNCING, #spunch_rets ;5
JJXM ONTURNBKL, #spunch_slap ;6
JJXM BLOCK, 85, 45,#spunch_special,#spunch_slap ;7
JJXM DIZZY, 85, 45,#spunch_special,#spunch_slap ;8
JJXM DEAD, 96,112,#spunch_lbowdrop,std_punch ;9
JJXM OPPOVERHEAD, 85, 45,#spunch_special,#spunch_slap ;10
JJXM CLIMBTURNBKL, std_punch ;11
JJXM WAITANIM, 85, 45,#spunch_special,#spunch_slap ;12
JJXM GRAPPLE, 85, 45,#spunch_special,#spunch_slap ;13
JJXM MASTER, 85, 45,#spunch_special,#spunch_slap ;14
JJXM SLAVE, 85, 45,#spunch_special,#spunch_slap ;15
JJXM HEADHOLD, 85, 45,#spunch_special,#spunch_slap ;16
JJXM HEADHELD, 85, 45,#spunch_special,#spunch_slap ;17
JJXM PUPPET, 85, 45,#spunch_special,#spunch_slap ;20
JJXM INAIR2, 85, 45,#spunch_special,#spunch_slap ;21
JJXM_END
#spunch_rets
rets
*****
#spunch_slap
.ref shn_4_slap_anim
.ref shn_2_slap_anim
FACE24 shn,slap_anim
calla change_anim1a
WRSND W_SHAWN,SPUNCH_T1,SPUNCH_T2
rets
*****
#spunch_special
;If stick is toward opponent, then do quick punches
move a13,a0
calla wres_get_stick_val_cur
move *a13(NEW_FACING_DIR),a1
andi 0ch,a1
cmp a0,a1
jrz #cont
move *a13(CLOSEST_XDIST),a1
cmpi 50,a1
jrgt std_punch
jruc #hdbutt
#cont
.ref shn_3_head_hold2_anim
movi shn_3_head_hold2_anim,a0
calla change_anim1a
WRSND W_SHAWN,GRABHOLD_T1,GRABHOLD_T2
rets
#hdbutt
FACE24 shn,butt_anim
calla change_anim1
WRSND W_SHAWN,HDBUTT_T1,HDBUTT_T2
rets
*****
#spunch_lbowdrop
;If near opponents head, and facing down, do the hair grab!
;Allow hair grab from below!
move *a13(CLOSEST_NUM),a14
X32 a14
addi process_ptrs,a14
move *a14,a14,L
move *a13(OBJ_XPOS),a1,L
move *a14(OBJ_XPOS),a2,L
sub a2,a1
abs a1
srl 16,a1
cmpi 20h,a1 ;28
jrlt #no
;At head or feet!
move *a14(OBJ_CONTROL),a14
andi M_FLIPH,a14
move *a13(OBJ_CONTROL),a0
andi M_FLIPH,a0
cmp a0,a14
jrz #no
;At head! Do hair pickup.
FACE24 shn,hair_pickup_anim
calla change_anim1
WRSND W_SHAWN,LBOWDROP_T1,LBOWDROP_T2
rets
#no FACE24 shn,falling_punch_anim
calla change_anim1a
WRSND W_SHAWN,LBOWDROP_T1,LBOWDROP_T2
rets
;*****
;#spunch_slamfling
; move a13,a0
; calla wres_get_stick_rel_cur
; btst MOVE_AWAY_BIT,a0
; jrnz att_grabfling
; jruc att_bodyslam
;
;att_grabfling
; FACE24 shn,grabfling_anim
; calla change_anim1a
; WRSND W_SHAWN,GRABFLING_T1,GRABFLING_T2
; rets
;
;att_bodyslam
; calla get_opp_plyrmode
; move a0,a1
; movi shn_bslam_anim,a0
; cmpi MODE_RUNNING,a1
; jreq #runslam
; cmpi MODE_BOUNCING,a1
; jreq #runslam
; movi shn_standing_bslam_anim,a0
;#runslam
; calla change_anim1a
; WRSND W_SHAWN,SPUNCH_T1,SPUNCH_T2
; rets
************
#kick ;8
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal < 60 50 knee
* > normal kick
*
* onground < 120 120 stomp
* onground > normal kick
*
* running |
* bouncing big boot
*
* onturnbkl | normal kick
* climbturnbkl normal kick
*
* puppet|inair normal kick
*
JJXM_INIT
JJXM NORMAL, 60, 50,#kick_knee,#kick_kick
JJXM DIZZY, 60, 50,#kick_knee,#kick_kick
JJXM BLOCK, 60, 50,#kick_knee,#kick_kick
JJXM ONGROUND, 120,120,#kick_stomp,#kick_kick
JJXM RUNNING, 120,92,#kick_kick,#kick_flyingkick ;1
JJXM BOUNCING, 120,92,#kick_kick,#kick_flyingkick ;1
JJXM ONTURNBKL, #kick_kick
JJXM CLIMBTURNBKL, #kick_kick
JJXM PUPPET, #kick_kick
JJXM INAIR, #kick_kick
JJXM ATTACHED, 60, 50,#kick_knee,#kick_kick
JJXM DEAD, 120,120,#kick_stomp,#kick_kick
JJXM OPPOVERHEAD, 60, 50,#kick_knee,#kick_kick
JJXM WAITANIM, 60, 50,#kick_knee,#kick_kick
JJXM GRAPPLE, 60, 50,#kick_knee,#kick_kick
JJXM MASTER, 60, 50,#kick_knee,#kick_kick
JJXM SLAVE, 60, 50,#kick_knee,#kick_kick
JJXM HEADHOLD, 60, 50,#kick_knee,#kick_kick
JJXM HEADHELD, 60, 50,#kick_knee,#kick_kick
JJXM INAIR2, 60, 50,#kick_knee,#kick_kick
JJXM_END
*****
#kick_kick
attack_kick
FACE24 shn,kick_anim
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
rets
*****
#kick_knee
FACE24 shn,knee_anim
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
rets
*****
#kick_stomp
FACE24 shn,stomp_anim
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
rets
*****
#kick_flyingkick
movi shn_flying_kick_anim,a0
calla change_anim1a
SETMODE INAIR
WRSND W_SHAWN,FLYKICK_T1,FLYKICK_T2
rets
************
#punchkick ;9
movi start_run_anim,a0
calla change_anim1a
rets
************
#super_kick ;16
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal speed kick or spin kick (depends on stick)
*
* onground < 120 120 stomp
* onground > normal kick
*
* running |
* bouncing flying kick
*
* most others as MODE_NORMAL
*
JJXM_INIT
JJXM NORMAL, #skick_kick
JJXM DIZZY, #skick_kick
JJXM BLOCK, #skick_kick
JJXM ONGROUND, 120,120,#skick_stomp,attack_kick
JJXM RUNNING, #skick_frank
JJXM BOUNCING, #skick_frank
JJXM ONTURNBKL, #skick_kick
JJXM CLIMBTURNBKL, #skick_kick
JJXM PUPPET, #skick_kick
JJXM INAIR, #skick_kick
JJXM ATTACHED, #skick_kick
JJXM DEAD, 120,120,#skick_stomp,attack_kick
JJXM OPPOVERHEAD, #skick_kick
JJXM WAITANIM, #skick_kick
JJXM GRAPPLE, #skick_kick
JJXM MASTER, #skick_kick
JJXM SLAVE, #skick_kick
JJXM HEADHOLD, #skick_kick
JJXM HEADHELD, #skick_kick
JJXM INAIR2, #skick_kick
JJXM_END
*****
#skick_frank
movi shn_fstein_anim,a0
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
rets
*****
#skick_kick
movi shn_spinkick_anim,a0
calla change_anim1a
WRSND W_SHAWN,FLYKICK_T1,FLYKICK_T2
rets
*****
#skick_stomp
FACE24 shn,stomp_anim
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
rets
*****
#skick_flykick
attack_flykick
;don't do it if the bad guy is on the ground
calla get_opp_plyrmode
cmpi MODE_ONGROUND,a0
jreq #rets
cmpi MODE_DEAD,a0
jreq #rets
SETMODE INAIR
; clr a0
; move a0,*a13(RUN_TIME)
movi shn_flying_kick_anim,a0
calla change_anim1a
WRSND W_SHAWN,FLYKICK_T1,FLYKICK_T2
rets
*****
#skick_fstein
attack_fstein
;don't do it if opponent is behind you
calla ck_ignore
jrc #rets
movi shn_fstein_anim,a0
calla change_anim1a
SETMODE INAIR
WRSND W_SHAWN,GRABHOLD_T1,GRABHOLD_T2
#rets
rets
*****
#skick_super_speedkick
movi shn_super_speedkick_anim,a0
calla change_anim1a
WRSND W_SHAWN,KICK_T1,KICK_T2
rets
#*****************************************************************************
*
* RUNNING (if GETUP_TIME > 0 then player is out of control)
*
#XRUN_VAL equ 60000h ;50000h
#ZDRIFT_VAL equ 20000h ;18000h
mode_running
move *a13(RUN_TIME),a0 ;Used for flying kick
addk 1,a0
move a0,*a13(RUN_TIME)
move *a13(USR_VAR1),a0
jrnz #no_vel
calla bounce_off_ropes
movi #XRUN_VAL,a0
move *a13(MOVE_DIR),a14
btst PLAYER_RIGHT_BIT,a14
jrnz #pos
neg a0
#pos
move a0,*a13(OBJ_XVEL),L
#no_vel
move *a13(GETUP_TIME),a0 ;delay b4 gaining control
jrnz #out_of_control
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #no_interrupt
move a13,a0
calla wres_get_stick_val_cur
move *a13(MOVE_DIR),a1
or a0,a1
andi MOVE_LEFT|MOVE_RIGHT,a1
cmpi MOVE_LEFT|MOVE_RIGHT,a1
jrne #continue_run
;braking with stick. abort run.
SETMODE NORMAL
#continue_run
#no_interrupt
move a13,a0
calla wres_get_stick_val_cur
clr a1
movi -#ZDRIFT_VAL,a1
btst PLAYER_UP_BIT,a0
jrnz #setvel
movi #ZDRIFT_VAL,a1
btst PLAYER_DOWN_BIT,a0
jrnz #setvel
clr a1
#setvel
move a1,*a13(OBJ_ZVEL),L
;Delay reading buttons after just getting out of an out of control run
;so a mistaken move isn't fired off
move *a13(DELAY_BUTNS),a0
jrnz #out_of_control
move a13,a0
calla wres_get_but_val_down
andi 011111b,a0
X32 a0
addi #action_table,a0
move *a0,a0,L
call a0
#out_of_control
rets
#action_table
.long #z ;0
.long #punch ;1 (punch)
.long #block ;2 (block)
.long #z ;3
.long #super_punch ;4 (super punch)
.long #z,#z,#z ;5-7
.long #kick ;8 kick
.long #z,#z,#z,#z,#z,#z,#z ;9-15
.long #super_kick ;16 (super kick)
.long #z,#z,#z,#z,#z,#z,#z ;17-23
.long #z,#z,#z,#z,#z,#z,#z,#z ;24-31
************
#z ;0
rets
************
#punch ;1
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal|dizzy flying kick
*
* onground running stomp
*
* running |
* bouncing flying kick
*
* onturnbkl flying kick
*
* puppet|inair flying kick
*
JJXM_INIT
JJXM NORMAL, #punch_rets
JJXM DIZZY, #punch_rets
JJXM BLOCK, #punch_rets
JJXM ONGROUND, attack_runstomp
JJXM RUNNING, #punch_rets
JJXM BOUNCING, #punch_rets
JJXM ONTURNBKL, #punch_rets
JJXM CLIMBTURNBKL, #punch_rets
JJXM PUPPET, #punch_rets
JJXM INAIR, #punch_rets
JJXM ATTACHED, #punch_rets
JJXM DEAD, attack_runstomp
JJXM OPPOVERHEAD, #punch_rets
JJXM WAITANIM, #punch_rets
JJXM GRAPPLE, #punch_rets
JJXM MASTER, #punch_rets
JJXM SLAVE, #punch_rets
JJXM HEADHOLD, #punch_rets
JJXM HEADHELD, #punch_rets
JJXM INAIR2, #punch_rets
JJXM_END
#punch_rets
rets
************
#block ;2
move *a13(OBJ_XVEL),a0,L
sra 1,a0
move a0,*a13(OBJ_XVEL),L
SETMODE NORMAL
jruc std_block
************
#super_punch ;4
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal|dizzy flying kick
*
* onground running stomp
*
* running |
* bouncing flying kick
*
* onturnbkl flying kick
*
* puppet|inair flying kick
*
JJXM_INIT
JJXM NORMAL, #punch_flipslam
JJXM DIZZY, #punch_flipslam
JJXM BLOCK, #punch_flipslam
JJXM ONGROUND, 176,176,attack_runstomp,#spunch_rets
JJXM RUNNING, #punch_flipslam
JJXM BOUNCING, #punch_flipslam
JJXM ONTURNBKL, #spunch_rets
JJXM CLIMBTURNBKL, #spunch_rets
JJXM PUPPET, #spunch_rets
JJXM INAIR, #spunch_rets
JJXM ATTACHED, #spunch_rets
JJXM DEAD, 176,176,attack_runstomp,#spunch_rets
JJXM OPPOVERHEAD, #spunch_rets
JJXM WAITANIM, #spunch_rets
JJXM GRAPPLE, #spunch_rets
JJXM MASTER, #spunch_rets
JJXM SLAVE, #spunch_rets
JJXM HEADHOLD, #spunch_rets
JJXM HEADHELD, #spunch_rets
JJXM INAIR2, #spunch_rets
JJXM_END
#spunch_rets
rets
************
#punch_flipslam
movi shn_flipslam_anim,a0
calla change_anim1a
WRSND W_SHAWN,GRABFLING_T1,GRABFLING_T2
rets
************
#kick ;8
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal|dizzy flying kick
*
* onground running stomp
*
* running |
* bouncing flying kick
*
* onturnbkl flying kick
*
* puppet|inair flying kick
*
JJXM_INIT
JJXM NORMAL, attack_flykick
JJXM DIZZY, attack_flykick
JJXM BLOCK, attack_flykick
JJXM ONGROUND, #kick_runstomp
JJXM RUNNING, attack_flykick
JJXM BOUNCING, attack_flykick
JJXM ONTURNBKL, attack_flykick
JJXM CLIMBTURNBKL, attack_flykick
JJXM PUPPET, attack_flykick
JJXM INAIR, attack_flykick
JJXM ATTACHED, attack_flykick
JJXM DEAD, #kick_runstomp
JJXM OPPOVERHEAD, attack_flykick
JJXM WAITANIM, attack_flykick
JJXM GRAPPLE, attack_flykick
JJXM MASTER, attack_flykick
JJXM SLAVE, attack_flykick
JJXM HEADHOLD, attack_flykick
JJXM HEADHELD, attack_flykick
JJXM INAIR2, attack_flykick
JJXM_END
*****
#kick_runstomp
attack_runstomp
calla ck_ignore
jrc #kick_rets
movi shn_run_stomp_anim,a0
calla change_anim1a
#kick_rets
rets
************
#super_kick ;16
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* normal|dizzy frankensteiner
*
* onground flying kick
*
* running frankensteiner
*
* bouncing flying kick
*
* onturnbkl flying kick
*
* inair|puppet flying kick
*
JJXM_INIT
JJXM NORMAL, attack_fstein
JJXM DIZZY, attack_fstein
JJXM BLOCK, attack_fstein
JJXM ONGROUND, attack_runstomp
JJXM RUNNING, attack_fstein
JJXM BOUNCING, attack_fstein
JJXM ONTURNBKL, attack_flykick
JJXM CLIMBTURNBKL, attack_flykick
JJXM INAIR, attack_flykick
JJXM PUPPET, attack_flykick
JJXM ATTACHED, attack_fstein
JJXM DEAD, attack_runstomp
JJXM OPPOVERHEAD, attack_fstein
JJXM WAITANIM, attack_fstein
JJXM GRAPPLE, attack_fstein
JJXM MASTER, attack_fstein
JJXM SLAVE, attack_fstein
JJXM HEADHOLD, attack_fstein
JJXM HEADHELD, attack_fstein
JJXM INAIR2, attack_fstein
JJXM_END
#*****************************************************************************
*
mode_inair ;2
rets
#*****************************************************************************
*
mode_attached ;3
calla keep_attached
jrnz #still_attached
clr a0
move a0,*a13(ATTACH_PROC),L
SETMODE NORMAL
movi MODE_NORMAL,a0
move a0,*a13(ANIMODE)
#still_attached
rets
#*****************************************************************************
mode_onground ;4
rets
#*****************************************************************************
*
* bouncing off ropes while running
mode_bouncing ;5
clr a0
move a0,*a13(OBJ_XVEL),L
move a0,*a13(OBJ_ZVEL),L
move *a13(ANIMODE),a0
btst MODE_END_BIT,a0
jrz #not_ended
move *a13(MOVE_DIR),a0
xori MOVE_LEFT+MOVE_RIGHT,a0 ;flip LEFT/RIGHT
move a0,*a13(MOVE_DIR)
move *a13(NEW_FACING_DIR),a1
andi MOVE_UP+MOVE_DOWN,a1
or a0,a1 ;LEFT or RIGHT
move a1,*a13(FACING_DIR) ;face same dir as run
movi shn_run2_anim,a0
calla change_anim1a
SETMODE RUNNING
; clr a0
; move a0,*a13(GETUP_TIME) ;in control
#not_ended
rets
#*****************************************************************************
*
* STANDING ON TOP OF TURNBUCKLE
mode_onturnbkl ;6
move a13,a0
calla wres_get_stick_val_cur
btst PLAYER_DOWN_BIT,a0
jrz #no_climbdown
;this is so an attack isn't turned into a climbdown
; in those 5-10 ticks before MODE_INAIR2 is set...
move *a13(ANIBASE),a14,L
cmpi shn_climb_up_anim,a14
jrne #no_climbdown
movi shn_climb_down_anim,a0
calla change_anim1a
SETMODE CLIMBTURNBKL
rets
#no_climbdown
move a13,a0
calla wres_get_but_val_down
andi 011111b,a0
jrz #z
X32 a0
addi #action_table,a0
move *a0,a0,L
call a0
move *a13(PLYRNUM),a5
movi JUMP_ROPES,a2
movi 1000,a0
calla ADD_IF_SILENT
rets
;For standing on top of turnbuckles
#action_table
.long #z ;0
.long #punch ;1
.long #block ;2
.long #z ;3
.long #super_punch ;4
.long #z,#z,#z ;5-7
.long #kick ;8
.long #z,#z,#z,#z,#z,#z,#z ;9-15
.long #super_kick ;16
.long #z,#z,#z,#z,#z,#z,#z ;17-23
.long #z,#z,#z,#z,#z,#z,#z,#z ;24-31
************
#z
rets
************
#punch ;1
#block ;2
#super_punch ;4
movi shn_belbow_anim,a0
calla change_anim1a
rets
************
#kick ;8
#super_kick ;16
movi shn_bstomp_anim,a0
calla change_anim1a
rets
#*****************************************************************************
* blocking
mode_block ;7
;check unint
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #no_interrupt
calla form_button_value
X32 a0
addi #action_table,a0
move *a0,a0,L
call a0
#no_interrupt
rets
#action_table
.long #z,#z,#z ;0-2
.long #punchblock ;3
.long #z,#z,#z,#z,#z,#z,#z ;4-10
.long #z,#z,#z,#z,#z,#z,#z ;11-17
.long #z,#z,#z,#z,#z,#z,#z ;18-24
.long #z,#z,#z,#z,#z,#z,#z ;25-31
************
#z
rets
************
#punchblock ;3
*
* MODE DX DZ ACTION
* ----------------------------------------------------
* all push
*
SETMODE NORMAL
FACE24 shn,push_anim
calla change_anim1a
WRSND W_SHAWN,PUSH_T1,PUSH_T2
rets
#*****************************************************************************
* shawn with zero health
mode_dizzy ;8
move *a13(GETUP_TIME),a0
jrnz #still_going
calla clear_damage_log
clr a0
move a0,*a13(STARS_FLAG)
SETMODE NORMAL
#still_going
rets
#*****************************************************************************
mode_dead ;9
rets
#*****************************************************************************
* opponent held overhead
mode_oppoverhead ;10
rets
#*****************************************************************************
*
* CLIMBING UP OR DOWN THE TURNBUCKLE
mode_climbturnbkl ;11
rets
#*****************************************************************************
mode_waitanim ;12
move *a13(ANIMODE),a0
btst MODE_END_BIT,a0
jrz #not_ended
move *a13(CODE_ADDR),a0,L
call a0
#not_ended
rets
#*****************************************************************************
mode_grapple ;13
rets
#*****************************************************************************
mode_master ;14
calla master_keep_attached ;keep slave attached to me
rets
#*****************************************************************************
mode_slave ;15
rets
#*****************************************************************************
mode_headhold ;16
move *a13(ATTACH_PROC),a10,L
jrz #exit
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #no_interrupt
move a13,a0
calla wres_get_but_val_down
andi 011111b,a0
X32 a0
addi #action_table,a0
move *a0,a0,L
call a0
#no_interrupt
rets
#exit
movk MOVE_DOWN_RIGHT,a1
move *a13(OBJ_CONTROL),a0
btst B_FLIPH,a0
jrz #right
movk MOVE_DOWN_LEFT,a1
#right move a1,*a13(FACING_DIR)
move a1,*a13(NEW_FACING_DIR)
SETMODE NORMAL
rets
#action_table
.long #z ;0
.long #punch ;1
.long #block ;2
.long #z ;3
.long #super_punch ;4
.long #super_punch,#z,#z ;5-7
.long #kick ;8
.long #punchkick,#z,#z,#kick,#z,#z,#z ;9-15
.long #super_kick ;16
.long #z,#z,#z,#graboh,#z,#z,#z ;17-23
.long #kick,#z,#z,#z,#z,#z,#z,#z ;24-31
************
#block
#z ;0
rets
************
#punch ;1
;If stick is toward opponent, then do quick punches
move a13,a0
calla wres_get_stick_val_cur
move *a13(NEW_FACING_DIR),a1
andi 0ch,a1
cmp a0,a1
jrnz #tag
movi shn_4_knee_anim,a0
calla change_anim1a
rets
#tag
movi shn_4_knee_anim,a0
calla change_anim1a
rets
************
#super_punch ;4
rets
************
#punchkick
#graboh
#kick
move a13,a0
calla wres_get_stick_rel_cur
btst MOVE_TOWARD_BIT,a0
jrz #knee
;speed kick - speed kick - speed kick - spin kick
movi shn_speed_spinkick_anim,a0
calla change_anim1a
rets
#knee
movi shn_4_knee_anim,a0
calla change_anim1a
rets
************
#super_kick ;16
;If stick is toward opponent, then do quick knees
move a13,a0
calla wres_get_stick_val_cur
move *a13(NEW_FACING_DIR),a1
andi 0ch,a1
cmp a0,a1
jrnz #z
;knee - knee - knee - frankensteiner
movi shn_knee_fstein_anim,a0
calla change_anim1a
rets
#*****************************************************************************
mode_headheld ;19
;He may have let me go by hitting his block butn!
move *a13(ATTACH_PROC),a0,L
jrnz #no_luck
;Make sure this guy is on ground
move *a13(OBJ_YPOSINT),a0
move *a13(GROUND_Y),a1
cmp a1,a0 ;a0-a1
jrgt #no_luck
;hit_gnd
movi shn_3_head_held_stand_anim,a0
calla change_anim1a
#no_luck
rets
#*****************************************************************************
mode_puppet ;20
rets
#*****************************************************************************
mode_chokehold ;24
rets
#*****************************************************************************
#VEL equ 30000h
#DVEL equ 21f0eh
SUBR shn_velocity_table
; X, Z
.long 0, -#VEL ;0 UP
.long #DVEL, -#DVEL ;1 UP-RIGHT
.long #VEL, 0 ;2 RIGHT
.long #DVEL, #DVEL ;3 DOWN-RIGHT
.long 0, #VEL ;4 DOWN
.long -#DVEL, #DVEL ;5 DOWN-LEFT
.long -#VEL, 0 ;6 LEFT
.long -#DVEL, -#DVEL ;7 UP-LEFT
#*****************************************************************************
SUBR shn_rotate_anims_table
; old = up right
.long shn_stand2_anim ;new = up right
.long shn_2_to_4_turn_anim ; = down right
.long shn_2_to_6_turn_anim ; = down left
.long shn_2_to_8_turn_anim ; = up left
; old = down right
.long shn_4_to_2_turn_anim ;new = up right
.long shn_stand4_anim ; = down right
.long shn_4_to_6_turn_anim ; = down left
.long shn_4_to_8_turn_anim ; = up left
; old = down left
.long shn_6_to_2_turn_anim ;new = up right
.long shn_6_to_4_turn_anim ; = down right
.long shn_stand6_anim ; = down left
.long shn_6_to_8_turn_anim ; = up left
; old = up left
.long shn_8_to_2_turn_anim ;new = up right
.long shn_8_to_4_turn_anim ; = down right
.long shn_8_to_6_turn_anim ; = down left
.long shn_stand8_anim ; = up left
SUBR shn_leg_anims_table
; MOVE
;(#1 - UP) FACING
.long shn_walk1_f2_anim ;1 (UP)
.long shn_walk1_f2_anim ;2 (UP_RIGHT)
.long shn_walk1_f4_anim ;3 (RIGHT)
.long shn_walk1_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk1_f4_anim ;5 (DOWN)
.long shn_walk1_f4_anim ;6 (DOWN_LEFT)
.long shn_walk1_f2_anim ;7 (LEFT)
.long shn_walk1_f2_anim ;8 (UP-LEFT)
;(#2 - UP-RIGHT)
.long shn_walk2_f2_anim ;1 (UP)
.long shn_walk2_f2_anim ;2 (UP_RIGHT)
.long shn_walk2_f2_anim ;3 (RIGHT)
.long shn_walk2_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk8_f4_anim ;5 (DOWN)
.long shn_walk8_f4_anim ;6 (DOWN_LEFT)
.long shn_walk4_f2_anim ;7 (LEFT)
.long shn_walk4_f2_anim ;8 (UP-LEFT)
;(#3 - RIGHT)
.long shn_walk2_f2_anim ;1 (UP)
.long shn_walk2_f2_anim ;2 (UP_RIGHT)
.long shn_walk2_f2_anim ;3 (RIGHT)
.long shn_walk4_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk4_f4_anim ;5 (DOWN)
.long shn_walk8_f4_anim ;6 (DOWN_LEFT)
.long shn_walk6_f2_anim ;7 (LEFT)
.long shn_walk6_f2_anim ;8 (UP-LEFT)
;(#4 - DOWN-RIGHT)
.long shn_walk2_f2_anim ;1 (UP)
.long shn_walk8_f2_anim ;2 (UP_RIGHT)
.long shn_walk4_f4_anim ;3 (RIGHT)
.long shn_walk4_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk2_f4_anim ;5 (DOWN)
.long shn_walk6_f4_anim ;6 (DOWN_LEFT)
.long shn_walk2_f2_anim ;7 (LEFT)
.long shn_walk6_f2_anim ;8 (UP-LEFT)
;(#5 - DOWN)
.long shn_walk5_f2_anim ;1 (UP)
.long shn_walk5_f2_anim ;2 (UP_RIGHT)
.long shn_walk5_f4_anim ;3 (RIGHT)
.long shn_walk5_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk5_f4_anim ;5 (DOWN)
.long shn_walk5_f4_anim ;6 (DOWN_LEFT)
.long shn_walk5_f2_anim ;7 (LEFT)
.long shn_walk5_f2_anim ;8 (UP-LEFT)
;(#6 - DOWN-LEFT)
.long shn_walk2_f2_anim ;1 (UP)
.long shn_walk6_f2_anim ;2 (UP_RIGHT)
.long shn_walk2_f2_anim ;3 (RIGHT)
.long shn_walk6_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk2_f4_anim ;5 (DOWN)
.long shn_walk4_f4_anim ;6 (DOWN_LEFT)
.long shn_walk2_f2_anim ;7 (LEFT)
.long shn_walk8_f2_anim ;8 (UP-LEFT)
;(#7 - LEFT)
.long shn_walk2_f2_anim ;1 (UP)
.long shn_walk6_f2_anim ;2 (UP_RIGHT)
.long shn_walk6_f2_anim ;3 (RIGHT)
.long shn_walk8_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk4_f4_anim ;5 (DOWN)
.long shn_walk4_f4_anim ;6 (DOWN_LEFT)
.long shn_walk2_f2_anim ;7 (LEFT)
.long shn_walk2_f2_anim ;8 (UP-LEFT)
;(#8 - UP-LEFT)
.long shn_walk2_f2_anim ;1 (UP)
.long shn_walk4_f2_anim ;2 (UP_RIGHT)
.long shn_walk6_f2_anim ;3 (RIGHT)
.long shn_walk8_f4_anim ;4 (DOWN_RIGHT)
.long shn_walk6_f4_anim ;5 (DOWN)
.long shn_walk2_f4_anim ;6 (DOWN_LEFT)
.long shn_walk2_f2_anim ;7 (LEFT)
.long shn_walk2_f2_anim ;8 (UP-LEFT)
SUBR shn_torso_anims_table
; old = up right
.long shn_torso2_anim ;new = up right
.long shn_2_to_4_turn2_anim ; = down right
.long shn_2_to_6_turn2_anim ; = down left
.long shn_2_to_8_turn2_anim ; = up left
; old = down right
.long shn_4_to_2_turn2_anim ;new = up right
.long shn_torso4_anim ; = down right
.long shn_4_to_6_turn2_anim ; = down left
.long shn_4_to_8_turn2_anim ; = up left
; old = down left
.long shn_6_to_2_turn2_anim ;new = up right
.long shn_6_to_4_turn2_anim ; = down right
.long shn_torso6_anim ; = down left
.long shn_6_to_8_turn2_anim ; = up left
; old = up left
.long shn_8_to_2_turn2_anim ;new = up right
.long shn_8_to_4_turn2_anim ; = down right
.long shn_8_to_6_turn2_anim ; = down left
.long shn_torso8_anim ; = up left
******************************************************************************
.end