5326 lines
97 KiB
NASM
Executable File
5326 lines
97 KiB
NASM
Executable File
**************************************************************
|
||
*
|
||
* Software: Jason Skiles
|
||
* Initiated: 29 Oct 93
|
||
*
|
||
* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 5/5/95 14:54
|
||
**************************************************************
|
||
|
||
.file "lifebar.asm"
|
||
.title "meters, names, messages, and scores"
|
||
.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 "game.equ"
|
||
.include "plyr.equ"
|
||
.include "sys.equ"
|
||
.include "link.equ"
|
||
.include "sound.h"
|
||
.include "ring.equ"
|
||
|
||
.include "miscimg.glo"
|
||
.include "fontsimg.glo"
|
||
.include "sound.equ"
|
||
.include "imgtbl.glo"
|
||
.include "jjxm.h"
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
.include "tmpdebug.h"
|
||
.endif
|
||
|
||
#*****************************************************************************
|
||
|
||
.ref reset_for_round,init_scroller,BGND_UD1
|
||
.ref reset_for_round2,no_debris,flash_red
|
||
.ref calc_match_time_2,ck_any_teammates
|
||
|
||
.ref change_anim1a,triple_sound,HALT,CLOSE_VERT_SCREEN_LINE
|
||
.ref civanic,CR_STRTP,get_process_ptr,wres_collis_off
|
||
.ref GET_ADJ,p2winstreak,ANIM_CROWD,update_timer,GAMSTATE
|
||
.ref fight_debug,RNDRNG0,pal_getf,ring_bell,BEGINOBJ_TBL
|
||
.ref PSTATUS,match_over,p1rounds,is_8_on_1
|
||
.ref OPEN_VERT_SCREEN_LINE,process_ptrs,SET_LOWER_VOL
|
||
.ref GET_CREDITS,BINBCD,get_all_buttons_cur2,LINES_VERT
|
||
.ref current_round,p1winstreak,CLEAR_SPEECH_REPEAT,p2rounds
|
||
.ref VINCE_START_ROUND2_3,WHICH_SCREEN,do_game_over
|
||
.ref CALL_MATCH_OVER,AUD1,setup_back_anim,DUMRETS
|
||
.ref calc_match_time_1,match_time
|
||
.ref ROLLING_COUNT,match_winner,PCNT,NUM_OPPS,is_final_match
|
||
.ref ADD_VOICE,KILL_ALL_CHANNELS,END_MATCH_SPEECH
|
||
.ref accumulate_awards,annc_rnd_winner_done
|
||
.ref round_award,royal_rumble,buddy_mode_on
|
||
.ref match_award,reduce_bog,get_live_bits
|
||
.ref create_end_rnd_awards
|
||
.ref award_ok_to_die
|
||
.ref is_it_a_really_quick_win,increment_wincount
|
||
.ref give_award_if_opponent_is_human
|
||
.ref arm_comeback_award
|
||
.ref check_for_award_for_big_comeback
|
||
.ref check_for_award_for_winstreak
|
||
.ref show_dufus_messages
|
||
.ref CHANGE_SKIRTS2,INIT_SKIRTS
|
||
.ref pal_clean,round_start_time,round_end_time
|
||
.ref dboxes_on,do_fireworks
|
||
.ref instant_combos_on,p1powerup_request
|
||
.ref show_mk3_tip,MAYBE_HIGH_RISK
|
||
.ref match_cnt,WGFS_W_P
|
||
.ref temp_music
|
||
.ref finish_completed
|
||
|
||
#*****************************************************************************
|
||
|
||
;player life/turbo data struct
|
||
PLT_LIFE equ 0 ;UHW life pixels (164 max)
|
||
PLT_CLIFE equ PLT_LIFE+10h ;UHW displayed life (164 max)
|
||
PLT_TURBO equ PLT_CLIFE+10h ;UHW turbo val (5400h max)
|
||
PLT_COMBO_SIZE equ PLT_TURBO+10h ;UHW combo bar size
|
||
PLT_SIZE equ PLT_COMBO_SIZE+010h
|
||
|
||
;NOTE that PLT_SIZE is 40h, so anytime we might otherwise use a multiply,
|
||
; we do a X64 instead. DO NOT change the size of this struct unless
|
||
; you're prepared to do some cleanup.
|
||
|
||
;meter data struct
|
||
MD_LINK equ 0 ;UHW PLYRNUM for this meter
|
||
MD_LIFE equ MD_LINK+10h ;UHL life bar *obj
|
||
MD_LBAK equ MD_LIFE+20h ;UHL turbo bar *obj
|
||
MD_NAME equ MD_LBAK+20h ;UHL name *obj
|
||
MD_COMBO equ MD_NAME+20h ;UHL combo bar *obj
|
||
MD_SIZE equ MD_COMBO+20H
|
||
|
||
|
||
.bss life_data, NUM_WRES*PLT_SIZE
|
||
.bss meter_data, 2*MD_SIZE
|
||
.bss damage_imgs, 4*32
|
||
.bss ram_lst, 32*40 ;For announce_match
|
||
BSSX DAM_MULT,16
|
||
.BSS LAST_FLIP,16
|
||
BSSX combo_audit_done,16
|
||
BSSX message_flag,32*2 ;Message already displayed bit
|
||
BSSX ZFLIP_POS_VAR,32
|
||
BSSX MUSIC_HAP,16
|
||
BSSX PERFECT_WINS,16
|
||
BSSX WINS_OBJ,32*3
|
||
|
||
BSSX fence1,4*32
|
||
|
||
BSSX MESSAGE_FLAGS,32
|
||
|
||
BSSX fence2,4*32
|
||
|
||
BSSX COMBO_FLASH_FLAG,32
|
||
BSSX in_finish_move,16
|
||
BSSX speed_adjustment,32 ;game speed damage adjustment
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
BSSX event_data,EVENTSIZ*NUM_EVENTS
|
||
BSSX event_ptr,32
|
||
.endif
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Life/Turbo meter sizes and positions.
|
||
*
|
||
|
||
LIFE_MAX .equ 163 ;green pixels in life bar
|
||
TURBO_MAX .equ 84<<8 ;max turbo value
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Called at the beginning of the first round of a match.
|
||
*
|
||
|
||
SUBR init_life_data
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
movi event_data,a14
|
||
move a14,@event_ptr,L
|
||
|
||
clr a14
|
||
movi event_data,a0
|
||
movi EVENTSIZ*NUM_EVENTS/16,a1
|
||
#clp move a14,*a0+,W
|
||
dsj a1,#clp
|
||
|
||
.endif
|
||
|
||
;initialize speed_adjustment
|
||
movk ADJSPEED,a0 ;game timer speed (1-5)
|
||
calla GET_ADJ
|
||
BADCHK a0,1,5,3 ;reg,lo,hi,val
|
||
X32 a0 ;x 16 bits
|
||
addi #timer_table-20h,a0
|
||
move *a0,a1,L
|
||
move a1,@speed_adjustment,L
|
||
|
||
;initialize life data
|
||
movi NUM_WRES,a0
|
||
movi life_data,a1
|
||
movi LIFE_MAX,a2
|
||
movi TURBO_MAX,a3
|
||
clr a4
|
||
#init_loop
|
||
move a2,*a1(PLT_LIFE)
|
||
move a3,*a1(PLT_TURBO)
|
||
move a4,*a1(PLT_CLIFE)
|
||
move a4,*a1(PLT_COMBO_SIZE)
|
||
addi PLT_SIZE,a1
|
||
dsj a0,#init_loop
|
||
|
||
rets
|
||
|
||
#timer_table
|
||
.long 10000h*4/5 ;80% damage (slowest)
|
||
.long 10000h*9/10 ;90%
|
||
.long 10000h*1 ;normal damage (default)
|
||
.long 10000h*11/10 ;110%
|
||
.long 10000h*6/5 ;120% damage (fastest)
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Resets life/turbo/combo data for wrestler in a13. Used by change_wrestler.
|
||
* Updates name display too, if either display is aimed at our guy.
|
||
*
|
||
* Since this only happens for dead guys, we don't check to see if it's a
|
||
* player, and we don't check special royal rumble mode cases.
|
||
*
|
||
|
||
SUBR init_wres_life_data
|
||
|
||
;initialize life data
|
||
move *a13(PLYRNUM),a1
|
||
X64 a1 ;mult by PLT_SIZE
|
||
addi life_data,a1
|
||
|
||
movi LIFE_MAX,a2
|
||
movi TURBO_MAX,a3
|
||
clr a4
|
||
move a2,*a1(PLT_LIFE)
|
||
move a3,*a1(PLT_TURBO)
|
||
move a2,*a1(PLT_CLIFE)
|
||
move a4,*a1(PLT_COMBO_SIZE)
|
||
|
||
;check names
|
||
move *a13(PLYRNUM),a1
|
||
movi meter_data,a5
|
||
move *a5(MD_LINK),a14
|
||
cmp a1,a14
|
||
jreq #chgnm
|
||
addi MD_SIZE,a5
|
||
move *a5(MD_LINK),a14
|
||
cmp a1,a14
|
||
jrne #done
|
||
|
||
#chgnm X32 a1
|
||
addi name_tbl,a1
|
||
move *a1,a0,L
|
||
move *a5(MD_NAME),a8,L
|
||
calla civanic
|
||
|
||
#done rets
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Called at the start of the second and later rounds of a match.
|
||
*
|
||
|
||
SUBR init_rnd_life_data
|
||
|
||
;reset life data
|
||
movi NUM_WRES,a0
|
||
movi life_data,a1
|
||
movi LIFE_MAX,a2
|
||
#init_loop
|
||
move a2,*a1(PLT_LIFE)
|
||
move a2,*a1(PLT_CLIFE)
|
||
addi PLT_SIZE,a1
|
||
dsj a0,#init_loop
|
||
|
||
;set lifebar pals.
|
||
movi FYL2RD_P,a0
|
||
calla pal_getf
|
||
|
||
movi meter_data,a1
|
||
move @p2rounds,a14
|
||
jrz #ok1
|
||
|
||
;set left lifebar red
|
||
move *a1(MD_LIFE),a8,L
|
||
move a0,*a8(OPAL)
|
||
|
||
#ok1 addi MD_SIZE,a1
|
||
move @p1rounds,a14
|
||
jrz #ok2
|
||
|
||
;set right lifebar red
|
||
move *a1(MD_LIFE),a8,L
|
||
move a0,*a8(OPAL)
|
||
|
||
#ok2 rets
|
||
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* >a8 = PLYRNUM for left meter
|
||
* >a9 = PLYRNUM for right meter
|
||
|
||
P1CNTR .equ PDATA
|
||
P2CNTR .equ PDATA+16
|
||
P1STATE .equ PDATA+32
|
||
P2STATE .equ PDATA+48
|
||
|
||
SUBR meters
|
||
|
||
PUSH a8,a9
|
||
|
||
;Start the credits message
|
||
calla start_credbox
|
||
|
||
;initialize meter data
|
||
movi meter_data,a1
|
||
TBL_OBJ lhlth1
|
||
move a8,*a1(MD_LIFE),L
|
||
|
||
TBL_OBJ lname
|
||
move a8,*a1(MD_NAME),L
|
||
|
||
TBL_OBJ lframec
|
||
move a8,*a1(MD_LBAK),L
|
||
|
||
TBL_OBJ lcombo
|
||
move a8,*a1(MD_COMBO),L
|
||
|
||
addi MD_SIZE,a1
|
||
|
||
TBL_OBJ rhlth1
|
||
move a8,*a1(MD_LIFE),L
|
||
|
||
TBL_OBJ rname
|
||
move a8,*a1(MD_NAME),L
|
||
|
||
TBL_OBJ rframec
|
||
move a8,*a1(MD_LBAK),L
|
||
|
||
TBL_OBJ rcombo
|
||
move a8,*a1(MD_COMBO),L
|
||
|
||
;create the static (no-handle) objects
|
||
TBL_OBJ lframe
|
||
TBL_OBJ lframeb
|
||
|
||
TBL_OBJ rframe
|
||
TBL_OBJ rframeb
|
||
|
||
callr do_win_streaks
|
||
|
||
PULL a8,a9
|
||
|
||
;wire up the meters
|
||
clr a0
|
||
move a8,a1
|
||
callr rewire_meter
|
||
movk 1,a0
|
||
move a9,a1
|
||
callr rewire_meter
|
||
|
||
CREATE ANNC_PID,announce_match
|
||
|
||
movk 1,a0
|
||
move a0,*a13(P1CNTR)
|
||
move a0,*a13(P2CNTR)
|
||
clr a0
|
||
move a0,*a13(P1STATE)
|
||
move a0,*a13(P2STATE)
|
||
|
||
#main_loop
|
||
;Update all the life data
|
||
clr a0
|
||
|
||
#maint_loop
|
||
MOVE @WHICH_SCREEN,A1,L
|
||
CMPI DUMRETS,A1
|
||
JRNE JUST_DISPLAY_THEM
|
||
callr inc_life
|
||
inc a0
|
||
cmpi NUM_WRES,a0
|
||
jrne #maint_loop
|
||
|
||
JUST_DISPLAY_THEM
|
||
;Update the meters
|
||
clr a0
|
||
callr update_meter
|
||
movk 1,a0
|
||
callr update_meter
|
||
|
||
;Blink CPU controlled name with insert coins/press start
|
||
movi meter_data,a1
|
||
move @PSTATUS,a0
|
||
btst 0,a0
|
||
jrnz #p2
|
||
;Plyr 1 is drone
|
||
move *a13(P1CNTR),a0
|
||
dec a0
|
||
move a0,*a13(P1CNTR)
|
||
jrnz #p2
|
||
move *a13(P1STATE),a0
|
||
xori 1,a0
|
||
move a0,*a13(P1STATE)
|
||
jrz #doname
|
||
|
||
;Do correct coin message
|
||
|
||
movi TSEC,a0 ;one second of PRESS/INSERT...
|
||
move @NUM_OPPS,a14 ;(two if one-on-one mode)
|
||
dec a14
|
||
jrnz #tset1a
|
||
sla 1,a0
|
||
#tset1a move a0,*a13(P1CNTR)
|
||
|
||
move *a1(MD_NAME),a8,L
|
||
movi WF_START,a0
|
||
;Display the insert coin/press start message
|
||
calla CR_STRTP
|
||
jrhs #enough_money
|
||
movi WF_INSERT,a0
|
||
#enough_money
|
||
calla civanic
|
||
jruc #p2
|
||
#doname
|
||
movi TSEC*4,a0 ;and four seconds of names
|
||
move @NUM_OPPS,a14 ;(two if one-on-one mode)
|
||
dec a14
|
||
jrnz #tset1b
|
||
sra 1,a0
|
||
#tset1b move a0,*a13(P1CNTR)
|
||
|
||
move *a1(MD_LINK),a0
|
||
X32 a0
|
||
addi process_ptrs,a0
|
||
move *a0,a0,L
|
||
move *a0(WRESTLERNUM),a0
|
||
|
||
X32 a0
|
||
addi name_tbl,a0
|
||
move *a0,a0,L
|
||
;Change the name
|
||
move *a1(MD_NAME),a8,L
|
||
calla civanic
|
||
#p2
|
||
movi meter_data,a1
|
||
addi MD_SIZE,a1
|
||
move @PSTATUS,a0
|
||
btst 1,a0
|
||
jrnz #ok
|
||
|
||
;Plyr 2 is drone
|
||
move *a13(P2CNTR),a0
|
||
dec a0
|
||
move a0,*a13(P2CNTR)
|
||
jrnz #ok
|
||
move *a13(P2STATE),a0
|
||
xori 1,a0
|
||
move a0,*a13(P2STATE)
|
||
jrz #doname2
|
||
|
||
;Do correct coin message
|
||
|
||
movi TSEC,a0 ;one second of PRESS/INSERT...
|
||
move @NUM_OPPS,a14 ;(two if one-on-one mode)
|
||
dec a14
|
||
jrnz #tsetsa
|
||
sla 1,a0
|
||
#tsetsa move a0,*a13(P1CNTR)
|
||
|
||
move *a1(MD_NAME),a8,L
|
||
movi WF_START,a0
|
||
;Display the insert coin/press start message
|
||
calla CR_STRTP
|
||
jrhs #enough_money
|
||
movi WF_INSERT,a0
|
||
#enough_money2
|
||
calla civanic
|
||
jruc #ok
|
||
#doname2
|
||
movi TSEC*4,a0 ;and four seconds of names
|
||
move @NUM_OPPS,a14 ;(two if one-on-one mode)
|
||
dec a14
|
||
jrnz #tset2b
|
||
sra 1,a0
|
||
#tset2b move a0,*a13(P1CNTR)
|
||
|
||
move *a1(MD_LINK),a0
|
||
X32 a0
|
||
addi process_ptrs,a0
|
||
move *a0,a0,L
|
||
move *a0(WRESTLERNUM),a0
|
||
|
||
X32 a0
|
||
addi name_tbl,a0
|
||
move *a0,a0,L
|
||
;Change the name
|
||
move *a1(MD_NAME),a8,L
|
||
calla civanic
|
||
|
||
#ok
|
||
SLEEPK 1
|
||
jruc #main_loop
|
||
|
||
#********
|
||
*
|
||
* Meter objects and their positions
|
||
*
|
||
|
||
|
||
lbar_x .equ 11
|
||
rbar_x .equ 390
|
||
|
||
lcombo_x .equ 181-45
|
||
rcombo_x .equ 220+45
|
||
|
||
lname_x .equ 97
|
||
rname_x .equ 303
|
||
|
||
bar_y .equ 20
|
||
combo_y .equ bar_y+18
|
||
|
||
name_y .equ 13
|
||
|
||
bak_z .equ 200
|
||
bar_z .equ 202
|
||
frame_z .equ 201
|
||
name_z .equ 203
|
||
|
||
|
||
lcombo .word lcombo_x,combo_y,name_z ;X, Y, Z
|
||
.long SUPER_0
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
rcombo .word rcombo_x,combo_y,name_z ;X, Y, Z
|
||
.long SUPER_0
|
||
.word DMAWNZ|M_FLIPH|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
lframe .word lbar_x,bar_y,frame_z ;X, Y, Z
|
||
.long PWREMPTY
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
|
||
rframe .word rbar_x,bar_y,frame_z ;X, Y, Z
|
||
.long PWREMPTY
|
||
.word DMAWNZ|M_3D|M_SCRNREL|M_FLIPH ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
|
||
lframeb .word lbar_x,bar_y,frame_z ;X, Y, Z
|
||
.long LBAR_GENB ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
rframeb .word rbar_x,bar_y,frame_z ;X, Y, Z
|
||
.long RBAR_GENB ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL|M_FLIPH ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
|
||
lframec .word lbar_x,bar_y,bak_z ;X, Y, Z
|
||
.long LBAR_GENC ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
rframec .word rbar_x,bar_y,bak_z ;X, Y, Z
|
||
.long LBAR_GENC ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL|M_FLIPH ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
lwin .word 11,22h,name_z ;X, Y, Z
|
||
.long BWINBOX ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
rwin .word 391,22h,name_z ;X, Y, Z
|
||
.long RWINBOX ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBMFRAME ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
|
||
lhlth1 .word lbar_x,bar_y,bar_z ;X, Y, Z
|
||
.long FGRN2YEL
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBLBAR ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
rhlth1 .word rbar_x,bar_y,bar_z ;X, Y, Z
|
||
.long FGRN2YEL
|
||
.word DMAWNZ|M_3D|M_SCRNREL|M_FLIPH ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBLBAR ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
*
|
||
* name data
|
||
*
|
||
|
||
lname .word lname_x,name_y,name_z ;X, Y, Z
|
||
.long NAM_BRT ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBLBAR ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
rname .word rname_x,name_y,name_z ;X, Y, Z
|
||
.long NAM_RZR ;IMG
|
||
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
|
||
.word CLSNEUT|TYPNEUT|SUBLBAR ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
***************************************
|
||
|
||
SUBRP replace_wins
|
||
move @match_winner,a1
|
||
MOVE @PSTATUS,A0
|
||
AND A1,A0
|
||
JRZ #EXIT
|
||
|
||
move @WINS_OBJ,A0,L
|
||
JRZ NO_WINS_1
|
||
CALLA DELOBJ
|
||
NO_WINS_1
|
||
move @WINS_OBJ+020H,A0,L
|
||
JRZ NO_WINS_2
|
||
CALLA DELOBJ
|
||
NO_WINS_2
|
||
move @WINS_OBJ+040H,A0,L
|
||
JRZ NO_WINS_3
|
||
CALLA DELOBJ
|
||
NO_WINS_3
|
||
move @match_winner,a1
|
||
dec a1
|
||
jrnz do_player_2_wins
|
||
move @p1winstreak,a0
|
||
push a10
|
||
callr streak_1
|
||
pull a10
|
||
#EXIT
|
||
rets
|
||
|
||
do_player_2_wins
|
||
move @p2winstreak,a0
|
||
push a10
|
||
callr streak_2
|
||
pull a10
|
||
rets
|
||
|
||
|
||
***************************************
|
||
|
||
FLASH_COMBO
|
||
|
||
MOVI COMBO_P,A0
|
||
CALLA pal_getf
|
||
MOVE A0,*A8(OPAL)
|
||
MOVE *A8(OCTRL),A1
|
||
ANDNI M_FLIPH,A1
|
||
MOVE A1,*A8(OCTRL)
|
||
DO_COMBO_FLASH_AGAIN
|
||
MOVI COMBO_FLASH_ANIM,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
SLEEPK 20
|
||
JRUC DO_COMBO_FLASH_AGAIN
|
||
|
||
DO_COMBO_SOUND
|
||
SLEEPK 25
|
||
MOVI 3,A0
|
||
CALLA triple_sound
|
||
DIE
|
||
|
||
CANI_END equ 2 + 8000H
|
||
|
||
COMBO_FLASH_ANIM
|
||
WL 2,COMBO_01
|
||
WL 2,COMBO_02
|
||
WL 2,COMBO_03
|
||
WL 2,COMBO_04
|
||
WL 2,COMBO_05
|
||
WL 2,COMBO_06
|
||
WL 2,COMBO_07
|
||
WL 2,COMBO_08
|
||
WL 2,COMBO_09
|
||
WL 2,COMBO_10
|
||
.WORD CANI_END
|
||
|
||
SUBRP flash_2ndwind
|
||
MOVE *A8(OCTRL),A1
|
||
ANDNI M_FLIPH,A1
|
||
MOVE A1,*A8(OCTRL)
|
||
movk 3,a9
|
||
#flsh PUSHP a9
|
||
movi wind_anim,a1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
|
||
SLEEPK 2
|
||
|
||
PULLP a9
|
||
dsj a9,#flsh
|
||
|
||
DIE
|
||
|
||
wind_anim
|
||
WL 2,SECWND01
|
||
WL 2,SECWND02
|
||
WL 2,SECWND03
|
||
WL 2,SECWND04
|
||
WL 2,SECWND05
|
||
WL 2,SECWND06
|
||
WL 2,SECWND07
|
||
WL 2,SECWND08
|
||
WL 2,SECWND09
|
||
.WORD CANI_END
|
||
|
||
******************************************************************************
|
||
|
||
SUBR CHECK_COMBO_GO
|
||
move *a8(PLYRNUM),a1
|
||
|
||
;if we're in royal rumble, change a 1 to a zero.
|
||
move @royal_rumble,a14
|
||
jrz #norum0
|
||
cmpi 1,a1
|
||
jrne #norum0
|
||
clr a1
|
||
#norum0
|
||
|
||
X64 a1 ;x by PLT_SIZE
|
||
addi life_data,a1
|
||
MOVE *A1(PLT_COMBO_SIZE),a14
|
||
; MOVE @BONUS_POWER,A1
|
||
; cmp A1,a14
|
||
move @instant_combos_on,a1
|
||
jrnz #auto_combos ; Auto combos on
|
||
movk 16,a1 ; Normal combo check
|
||
jruc #combo_check
|
||
#auto_combos
|
||
clr a1
|
||
#combo_check
|
||
cmp a1,a14
|
||
rets
|
||
|
||
******************************************************************************
|
||
|
||
;A7 = BIT TO SET IN PLAYER HISTORY
|
||
;A5 = FIRST TIME FOR MOVE
|
||
;A6 = MOVE REPEAT
|
||
|
||
SUBR ADD_TO_COMBO_COUNT
|
||
|
||
;Adds first value each time! [why?]
|
||
MOVE A7,A2
|
||
movk 1,a5
|
||
movk 1,a3
|
||
MOVE *a13(COMBO_START),A1
|
||
AND A1,A2
|
||
JRNZ ALREADY_ADDED_ONCE
|
||
MOVE A5,A3
|
||
MOVE *a13(COMBO_START),A1
|
||
OR A7,A1
|
||
MOVE A1,*A13(COMBO_START)
|
||
ALREADY_ADDED_ONCE
|
||
|
||
;HACK ALERT: In royal rumble mode, each player individually tracks
|
||
; which moves he's done and so on, but both share a single combo
|
||
; meter. Halve the amount to add and give it to player 0 if we're
|
||
; in royal rumble mode and a13 is player 1.
|
||
|
||
PUSH a13
|
||
move @royal_rumble,a14
|
||
jrz #norum
|
||
|
||
move *a13(PLYRNUM),a14
|
||
cmpi 1,a14
|
||
jrgt #norum
|
||
|
||
;royal rumble and a13 is a human. make it the first one.
|
||
clr a1
|
||
calla get_process_ptr
|
||
move a0,a13
|
||
#norum
|
||
|
||
;WARNING: a13 isn't neccesarily valid in here! (see above)
|
||
move *a13(PLYR_SIDE),a1
|
||
move *a13(PLYRNUM),a11
|
||
|
||
PULL a13
|
||
;OKAY: a13 is safe again.
|
||
|
||
movi MD_SIZE,a9
|
||
mpyu a1,a9
|
||
addi meter_data,a9
|
||
MOVE *A9(MD_COMBO),A8,L
|
||
move a11,a5
|
||
X64 a5 ;x by PLT_SIZE
|
||
ADDI life_data,A5
|
||
MOVE *A5(PLT_COMBO_SIZE),A2
|
||
ADD A3,A2
|
||
MOVE A2,*A5(PLT_COMBO_SIZE)
|
||
move @instant_combos_on,a6
|
||
jrz #norm_combos
|
||
clr a6
|
||
jruc #do_check
|
||
#norm_combos
|
||
movk 16,a6
|
||
#do_check
|
||
cmp a6,a2
|
||
JRGE SET_FLASHING_COMBO_GOING
|
||
SLL 5,A2
|
||
ADDI WHICH_SIZE_BAR,A2
|
||
MOVE *A2,A0,L
|
||
move *a0(IANIOFF),*A8(ODOFF),L
|
||
move *a0(ISAG),*a8(OSAG),L
|
||
|
||
RETS
|
||
|
||
SUBR SET_FLASHING
|
||
|
||
move a10,a0
|
||
sll 5,a0
|
||
addi process_ptrs,a0
|
||
move *a0,a0,L
|
||
move *a0(PLYR_SIDE),a1
|
||
movi MD_SIZE,a9
|
||
mpyu a1,a9
|
||
addi meter_data,a9
|
||
MOVE *A9(MD_COMBO),A8,L
|
||
|
||
SET_FLASHING_COMBO_GOING
|
||
;a1=plyr side
|
||
move a1,a0
|
||
SLL 4,a0
|
||
ADDI COMBO_FLASH_FLAG,a0
|
||
MOVE *a0,a0
|
||
JRNZ COMBO_ALREADY_STARTED
|
||
|
||
MOVE A1,A7
|
||
SLL 4,A7
|
||
ADDI COMBO_FLASH_FLAG,A7
|
||
MOVK 1,A0
|
||
MOVE A0,*A7
|
||
ADDI FLASH_COMBO_PID,A1
|
||
MOVI FLASH_COMBO,A7
|
||
CALLA GETPRC
|
||
CREATE SOUND_PID,DO_COMBO_SOUND
|
||
COMBO_ALREADY_STARTED
|
||
RETS
|
||
|
||
WHICH_SIZE_BAR
|
||
.LONG SUPER_0
|
||
.LONG SUPER_1
|
||
.LONG SUPER_2
|
||
.LONG SUPER_3
|
||
.LONG SUPER_4
|
||
.LONG SUPER_5
|
||
.LONG SUPER_6
|
||
.LONG SUPER_7
|
||
.LONG SUPER_8
|
||
.LONG SUPER_9
|
||
.LONG SUPER_10
|
||
.LONG SUPER_11
|
||
.LONG SUPER_12
|
||
.LONG SUPER_13
|
||
.LONG SUPER_14
|
||
.LONG SUPER_15
|
||
.LONG SUPER_16
|
||
|
||
#*****************
|
||
*
|
||
* Use in a 1-player game when there are multiple drones on the other team.
|
||
* This process keeps the other lifebar/name/combo meter display up-to-date.
|
||
* It won't do a rewire within #LATENCY ticks of the last rewire unless the
|
||
* currently displayed wrestler is dead.
|
||
*
|
||
|
||
.bss #LAST_REWIRE,32
|
||
#LATENCY .equ TSEC/2
|
||
|
||
SUBR rewire_monitor
|
||
|
||
move @buddy_mode_on,a14
|
||
jrnz #buddy
|
||
move @royal_rumble,a14
|
||
jrnz #rumble
|
||
|
||
;quit if we're a two-player game
|
||
move @PSTATUS,a14
|
||
cmpi 3,a14
|
||
jreq #die
|
||
|
||
;quit if we're a 1v1 game
|
||
move @NUM_OPPS,a14
|
||
cmpi 1,a14
|
||
jreq #die
|
||
|
||
;okay, we should run. figure out which PLYRNUM to key on. Choose
|
||
; the first active process, since that'll either be the only human
|
||
; or the lone attract mode drone. (Even if we do decide to show
|
||
; 2v2 battles in attract mode, nobody dies so it's okay to always
|
||
; key on the first drone.)
|
||
;NOTE: The reason we store the PLYRNUM to key on instead of the
|
||
; process pointer is that if we allow 2v2 mode and the human can
|
||
; switch control from one drone to the next, we can't count on
|
||
; PLYRNUM's and process ptrs always matching up!
|
||
|
||
#run movi NUM_WRES,a0
|
||
movi process_ptrs,a1
|
||
#lp0 move *a1+,a2,L
|
||
jrnz #found
|
||
dsj a0,#lp0
|
||
|
||
;Hey! No active processes! Bitch, then quit.
|
||
.if DEBUG
|
||
LOCKUP
|
||
.endif
|
||
|
||
#die DIE
|
||
|
||
#found move *a2(PLYRNUM),a10 ;key plyrnum
|
||
move *a2(CLOSEST_NUM),a11 ;previous closest (current disp.)
|
||
|
||
#loop move a10,a1
|
||
calla get_process_ptr
|
||
move a0,a6 ;key process (recomputed every wake)
|
||
move *a6(CLOSEST_NUM),a1
|
||
cmp a11,a1
|
||
jreq #no
|
||
|
||
;closest has changed. only rewire if PCNT >= @#LAST_REWIRE+#LATENCY,
|
||
; or if the old guy is dead.
|
||
move a11,a1 ;old guy...
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #rewire ;dead?
|
||
|
||
move @PCNT,a0,L
|
||
move @#LAST_REWIRE,a1,L
|
||
addi #LATENCY,a1
|
||
cmp a1,a0
|
||
jrle #no ;enough time since last chg?
|
||
|
||
#rewire move *a6(CLOSEST_NUM),a1
|
||
calla get_process_ptr
|
||
move a0,a7 ;new closest proc
|
||
move *a7(PLYR_SIDE),a0 ;side to display
|
||
move *a7(PLYRNUM),a1 ;PLYRNUM to display
|
||
callr rewire_meter
|
||
move @PCNT,a14,L
|
||
move a14,@#LAST_REWIRE,L
|
||
move *a6(CLOSEST_NUM),a11
|
||
#no SLOOP 10,#loop
|
||
|
||
|
||
****
|
||
|
||
|
||
#rumble ;royal rumble. Never rewire the left meter. Toggle the right
|
||
; meter every four seconds between plyrnums 2 and 3. Don't
|
||
; toggle to or stay on a dead guy.
|
||
|
||
movk 3,a9 ;pretend we're on PLYRNUM 3...
|
||
jruc #toggle ;...so that we can just toggle to initialize.
|
||
|
||
#rloop ;see if we're displaying a dead guy.
|
||
move a9,a1
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #toggle
|
||
|
||
;still alive. time to toggle anyway?
|
||
dec a8
|
||
jrle #toggle
|
||
|
||
;not time yet.
|
||
SLOOP 10,#rloop
|
||
|
||
#toggle move a9,a1
|
||
|
||
;is THIS guy dead?
|
||
xori 1,a1 ;toggle between 2 and 3
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #notogl ;new guy is dead. skip it.
|
||
|
||
move a1,a9
|
||
movk 1,a0
|
||
callr rewire_meter
|
||
|
||
movk TSEC*4/10,a8
|
||
#notogl SLOOP 10,#rloop
|
||
|
||
|
||
****
|
||
|
||
|
||
#buddy ;buddy mode. This one is easy: Show the human, unless he's dead
|
||
; and his drone teammate is alive. Don't assume, once the human
|
||
; is dead, that he'll stay that way. Buckoffs and all.
|
||
|
||
clr a8 ;displayed player on team 0
|
||
movk 1,a9 ;displayed player on team 1
|
||
|
||
#bloop clr a1
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jrne #p1liv
|
||
|
||
#p1ded ;plyr 1 is dead--check his drone.
|
||
movk 2,a1
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #p1liv ;show the human anyway
|
||
|
||
;p1 is dead and his drone is alive. show the drone.
|
||
cmpi 2,a8
|
||
jreq #ckp2 ;already showing the drone. skip it.
|
||
|
||
clr a0
|
||
movk 2,a1
|
||
move a1,a8
|
||
callr rewire_meter
|
||
jruc #ckp2
|
||
|
||
#p1liv ;plyr 1 is alive (or his drone is dead). show him.
|
||
|
||
TEST a8
|
||
jrz #ckp2 ;already showing the human. skip it.
|
||
|
||
clr a0
|
||
clr a1
|
||
move a1,a8
|
||
callr rewire_meter
|
||
|
||
#ckp2 movk 1,a1
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jrne #p2liv
|
||
|
||
#p2ded ;plyr 2 is dead--check his drone.
|
||
movk 3,a1
|
||
calla get_process_ptr
|
||
move *a0(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #p2liv ;show the human anyway
|
||
|
||
;p2 is dead and his drone is alive. show the drone.
|
||
cmpi 3,a9
|
||
jreq #bnap ;already showing the drone. skip it.
|
||
|
||
movk 1,a0
|
||
movk 3,a1
|
||
move a1,a9
|
||
callr rewire_meter
|
||
jruc #bnap
|
||
|
||
#p2liv ;plyr 2 is alive (or his drone is dead). show him.
|
||
|
||
cmpi 1,a9
|
||
jrz #bnap ;already showing the human. skip it.
|
||
|
||
movk 1,a0
|
||
movk 1,a1
|
||
move a1,a9
|
||
callr rewire_meter
|
||
|
||
#bnap SLOOP 10,#bloop
|
||
|
||
|
||
#*****************************************************************************
|
||
* 'rewires' a meter display for a different wrestler
|
||
* >a0 = display(0 or 1), >a1= playernum (0 to NUM_WRES-1)
|
||
|
||
SUBR rewire_meter
|
||
|
||
PUSH a2,a3,a4,a5,a6,a7,a8,a9,a10,a11
|
||
|
||
;set the pointers
|
||
;point a5 at the MD_???? block for the display
|
||
movi MD_SIZE,a5
|
||
mpyu a0,a5
|
||
addi meter_data,a5
|
||
|
||
;point a6 at the PLT_???? block for PLYRNUM
|
||
move a1,a3
|
||
X64 a3 ;x by PLT_SIZE
|
||
movi life_data,a6
|
||
add a3,a6
|
||
|
||
;set MD_LINK
|
||
move a1,*a5(MD_LINK)
|
||
|
||
;point a7 at PLYRNUM's process
|
||
move a1,a7
|
||
X32 a7
|
||
addi process_ptrs,a7
|
||
move *a7,a7,L
|
||
|
||
;change the combo bar
|
||
PUSH A0
|
||
MOVE *A6(PLT_COMBO_SIZE),A2
|
||
; MOVE @BONUS_POWER,A14
|
||
; CMP A14,A2
|
||
move @instant_combos_on,a14
|
||
jrz #norm_combos
|
||
clr a14
|
||
jruc #do_check
|
||
#norm_combos
|
||
movk 16,a14
|
||
#do_check
|
||
cmp a14,a2
|
||
; CMPI 16,A2
|
||
JRGE WE_ARE_IN_COMBO_MODE
|
||
|
||
MOVE A0,A1
|
||
SLL 4,A1
|
||
ADDI COMBO_FLASH_FLAG,A1
|
||
MOVE *A1,A8
|
||
JRZ NO_NEED_TO_KILL_COMBO_PROC
|
||
CLR A8
|
||
MOVE A8,*A1
|
||
ADDI FLASH_COMBO_PID,A0
|
||
MOVI -1,A1
|
||
CALLA KILALL
|
||
NO_NEED_TO_KILL_COMBO_PROC
|
||
PULL A0
|
||
MOVE *A5(MD_COMBO),A8,L
|
||
CLR A14
|
||
MOVE A0,A0
|
||
JRZ NO_NEED_TO_SET_XFLIP
|
||
MOVI M_FLIPH,A14
|
||
NO_NEED_TO_SET_XFLIP
|
||
MOVI SUPER_P,A0
|
||
CALLA pal_getf
|
||
MOVE A0,*A8(OPAL)
|
||
|
||
MOVE *A6(PLT_COMBO_SIZE),A0
|
||
SLL 5,A0
|
||
ADDI WHICH_SIZE_BAR,A0
|
||
MOVE *A0,A0,L
|
||
|
||
MOVE *A0(ICTRL),A1
|
||
OR A14,A1
|
||
ORI 8000H|DMAWNZ,A1
|
||
MOVE A1,*A8(OCTRL)
|
||
move *a0(IANIOFF),*A8(ODOFF),L
|
||
move *a0(ISAG),*a8(OSAG),L
|
||
move *a0(0),*a8(OSIZE),L
|
||
JRUC JUMP_BACK_IN
|
||
|
||
WE_ARE_IN_COMBO_MODE
|
||
;IS THIS NECESSARY!
|
||
SLL 4,A0
|
||
ADDI COMBO_FLASH_FLAG,A0
|
||
MOVE *A0,A1
|
||
|
||
JRNZ WE_ARE_ON_RIGHT_SETTING
|
||
MOVK 1,A1
|
||
MOVE A1,*A0
|
||
|
||
PULL A1
|
||
PUSH A1
|
||
ADDI FLASH_COMBO_PID,A1
|
||
PUSH A7
|
||
MOVI FLASH_COMBO,A7
|
||
MOVE *A5(MD_COMBO),A8,L
|
||
CALLA GETPRC
|
||
PULL A7
|
||
|
||
WE_ARE_ON_RIGHT_SETTING
|
||
PULL A0
|
||
|
||
JUMP_BACK_IN
|
||
;change the name
|
||
move *a5(MD_NAME),a8,L
|
||
move *a7(WRESTLERNUM),a1
|
||
|
||
move @royal_rumble,a14
|
||
jrz #uname
|
||
|
||
move *a7(PLYRNUM),a14
|
||
jrz #buddy0
|
||
cmpi 1,a14
|
||
jrgt #uname
|
||
.if DEBUG
|
||
LOCKUP ;rewire to PLYRNUM 1 in buddy mode!?
|
||
.endif
|
||
#buddy0 ;It's a royal rumble. Create the pair of names to go with the slash.
|
||
; This code only executes once for the left meters in rumble mode.
|
||
|
||
.ref index1,index2
|
||
|
||
PUSH a8
|
||
|
||
TBL_OBJ lname
|
||
move @index1,a0
|
||
X32 a0
|
||
addi shortname_tbl,a0
|
||
move *a0,a0,L
|
||
calla civanic
|
||
|
||
move *a8(OXPOS),a1
|
||
subk 8,a1
|
||
move *a0(ISIZEX),a14
|
||
sub a14,a1
|
||
move *a0(IANIOFFX),a14
|
||
add a14,a1
|
||
move a1,*a8(OXPOS)
|
||
|
||
TBL_OBJ lname
|
||
move @index2,a0
|
||
X32 a0
|
||
addi shortname_tbl,a0
|
||
move *a0,a0,L
|
||
calla civanic
|
||
|
||
move *a8(OXPOS),a1
|
||
addk 8,a1
|
||
move *a0(ISIZEX),a14
|
||
add a14,a1
|
||
move *a0(IANIOFFX),a14
|
||
sub a14,a1
|
||
move a1,*a8(OXPOS)
|
||
|
||
movk 10,a1
|
||
|
||
PULL a8
|
||
|
||
#uname X32 a1
|
||
addi name_tbl,a1
|
||
move *a1,a0,L
|
||
calla civanic
|
||
|
||
#rets PULL a2,a3,a4,a5,a6,a7,a8,a9,a10,a11
|
||
|
||
rets
|
||
|
||
name_tbl
|
||
.long NAM_BRT,NAM_RZR,NAM_UND,NAM_YOK,NAM_SHN
|
||
.long NAM_BAM,NAM_DNK,NAM_DNK,NAM_LEX,NAM_LEX
|
||
.long WSF10SLSx
|
||
|
||
shortname_tbl
|
||
.long SHORTHRT,SHORTRZR,SHORTUND,SHORTYOK,SHORTSHN
|
||
.long SHORTBAM,SHORTDNK,SHORTDNK,SHORTLEX,SHORTLEX
|
||
|
||
#*****************************************************************************
|
||
* Updates (resizes) the bars on a meter display.
|
||
* >a0 = meter (0 or 1)
|
||
|
||
SUBRP update_meter
|
||
|
||
;aim a1 at the MD struct
|
||
movi MD_SIZE,a1
|
||
mpyu a0,a1
|
||
addi meter_data,a1
|
||
|
||
;aim a3 at the PLT struct
|
||
move *a1(MD_LINK),a2
|
||
move a2,a3
|
||
X64 a3 ;x by PLT_SIZE
|
||
addi life_data,a3
|
||
|
||
;set the life bar
|
||
move *a1(MD_LIFE),a8,L
|
||
move *a3(PLT_CLIFE),a14
|
||
neg a14
|
||
addi LIFE_MAX,a14 ;a14 is pixels to hide
|
||
|
||
move a14,*a8(OFSET)
|
||
JRZ #NOT_TO_WORRY
|
||
|
||
cmpi 2,a2
|
||
jrge we_are_a_drone_ignore
|
||
move a2,a6
|
||
X32 a6
|
||
addi process_ptrs,a6
|
||
move *a6,a6,L
|
||
move *a6(OUTSIDE_ALONE),a1
|
||
jrz we_are_a_drone_ignore
|
||
|
||
move @ROLLING_COUNT,A0
|
||
sll 31,a0
|
||
jrnz ignore_it
|
||
|
||
move *a8(OFLAGS),a1
|
||
xori M_NODISP,A1
|
||
move a1,*a8(OFLAGS)
|
||
ignore_it
|
||
rets
|
||
|
||
we_are_a_drone_ignore
|
||
MOVE @WHICH_SCREEN,A1,L
|
||
CMPI DUMRETS,A1
|
||
JREQ #NOT_TO_WORRY
|
||
MOVE *A8(OFLAGS),A1
|
||
ORI M_NODISP,A1
|
||
MOVE A1,*A8(OFLAGS)
|
||
RETS
|
||
|
||
#NOT_TO_WORRY
|
||
MOVE *A8(OFLAGS),A1
|
||
ANDI 0FFFFH-M_NODISP,A1
|
||
MOVE A1,*A8(OFLAGS)
|
||
RETS
|
||
|
||
|
||
; movi 5,a7
|
||
; mpyu a14,a7
|
||
; move *a8(OIMG),a14,L
|
||
; move *a14(ISAG),a14,L
|
||
; add a14,a7
|
||
; move a7,*a8(OSAG),L
|
||
|
||
rets
|
||
|
||
#*****************************************************************************
|
||
* Returns the remaining health for a player
|
||
* >a1 = PLYRNUM
|
||
* <a0 = life (also returns Z bit based on life remaining)
|
||
|
||
|
||
SUBR get_health
|
||
PUSH a1
|
||
X64 a1 ;x by PLT_SIZE
|
||
addi life_data,a1
|
||
move *a1(PLT_LIFE),a0
|
||
PULL a1
|
||
TEST a0 ;return Z on remaining life
|
||
rets
|
||
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Adjusts a player's health total
|
||
* >a0 = amount to add to player's health total
|
||
* >a1 = PLYRNUM
|
||
* >a10= attacker's process ptr
|
||
*
|
||
* Returns carry bit set if we're dead at the end of this, even if we
|
||
* were dead when the function was called. Returns carry clear if we're
|
||
* alive afterwards.
|
||
*
|
||
* HACK ALERT: In royal rumble mode, the two human players share a lifebar.
|
||
* This is implemented by halving all damage done to human players, and
|
||
* then redirecting any damage done to player 1 to player 0 instead.
|
||
* So right away we save the actual PLYRNUM, then change from 1 to 0 in
|
||
* royal rumble mode. When it comes time to animate, we restore the
|
||
* original.
|
||
*
|
||
|
||
.bss #actual_plyrnum,16
|
||
|
||
;reg use:
|
||
; a3 = adjusted health
|
||
; a4 = current health
|
||
; a5 = player life meter pointer
|
||
;a13 = our process pointer
|
||
|
||
SUBR adjust_health
|
||
|
||
PUSH a1,a3,a4,a5,a8,a10,a13
|
||
|
||
;save the original PLYRNUM
|
||
move a1,@#actual_plyrnum
|
||
|
||
;if we're in royal rumble mode and PLYRNUM is 1, make it zero.
|
||
move @royal_rumble,a14
|
||
jrz #pnumok
|
||
cmpi 1,a1
|
||
jrne #pnumok
|
||
clr a1
|
||
#pnumok
|
||
|
||
**** ;get process pointer
|
||
move a1,a13
|
||
X32 a13
|
||
addi process_ptrs,a13
|
||
move *a13,a13,L
|
||
|
||
**** ;get the meter struct pointer
|
||
move a1,a5
|
||
X64 a5 ;x by PLT_SIZE
|
||
addi life_data,a5
|
||
|
||
**** ;get health
|
||
move *a5(PLT_LIFE),a4
|
||
|
||
**** ;skip the whole routine if we're dead and taking damage
|
||
TEST a0
|
||
jrnn #x0 ;not taking damage
|
||
move *a13(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #already_dead
|
||
#x0
|
||
|
||
**** ;skip multiplier if we're getting life back.
|
||
TEST a0
|
||
jrnn #no_multiplier
|
||
|
||
**** ;make sure a10 is valid
|
||
move *a13(WHOHITME),a14,L
|
||
jrz #no_valid_attacker ;must have this. WHOHITME is init'd
|
||
cmp a14,a10 ; to 0, and will thus match a cleared
|
||
jrne #no_valid_attacker ; a10, with unpredictable results.
|
||
|
||
|
||
**** ;teammates do 1 pixel damage to each other
|
||
move *a10(PLYR_SIDE),a3
|
||
move *a13(PLYR_SIDE),a14
|
||
xor a3,a14
|
||
jrnz #norum1
|
||
|
||
;in 8-on-1, do half dmg to teammates instead of 1 pixel
|
||
calla is_8_on_1
|
||
jrnc #do_1
|
||
sra 1,a0
|
||
jruc #norum1
|
||
|
||
#do_1 movi -1,a0
|
||
#norum1
|
||
|
||
**** ;doing a combo?
|
||
move *a10(COMBO_COUNT),a14
|
||
jrz DO_NORMAL_ADJUST_CHECK
|
||
move a14,a0
|
||
|
||
;it's a combo. Clean DAM_MULT and adjust the damage:
|
||
; 0 < hit# < 12: damage = 15 - hit#
|
||
; hit# > 11: damage = 4
|
||
|
||
clr a14
|
||
move a14,@DAM_MULT
|
||
|
||
; subk 12,a0
|
||
; subk 11,a0
|
||
subk 10,a0
|
||
CMPI -4,A0
|
||
JRLE #no_multiplier
|
||
MOVI -4,A0
|
||
JRUC #no_multiplier
|
||
|
||
DO_NORMAL_ADJUST_CHECK
|
||
;not a combo. check for a multiplier.
|
||
move @DAM_MULT,a9
|
||
jrz #no_multiplier
|
||
|
||
;compute new damage val
|
||
;MULT 2: damage *= 3/2
|
||
;MULT 3: damage *= 4/2
|
||
;MULT 4+: damage *= 5/2
|
||
move a0,a14
|
||
#mul_lp add a14,a0
|
||
dsj a9,#mul_lp
|
||
sra 1,a0
|
||
|
||
;clr DAM_MULT
|
||
clr a14
|
||
move a14,@DAM_MULT
|
||
|
||
#no_valid_attacker
|
||
#no_multiplier
|
||
|
||
|
||
**** ;Adjust damage based on the number of drones, unless we're adding
|
||
;life.
|
||
TEST a0
|
||
jrnn #dc_adj_done
|
||
|
||
;count active drones
|
||
; count = 0 in attract mode, 4 in 8-on-1, 5 in buddy mode, 6 in
|
||
; 8-on-2.
|
||
PUSH a1,a2,a3
|
||
|
||
movk 4,a3
|
||
calla is_8_on_1
|
||
jrc #adc_set
|
||
|
||
movk 5,a3
|
||
move @buddy_mode_on,a14
|
||
jrnz #adc_set
|
||
|
||
movk 6,a3
|
||
move @royal_rumble,a14
|
||
jrnz #adc_set
|
||
|
||
clr a3
|
||
|
||
move @PSTATUS,a14
|
||
jrz #adc_set
|
||
|
||
movi process_ptrs+40h,a1
|
||
movi NUM_WRES-2,a2
|
||
#lp0 move *a1+,a14,L
|
||
jrz #adc_set
|
||
inc a3
|
||
dsj a2,#lp0
|
||
|
||
#adc_set
|
||
X32 a3
|
||
addi #damage_mod_table,a3
|
||
|
||
;add 10h if the target is a player
|
||
move *a13(PLYR_TYPE),a14
|
||
cmpi PTYPE_DRONE,a14
|
||
jreq #adc_drone
|
||
addk 10h,a3
|
||
#adc_drone
|
||
move *a3,a3
|
||
mpyu a0,a3
|
||
move a3,a0
|
||
sra 8,a0
|
||
|
||
PULL a1,a2,a3
|
||
#dc_adj_done
|
||
|
||
|
||
**** ;Adjust damage based on game time adjustment
|
||
move @speed_adjustment,a14,L
|
||
mpys a14,a0
|
||
sra 16,a1
|
||
move a1,a0
|
||
|
||
|
||
**** ;Store away dmg this plyr has done for later analysis, but only
|
||
; if we're taking damage and a10 matches WHOHITME.
|
||
TEST a0
|
||
jrnn #nostore
|
||
|
||
move *a13(WHOHITME),a14,L
|
||
cmp a14,a10
|
||
jrne #nostore
|
||
|
||
move *a10(DAMAGE_GIVEN),a14
|
||
sub a0,a14 ;(damage is negative)
|
||
move a14,*a10(DAMAGE_GIVEN)
|
||
#nostore
|
||
|
||
;do range checking on the damage value. Don't allow a wrestler
|
||
; to have a life value below zero or above LIFE_MAX.
|
||
move a0,a3
|
||
add a4,a3 ;a3 is new life total
|
||
jrle #bzero
|
||
|
||
cmpi LIFE_MAX,a3
|
||
jrle #dmg_ok
|
||
|
||
movi LIFE_MAX,a3
|
||
jruc #dmg_ok
|
||
|
||
#bzero ;this hit will kill us. If it was a 20+ point hit, and it killed
|
||
; us by a margin of 6 pixels or less, fudge it by taking five
|
||
; off the damage
|
||
|
||
cmpi -10,a3
|
||
jrle #no_fudge ;skip if life is -4 or less
|
||
|
||
cmpi -20,a0
|
||
jrgt #no_fudge ;skip if the hit wasn't 25 or more
|
||
|
||
;fudge it. Add 5 to the adjusted life to keep us alive
|
||
addk 5,a3
|
||
movk 5,a3
|
||
;and add 5 to the health adjustment (thus subtracting five from
|
||
; the damage done), just to be safe.
|
||
; addk 5,a0
|
||
jruc #dmg_ok
|
||
|
||
#no_fudge
|
||
clr a3
|
||
|
||
;if we're in attract mode, don't die!
|
||
move @PSTATUS,a14
|
||
jrnz #norm1
|
||
MOVI LIFE_MAX,a3
|
||
|
||
#norm1 ;if he's out of life and we're in debug mode, fill him up.
|
||
.if DEBUG
|
||
move @fight_debug,a14
|
||
jrz #dmg_ok
|
||
movi LIFE_MAX,a3
|
||
.endif
|
||
|
||
#dmg_ok
|
||
move a3,*a5(PLT_LIFE)
|
||
|
||
;update LAST_DAMAGE
|
||
move @PCNT,a14
|
||
move a14,*a13(LAST_DAMAGE)
|
||
|
||
;figure out if we need to flash the lifebar as a warning.
|
||
;if a4 > 30 and a3 <= 30, fire off a danger process.
|
||
; re above: a4 is current life, a3 is life after this hit.
|
||
cmpi 30,a4
|
||
jrle #no_danger_proc
|
||
cmpi 30,a3
|
||
jrgt #no_danger_proc
|
||
|
||
;skip this if we have any teammates
|
||
move a13,a0
|
||
calla ck_any_teammates
|
||
jrc #no_danger_proc
|
||
CREATE FLASH_PID,flash_obj
|
||
move a13,*a0(PDATA),L
|
||
|
||
#no_danger_proc
|
||
|
||
TEST a3
|
||
jrnz #not_dead
|
||
|
||
;player IS dead. -- time to restore original PLYRNUM
|
||
move @#actual_plyrnum,a1
|
||
calla get_process_ptr
|
||
move a0,a13
|
||
|
||
;set I_WILL_DIE on dead human's teammate if we're in royal rumble
|
||
; mode.
|
||
move @royal_rumble,a14
|
||
jrz #norum
|
||
cmpi 2,a1
|
||
jrge #norum
|
||
|
||
xori 1,a1
|
||
calla get_process_ptr
|
||
movk 1,a14
|
||
move a14,*a0(I_WILL_DIE)
|
||
xori 1,a1
|
||
|
||
#norum ;if dying guy is a drone, and we're in 8-on-? mode, decrement
|
||
; wrestler_count and wake up the wrestler_counter process.
|
||
move @#actual_plyrnum,a1
|
||
cmpi 2,a1
|
||
jrlt #notd8
|
||
|
||
;Set the COUNTED_DEAD bit too. If it's already set, don't decrement
|
||
; wrestler_count again.
|
||
move *a13(STATUS_FLAGS),a14,L
|
||
btst B_COUNTED_DEAD,a14
|
||
jrnz #notd8
|
||
ori M_COUNTED_DEAD,a14
|
||
move a14,*a13(STATUS_FLAGS),L
|
||
|
||
move @wrestler_count_proc,a0,L ; Does the counter proc exist ?
|
||
jrz #notd8 ; br = no
|
||
move @wrestler_count,a14 ; Current count == 0 ?
|
||
jrz #notd8 ; br = yes
|
||
dec a14 ; Decrement it
|
||
move a14,@wrestler_count ; Write it back
|
||
movk 1,a14 ; Make counter proc wakeup on next tick
|
||
move a14,*a0(PTIME)
|
||
#notd8
|
||
|
||
;Is combo mode on for this player?
|
||
move *a13(WHOHITME),a8,L
|
||
callr CHECK_COMBO_GO
|
||
jrlt #ok
|
||
;Am I in the middle of a combo?
|
||
move *a8(COMBO_COUNT),a0
|
||
jrz #ok
|
||
;Give him some life back
|
||
movk 1,a14
|
||
move a14,*a5(PLT_LIFE)
|
||
move a14,*a13(I_WILL_DIE)
|
||
jruc #already_dead
|
||
#ok
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_DIES,a13,L,*a13(WRESTLERNUM),W,*a13(PLYRNUM),W
|
||
.endif
|
||
|
||
;death sound
|
||
movi 034h,a0
|
||
calla triple_sound
|
||
|
||
clr a14
|
||
move a14,*a13(ROLL_POS)
|
||
|
||
;Lookup table based on wrestler type
|
||
|
||
move *a13(WHOHITME),a10,L ;* wrestler process
|
||
move *a10(ATTACK_MODE),a0
|
||
cmpi AMODE_BLBOWDROP,a0
|
||
jrz #skip0
|
||
cmpi AMODE_BSTOMP,a0
|
||
jrz #skip0
|
||
cmpi AMODE_BUTTSTOMP,a0
|
||
jrz #skip0
|
||
|
||
;if death by buzzer, jump to #skip0 ONLY if it was unblocked.
|
||
cmpi AMODE_BUZZ,a0
|
||
jrne #nobuzz
|
||
move *a13(PLYRMODE),a14
|
||
cmpi MODE_BLOCK,a14
|
||
jrne #skip0
|
||
#nobuzz
|
||
|
||
;if our DEAD_ANIM bit is set, don't animate
|
||
move *a13(STATUS_FLAGS),a14
|
||
btst B_DEAD_ANIM,a14
|
||
jrnz #skip0
|
||
|
||
move *a13(WRESTLERNUM),a0
|
||
X32 a0
|
||
|
||
move *a13(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jrz #grnd
|
||
cmpi MODE_ONGROUND,a14
|
||
jrnz #fall
|
||
|
||
#grnd addi convulse_t,a0
|
||
move *a0,a0,L
|
||
|
||
calla change_anim1a
|
||
|
||
#skip0
|
||
SETMODE DEAD
|
||
calla wres_collis_off
|
||
|
||
calla flash_red
|
||
|
||
PULL a1,a3,a4,a5,a8,a10,a13
|
||
|
||
setc
|
||
rets
|
||
|
||
#fall
|
||
;Check plyr mode, attempt a death fall back
|
||
;Otherewise, just set mode dead
|
||
cmpi MODE_NORMAL,a14
|
||
jrz #fallbk
|
||
cmpi MODE_RUNNING,a14
|
||
jrz #fallbk
|
||
cmpi MODE_INAIR,a14
|
||
jrz #fallbk
|
||
cmpi MODE_INAIR2,a14
|
||
jrz #fallbk
|
||
cmpi MODE_BOUNCING,a14
|
||
jrz #fallbk
|
||
cmpi MODE_ONTURNBKL,a14
|
||
jrz #fallbk
|
||
cmpi MODE_BLOCK,a14
|
||
jrz #fallbk
|
||
cmpi MODE_DIZZY,a14
|
||
jrz #fallbk
|
||
cmpi MODE_CLIMBTURNBKL,a14
|
||
jrz #fallbk
|
||
cmpi MODE_HEADHOLD,a14
|
||
jrz #fallbk
|
||
cmpi MODE_HEADHELD,a14
|
||
jrz #will_die
|
||
|
||
;Puppet mode? Others?
|
||
;How best to deal with this?
|
||
|
||
|
||
; LOCKUP
|
||
|
||
;At least zero vels?
|
||
clr a0
|
||
move a0,*a13(OBJ_XVEL),L
|
||
move a0,*a13(OBJ_ZVEL),L
|
||
move a0,*a13(OBJ_YVEL),L
|
||
|
||
SETMODE DEAD
|
||
#skip calla wres_collis_off
|
||
|
||
calla flash_red
|
||
|
||
PULL a1,a3,a4,a5,a8,a10,a13
|
||
|
||
setc
|
||
rets
|
||
|
||
#will_die
|
||
; movk 1,a0
|
||
; move a0,*a13(I_WILL_DIE)
|
||
movi 3*60,a0
|
||
move a0,*a13(I_WILL_DIE)
|
||
jruc #skip
|
||
|
||
#fallbk addi #fallbacks_t,a0
|
||
move *a0,a0,L
|
||
|
||
calla change_anim1a
|
||
|
||
move *a13(OBJ_XVEL),a2,L
|
||
cmpi [2,0],a2
|
||
jrgt #okz
|
||
movi [2,0],a2
|
||
move *a13(OBJ_XPOSINT),a1
|
||
move *a13(WHOHITME),a0,L ;* wrestler process
|
||
|
||
move *a0(OBJ_XPOSINT),a0
|
||
cmp a0,a1 ;offx - defx
|
||
jrgt #fall_right ;attacker on left
|
||
movi [-2,0],a2
|
||
|
||
|
||
#fall_right
|
||
move a2,*a13(OBJ_XVEL),L
|
||
#okz
|
||
|
||
calla wres_collis_off
|
||
|
||
SETMODE DEAD
|
||
|
||
calla flash_red
|
||
|
||
PULL a1,a3,a4,a5,a8,a10,a13
|
||
|
||
setc
|
||
rets
|
||
|
||
|
||
|
||
#already_dead
|
||
|
||
calla flash_red
|
||
|
||
PULL a1,a3,a4,a5,a8,a10,a13
|
||
setc
|
||
rets
|
||
|
||
#not_dead
|
||
PULL a1,a3,a4,a5,a8,a10,a13
|
||
clrc
|
||
rets
|
||
|
||
|
||
; tgt = drone tgt = player
|
||
#damage_mod_table
|
||
.word _85PCT, _85PCT ;0 drones
|
||
.word _100PCT, _100PCT ;1 drone
|
||
.word _110PCT, _90PCT ;2 drones
|
||
.word _125PCT, _75PCT ;3 drones
|
||
.word _145PCT, _60PCT ;8-on-1 match
|
||
.word _110PCT, _90PCT ;buddy mode match
|
||
.word _130PCT, _30PCT ;8-on-2 match
|
||
|
||
|
||
SUBR fallbacks_t
|
||
#fallbacks_t
|
||
#fall_back
|
||
REFLONG hrt_fall_back_anim ;0 Bret Hart
|
||
REFLONG rzr_fall_back_anim ;1 Razor Ramon
|
||
REFLONG und_fall_back_anim ;2 Undertaker
|
||
REFLONG yok_fall_back_anim ;3 Yokozuna
|
||
REFLONG shn_fall_back_anim ;4 Shawn Michaels
|
||
REFLONG bam_fall_back_anim ;5 Bam Bam
|
||
REFLONG dnk_fall_back_anim ;6 Doink
|
||
.long 0 ;7 spare
|
||
REFLONG lex_fall_back_anim ;8 Lex Luger
|
||
|
||
|
||
SUBR convulse_t
|
||
#hitonground
|
||
REFLONG hrt_hitonground_anim ;0 Bret Hart
|
||
REFLONG rzr_hitonground_anim
|
||
REFLONG und_hitonground_anim ;2 Undertaker
|
||
REFLONG yok_hitonground_anim ;3 Yokozuna
|
||
REFLONG shn_hitonground_anim ;4 Shawn Michaels
|
||
REFLONG bam_hitonground_anim ;5 Bam Bam
|
||
REFLONG dnk_hitonground_anim ;6 Doink
|
||
.long 0 ;7 spare
|
||
REFLONG lex_hitonground_anim ;8 Lex Luger
|
||
|
||
#*****************************************************************************
|
||
* Create the credits display at the top of the screen
|
||
*
|
||
|
||
SUBR start_credbox
|
||
|
||
;draw the panel
|
||
TBL_OBJ #plate
|
||
|
||
callr update_credit_msg
|
||
rets
|
||
|
||
|
||
***************************************
|
||
* Display credit info - Gets called from coin routines.
|
||
*
|
||
* Trashes a0-a7
|
||
|
||
SUBR update_credit_msg
|
||
|
||
PUSH a8,a9,a10
|
||
|
||
;Only turn on these messages if during gameplay, or player select!
|
||
|
||
.ref SHOW_CRD_FLAG
|
||
move @SHOW_CRD_FLAG,a0
|
||
jrnz #cont0
|
||
|
||
move @GAMSTATE,a0
|
||
cmpi INSELECT,a0
|
||
jrz #cont
|
||
|
||
CMPI INPARTY,A0
|
||
JREQ #cont
|
||
CMPI INPREGAME,A0
|
||
JREQ #cont
|
||
CMPI INPREGAME2,A0
|
||
JREQ #cont
|
||
|
||
subk INGAME,a0
|
||
jrne #x
|
||
|
||
#cont0
|
||
|
||
;When coins are entered, and the game is being played, tell the meter
|
||
;code to display approproiate coinin message.
|
||
|
||
;Get meter process info
|
||
movi METER_PID,a0
|
||
clr a1
|
||
not a1
|
||
calla EXISTP
|
||
jrz #cont
|
||
|
||
movk 1,a1
|
||
move a1,*a0(P1CNTR)
|
||
move a1,*a0(P2CNTR)
|
||
clr a1
|
||
move a1,*a0(P1STATE)
|
||
move a1,*a0(P2STATE)
|
||
|
||
#cont
|
||
|
||
movi CLSDEAD|CREDITID,a0
|
||
calla obj_del1c ;kill credit/qrtr imgs
|
||
|
||
TBL_OBJ #plate
|
||
|
||
movi freeply,a10
|
||
|
||
movk ADJFREPL,a0
|
||
CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!)
|
||
jrnz #freep
|
||
|
||
movi credit,a10
|
||
|
||
calla GET_CREDITS
|
||
calla BINBCD
|
||
|
||
move a0,a9
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #numfont,a0
|
||
move *a0,a2,L
|
||
|
||
movi [216,0],a0
|
||
movi [6,0],a1
|
||
; movi 1006,a3 ;Z
|
||
movi 1901H,a3 ;Z
|
||
movi DMAWNZ|M_SCRNREL,a4
|
||
movi CLSDEAD|CREDITID,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ
|
||
|
||
srl 4,a9
|
||
sll 32-4,a9
|
||
srl 32-4-5,a9 ;*32
|
||
addi #numfont,a9
|
||
move *a9,a2,L
|
||
|
||
movi [211,0],a0
|
||
movi [6,0],a1
|
||
calla BEGINOBJ
|
||
|
||
#freep movi [179,0],a0
|
||
movi [6,0],a1
|
||
move a10,a2
|
||
; movi 1006,a3 ;Z
|
||
movi 1901H,a3 ;Z
|
||
movi DMAWNZ|M_SCRNREL,a4
|
||
movi CLSDEAD|CREDITID,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ
|
||
|
||
#x PULL a8,a9,a10
|
||
|
||
rets
|
||
|
||
***************************************
|
||
* config data
|
||
*
|
||
|
||
#plate .word 176,4,1900H ;X, Y, Z
|
||
.long crplate ;IMG
|
||
.word DMAWNZ|M_SCRNREL ;CTRL
|
||
.word CLSDEAD|CREDITID ;OID
|
||
.long 0,0 ;XVEL, YVEL
|
||
.even
|
||
|
||
#numfont
|
||
.long font60
|
||
.long font61
|
||
.long font62
|
||
.long font63
|
||
.long font64
|
||
.long font65
|
||
.long font66
|
||
.long font67
|
||
.long font68
|
||
.long font69
|
||
|
||
#*****************************************************************************
|
||
* Moves PLT_CLIFE toward PLT_LIFE if it isn't already there.
|
||
* >a0 = PLYRNUM
|
||
|
||
#lifebar_deltavee equ 2 ;pixels per tick of motion
|
||
|
||
SUBRP inc_life
|
||
|
||
;aim a1 at PLT block
|
||
move a0,a1
|
||
X64 a1 ;x by PLT_SIZE
|
||
addi life_data,a1
|
||
|
||
;check the values
|
||
move *a1(PLT_LIFE),a2
|
||
move *a1(PLT_CLIFE),a3
|
||
|
||
cmp a2,a3
|
||
jrz #done
|
||
|
||
;CLIFE is lagging. move it toward LIFE
|
||
jrgt #shrink
|
||
|
||
;CLIFE needs to grow
|
||
addi #lifebar_deltavee,a3
|
||
cmp a3,a2
|
||
jruc #set
|
||
|
||
#shrink
|
||
subi #lifebar_deltavee,a3
|
||
cmp a2,a3
|
||
#set
|
||
jrge #inrange
|
||
|
||
;overshot it
|
||
move a2,a3
|
||
#inrange
|
||
move a3,*a1(PLT_CLIFE)
|
||
|
||
#done
|
||
rets
|
||
|
||
|
||
#*****************************************************************************
|
||
* Flash the background of the life meter for the current player.
|
||
* >a10 = plyrnum
|
||
|
||
danger_snd equ 0b9h
|
||
|
||
SUBRP flash_obj
|
||
|
||
;if we're a drone and we have teammates, ignore this.
|
||
cmpi 1,a10
|
||
jrle #ndie
|
||
|
||
move a10,a1
|
||
calla get_process_ptr
|
||
move *a0(PLYR_SIDE),a4
|
||
movi process_ptrs+40h,a1
|
||
movi NUM_WRES-2,a2
|
||
#lp0 move *a1+,a3,L
|
||
jrz #ndie ;done at first inactive
|
||
cmp a0,a3
|
||
jreq #nxt0 ;skip self
|
||
move *a3(PLYR_SIDE),a14
|
||
cmp a4,a14
|
||
jreq #die ;die--we have a teammate
|
||
#nxt0 dsj a2,#lp0
|
||
|
||
#ndie
|
||
;find the bar obj
|
||
calla arm_comeback_award
|
||
|
||
movi danger_snd,a0
|
||
calla triple_sound
|
||
|
||
;danger music - skip if in 8-on-2 mode
|
||
calla is_8_on_1
|
||
jrc #die
|
||
move @royal_rumble,a14
|
||
jrnz #die
|
||
|
||
movi 18,a3
|
||
move @temp_music,a14
|
||
cmpi 15,a14
|
||
jreq end_music_set
|
||
movk 26,a3
|
||
end_music_set
|
||
calla SNDSND
|
||
|
||
movi danger,a2
|
||
movi [85h,0],a0
|
||
move *a13(PDATA),a1,L
|
||
move *a1(PLYR_SIDE),a1
|
||
jrz #p1
|
||
movi [0e4h,0],a0
|
||
#p1 movi [18h,0],a1
|
||
movi name_z,a3 ;Z
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ
|
||
|
||
movk 20,a9
|
||
#lp
|
||
|
||
move a10,a0
|
||
X32 a0
|
||
addi process_ptrs,a0
|
||
move *a0,a0,L
|
||
|
||
move *a0(CLOSEST_NUM),a14
|
||
X32 a14
|
||
addi process_ptrs,a14
|
||
move *a14,a14,L
|
||
move *a14(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #deldie
|
||
|
||
move *a0(PLYRMODE),a0
|
||
cmpi MODE_DEAD,a0
|
||
jreq #deldie
|
||
|
||
SLEEPK 7
|
||
|
||
movi WSF_R_P,a0
|
||
calla pal_getf
|
||
move a0,*a8(OPAL)
|
||
|
||
SLEEPK 4
|
||
|
||
movi WSF_W_P,a0
|
||
calla pal_getf
|
||
move a0,*a8(OPAL)
|
||
|
||
dsj a9,#lp
|
||
|
||
#deldie calla DELOBJA8
|
||
|
||
#die DIE
|
||
|
||
|
||
|
||
******************************************************************************
|
||
|
||
SUBRP do_win_streaks
|
||
|
||
move @p1winstreak,a0
|
||
jrz #p2
|
||
|
||
callr streak_1
|
||
|
||
#p2 move @p2winstreak,a0
|
||
jrz #x
|
||
|
||
callr streak_2
|
||
|
||
#x
|
||
rets
|
||
|
||
streak_1
|
||
cmpi 99,a0
|
||
jrls #maxok
|
||
movi 99,a0
|
||
#maxok
|
||
calla BINBCD
|
||
|
||
move a0,a9
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #f_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [3dh,0],a0
|
||
movi [23h,0],a1
|
||
movi name_z,a3 ;Z
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ
|
||
MOVE A8,@WINS_OBJ,L
|
||
|
||
srl 4,a9
|
||
sll 32-4,a9
|
||
srl 32-4-5,a9 ;*32
|
||
addi #f_t,a9
|
||
move *a9,a2,L
|
||
movi [36h,0],a0
|
||
movi [23h,0],a1
|
||
calla BEGINOBJ
|
||
MOVE A8,@WINS_OBJ+20H,L
|
||
|
||
TBL_OBJ lwin
|
||
MOVE A8,@WINS_OBJ+40H,L
|
||
rets
|
||
|
||
streak_2
|
||
cmpi 99,a0
|
||
jrls #maxok2
|
||
movi 99,a0
|
||
#maxok2
|
||
calla BINBCD
|
||
|
||
move a0,a9
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #f_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [175h,0],a0
|
||
movi [23h,0],a1
|
||
movi name_z,a3 ;Z
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ
|
||
MOVE A8,@WINS_OBJ,L
|
||
move a8,a10
|
||
|
||
srl 4,a9
|
||
sll 32-4,a9
|
||
srl 32-4-5,a9 ;*32
|
||
addi #f_t,a9
|
||
move *a9,a2,L
|
||
movi [16eh,0],a0
|
||
movi [23h,0],a1
|
||
calla BEGINOBJ
|
||
MOVE A8,@WINS_OBJ+20H,L
|
||
|
||
TBL_OBJ rwin
|
||
MOVE A8,@WINS_OBJ+40H,L
|
||
rets
|
||
|
||
|
||
#f_t
|
||
.long WFONT_0,WFONT_1,WFONT_2,WFONT_3,WFONT_4
|
||
.long WFONT_5,WFONT_6,WFONT_7,WFONT_8,WFONT_9
|
||
|
||
|
||
.ref match_cnt
|
||
|
||
#*****************************************************************************
|
||
*
|
||
|
||
STRUCTPD
|
||
LONG BLINK_PROC
|
||
|
||
announce_match
|
||
|
||
|
||
MOVI CROWD_CHEER_0,A3
|
||
CALLA SNDSND
|
||
|
||
clr a0
|
||
move a0,*a13(BLINK_PROC),L
|
||
|
||
move @PSTATUS,a0
|
||
jrnz #noamode
|
||
clr a0
|
||
move a0,@HALT
|
||
DIE
|
||
|
||
#noamode
|
||
|
||
.if DEBUG
|
||
.ref skip_select
|
||
move @skip_select,a0
|
||
jrz #noskp
|
||
clr a0
|
||
move a0,@HALT
|
||
DIE
|
||
#noskp
|
||
.endif
|
||
|
||
|
||
; SLEEP 28h
|
||
; movi 28h,a10
|
||
; JSRP wait_on_butn
|
||
|
||
movi ram_lst,a11
|
||
clr a0
|
||
movi 39,a1
|
||
#lp move a0,*a11+,L
|
||
dsjs a1,#lp
|
||
movi ram_lst,a11
|
||
|
||
movi [252h,0],a0 ;x pos
|
||
movi [3eh,0],a1 ;y pos
|
||
movi MTCHPLT,a2
|
||
movi MPLTPRPP,b0
|
||
movi 1800h,a3 ;z pos
|
||
callr #begin_obj
|
||
|
||
movi [252h,0],a0 ;x pos
|
||
movi [3eh,0],a1 ;y pos
|
||
movi MNMEPLT,a2
|
||
movi MPLTPRPP,b0
|
||
movi 1800h,a3 ;z pos
|
||
callr #begin_obj
|
||
|
||
movi [574,0],a0 ;x pos
|
||
movi [4Fh,0],a1 ;y pos
|
||
movi MATCH,a2
|
||
movi WGFS_W_P,b0
|
||
movi 1801h,a3 ;z pos
|
||
callr #begin_obj
|
||
MOVE A8,B3
|
||
CLR B4
|
||
CLR B5
|
||
CLR B6
|
||
|
||
move @match_cnt,a0
|
||
|
||
cmpi 999,a0
|
||
jrls #maxok
|
||
movi 999,a0
|
||
#maxok
|
||
calla BINBCD
|
||
|
||
move a0,a9
|
||
move a0,a10
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #f_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [252h,0],a0 ;x pos
|
||
movi [43h,0],a1 ;y pos
|
||
movi WGFS_W_P,b0
|
||
movi 1802h,a3 ;z pos
|
||
callr #begin_obj
|
||
MOVE A8,B4
|
||
|
||
srl 4,a9
|
||
sll 32-4,a9
|
||
srl 32-4-5,a9 ;*32
|
||
move a9,a9
|
||
jrz #ok2
|
||
|
||
addi #f_t,a9
|
||
move *a9,a2,L
|
||
movi [252h,0],a0 ;x pos
|
||
movi [43h,0],a1 ;y pos
|
||
movi WGFS_W_P,b0
|
||
movi 1802h,a3 ;z pos
|
||
callr #begin_obj
|
||
MOVE A8,B5
|
||
|
||
srl 8,a10
|
||
sll 32-4,a10
|
||
srl 32-4-5,a10 ;*32
|
||
move a10,a10
|
||
jrz #ok2
|
||
|
||
addi #f_t,a10
|
||
move *a10,a2,L
|
||
movi [252h,0],a0 ;x pos
|
||
movi [43h,0],a1 ;y pos
|
||
movi WGFS_W_P,b0
|
||
movi 1802h,a3 ;z pos
|
||
callr #begin_obj
|
||
MOVE A8,B6
|
||
|
||
#ok2
|
||
MOVE *B3(OSIZEX),B7
|
||
ADDI 5,B7
|
||
MOVE *B4(OSIZEX),B0
|
||
ADD B0,B7
|
||
ADDK 3,B7
|
||
MOVE B5,B5
|
||
JRZ NO_NEED_TO_ADD_TO_X
|
||
SUBK 3,B7
|
||
MOVE *B5(OSIZEX),B0
|
||
ADD B0,B7
|
||
MOVE B6,B6
|
||
JRZ NO_NEED_TO_ADD_TO_X
|
||
MOVE *B6(OSIZEX),B0
|
||
ADD B0,B7
|
||
|
||
NO_NEED_TO_ADD_TO_X
|
||
SRL 1,B7
|
||
MOVI 252H,B8
|
||
SUB B7,B8
|
||
MOVE B8,*B3(OXPOS)
|
||
ADDI 5,B8
|
||
MOVE B5,B5
|
||
JRNZ NO_EXTRA_SPACE
|
||
ADDK 3,B8
|
||
NO_EXTRA_SPACE
|
||
|
||
MOVE B6,B6
|
||
JRZ NO_NEED_TO_ADD_TO_X2A
|
||
MOVE *B3(OSIZEX),B7
|
||
ADD B7,B8
|
||
MOVE B8,*B6(OXPOS)
|
||
JRUC X2A_ADDED
|
||
|
||
NO_NEED_TO_ADD_TO_X2A
|
||
MOVE B3,B6
|
||
X2A_ADDED
|
||
MOVE B5,B5
|
||
JRZ NO_NEED_TO_ADD_TO_X2B
|
||
MOVE *B6(OSIZEX),B7
|
||
ADD B7,B8
|
||
MOVE B8,*B5(OXPOS)
|
||
JRUC X2B_ADDED
|
||
|
||
NO_NEED_TO_ADD_TO_X2B
|
||
MOVE B3,B5
|
||
X2B_ADDED
|
||
MOVE *B5(OSIZEX),B7
|
||
ADD B7,B8
|
||
MOVE B8,*B4(OXPOS)
|
||
|
||
;Print the text on the little plate
|
||
|
||
;This will be a table lookup which points to match type
|
||
;(Ex. Best 2 of 3, Intercontinental Championship, WWF Championship
|
||
;Lumberjack match, Tag Team Bout, This contest is for 1 fall!, etc.)
|
||
|
||
;Make sure we have enough ram set aside for the largest
|
||
;message possible. (ram_lst)
|
||
|
||
movi [253h,0],a0 ;x pos
|
||
movi [68h,0],a1 ;y pos
|
||
|
||
;set a3 to 1 if this is the final match, 0 otherwise
|
||
clr a3
|
||
calla is_final_match
|
||
jrnc #a3set
|
||
movk 1,a3
|
||
|
||
#a3set movi WHICH_MATCH,a2
|
||
SLL 5,A3
|
||
ADD A3,A2
|
||
MOVE *A2,A2,L
|
||
movi WSF_W_P,b0
|
||
movi 1801h,a3 ;z pos
|
||
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSNEUT|TYPTEXT|SUBMES1,a5
|
||
clr a6 ;x vel
|
||
clr a7 ;y vel
|
||
calla BEGINOBJP
|
||
|
||
|
||
;Place all of the new plates & string characters onto the ram_lst that
|
||
;gets scrolled.
|
||
|
||
movi OBJLST,a14
|
||
movi CLSNEUT|TYPTEXT|SUBTXT,a0
|
||
movi CLSNEUT|TYPTEXT|SUBMES1,a2
|
||
#lp2
|
||
move *a14,a14,L
|
||
jrz #x
|
||
move *a14(OID),a1
|
||
cmp a2,a1
|
||
jrz #add
|
||
cmp a0,a1
|
||
jrne #lp2
|
||
#add move a14,*a11+,L
|
||
jruc #lp2
|
||
#x
|
||
|
||
;This will blink between red/white
|
||
CREATE CYCPID,blink_font
|
||
move a0,*a13(BLINK_PROC),L
|
||
|
||
;Slide everthing onto screen
|
||
|
||
movi >b6,a0
|
||
calla triple_sound
|
||
|
||
movi 20h,a10 ;30
|
||
|
||
#onscr_loop
|
||
|
||
SLEEPK 1
|
||
|
||
movi [200,0],a0
|
||
callr #set_x
|
||
|
||
dsj a10,#onscr_loop
|
||
|
||
calla is_8_on_1
|
||
jrc #skip_do_rounds
|
||
;skip this if this is the final match
|
||
CREATE ANNC_PID,DO_ROUNDS
|
||
#skip_do_rounds
|
||
|
||
;In middle
|
||
CREATE SOUND_PID,ring_bell
|
||
|
||
; SLEEP 20h
|
||
|
||
.ref IKIL1C
|
||
.ref show_options
|
||
|
||
movi PU_CHECK_PID,a0
|
||
calla IKIL1C
|
||
|
||
CREATE0 show_options
|
||
|
||
movi 50h,a10 ;80
|
||
|
||
.ref wait_on_butn
|
||
JSRP wait_on_butn
|
||
|
||
movi >b6,a0
|
||
calla triple_sound
|
||
|
||
movi 16h,a10 ;23
|
||
|
||
#offscr_loop
|
||
|
||
SLEEPK 1
|
||
|
||
movi [0feb0h,0],a0
|
||
callr #set_x
|
||
|
||
dsj a10,#offscr_loop
|
||
|
||
move *a13(BLINK_PROC),a0,L
|
||
calla KILL
|
||
|
||
clr a0
|
||
move a0,@HALT
|
||
|
||
movi CLSNEUT|TYPTEXT|SUBTXT,a0
|
||
calla obj_del1c ;delete text/plates
|
||
|
||
movi CLSNEUT|TYPTEXT|SUBMES1,a0
|
||
calla obj_del1c ;delete text/plates
|
||
|
||
;set round_start_time
|
||
move @PCNT,a14,L
|
||
move a14,@round_start_time,L
|
||
|
||
DIE
|
||
|
||
#f_t
|
||
.long WGSF22_0,WGSF22_1,WGSF22_2,WGSF22_3,WGSF22_4
|
||
.long WGSF22_5,WGSF22_6,WGSF22_7,WGSF22_8,WGSF22_9
|
||
|
||
WHICH_MATCH
|
||
.LONG BESTOF3
|
||
.LONG ROYRUM
|
||
.LONG ELIMMTCH
|
||
.LONG TAGTEAM
|
||
.LONG ONEFALL
|
||
.LONG LUMBMTCH
|
||
|
||
|
||
;#ln0a_setup
|
||
; JAM_STR osgemd_ascii,6,0,247h,43h,BLUE,0
|
||
;
|
||
;#ln0b_setup
|
||
; JAM_STR osgemd_ascii,6,0,23fh,43h,BLUE,0
|
||
;
|
||
;#ln1_setup
|
||
; JAM_STR sgmd8_ascii,5,0,252h,80h-10,SGMD8WHT2,0
|
||
;
|
||
;#ln2_setup
|
||
; JAM_STR sgmd8_ascii,5,0,252h,8bh-10,SGMD8WHT2,0
|
||
;
|
||
;#str_rounds
|
||
; .string "ROUNDS",0
|
||
; .even
|
||
|
||
blink_font
|
||
|
||
SLEEPK 2
|
||
|
||
movi 20,a10
|
||
#top
|
||
movi WSF_R_P,a0
|
||
calla pal_getf
|
||
|
||
movi ram_lst,a11
|
||
#lp3
|
||
move *a11+,a8,L
|
||
jrz #x2
|
||
move *a8(OID),a14
|
||
cmpi CLSNEUT|TYPTEXT|SUBMES1,a14
|
||
jrnz #lp3
|
||
move a0,*a8(OPAL)
|
||
jruc #lp3
|
||
|
||
#x2 SLEEPK 4
|
||
|
||
movi WSF_W_P,a0
|
||
calla pal_getf
|
||
|
||
movi ram_lst,a11
|
||
#lp4
|
||
move *a11+,a8,L
|
||
jrz #x3
|
||
move *a8(OID),a14
|
||
cmpi CLSNEUT|TYPTEXT|SUBMES1,a14
|
||
jrnz #lp4
|
||
move a0,*a8(OPAL)
|
||
jruc #lp4
|
||
|
||
#x3 SLEEPK 7
|
||
|
||
dsj a10,#top
|
||
|
||
announcing_being_done
|
||
DIE
|
||
|
||
******************************************************************************
|
||
|
||
STRUCTPD
|
||
LONG #CREATOR ;UHL proc ptr to whoever created us
|
||
LONG #ORIGIN ;UHL approx address of our create call
|
||
|
||
.if DEBUG
|
||
;doesn't execute -- just here for TV viewing
|
||
move *a13(#CREATOR),a14,L
|
||
move *a13(#ORIGIN),a14,L
|
||
.endif
|
||
|
||
SUBR announce_rnd_winner ;process
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ARW_START,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
|
||
#fini_wait
|
||
move @in_finish_move,a14 ; Are we doing a finishing move ?
|
||
jrz #fini_done ; br = no
|
||
SLEEPK 10
|
||
jruc #fini_wait
|
||
#fini_done
|
||
|
||
movi ANNC_PID,a0
|
||
clr a1
|
||
not a1
|
||
calla EXISTP
|
||
; janz SUCIDE
|
||
jrz #tmpok
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ARW_DEXIST,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
DIE
|
||
|
||
#tmpok
|
||
|
||
move @annc_rnd_winner_done,a14
|
||
jrz #arwd_ok
|
||
.if DEBUG
|
||
;temp! - 314
|
||
DBEVENT BDE_ARW_FLAGDIE,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
DIE
|
||
#arwd_ok
|
||
|
||
;if anyone is trying to do a buckoff, wait for them to finish up.
|
||
#any_b callr anyone_bucking
|
||
TEST a0
|
||
jrz #nobuck
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ARW_ATTEMPT,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
|
||
;Someone's trying to do a buckoff. We'll give them 120 ticks or
|
||
; until someone hits an ANI_LOOP statement, then figure out what
|
||
; to do from there.
|
||
|
||
SLEEP 90 ;NOTE: If someone hits an ANI_LOOP command and
|
||
; their DID_PIN bit is set, they'll check and
|
||
; see if we're sleeping at arw_bwait, and if we
|
||
; are, they'll wake us up right away.
|
||
SUBR arw_bwait
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ARW_WAKEUP,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
|
||
;check for anyone with their NEW_BUCKOFF bit set. If we find any,
|
||
; clear that bit on anyone who's got it set.
|
||
movi process_ptrs,a0
|
||
movi NUM_WRES,a1
|
||
clr a3
|
||
#lp0 move *a0+,a2,L
|
||
jrz #nxt0 ;skip inactive
|
||
move *a2(STATUS_FLAGS),a14,L
|
||
btst B_NEW_BUCKOFF,a14
|
||
jrz #nxt0
|
||
|
||
;got one
|
||
andni M_NEW_BUCKOFF,a14
|
||
move a14,*a2(STATUS_FLAGS),L
|
||
inc a3
|
||
|
||
#nxt0 dsj a1,#lp0
|
||
|
||
;now check for an all-dead condition. If neither team is dead, die.
|
||
calla get_live_bits
|
||
cmpi 3,a0
|
||
jrne #1ded
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ALL_ALIVE,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
jauc SUCIDE
|
||
|
||
#1ded ;1 team is dead. If nobody did a buckoff during our nap, end the
|
||
; round. If someone did, jump up to #any_b, which checks to see
|
||
; if there's any more buckoff candidates.
|
||
TEST a3
|
||
jrnz #any_b
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ARW_NOBUCK,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
|
||
;there was at least one wrestler who could have done a buckoff,
|
||
; but was too slow. For EVERYONE, clear BUCKOFF_COUNT, clear
|
||
; the DO_BUCKOFF flag, and set the NO_BUCKOFF flag.
|
||
movi process_ptrs,a0
|
||
movi NUM_WRES,a1
|
||
clr a3
|
||
#lp6 move *a0+,a2,L
|
||
jrz #nxt6 ;skip inactive
|
||
move a3,*a2(BUCKOFF_COUNT)
|
||
move *a2(STATUS_FLAGS),a14,L
|
||
andni M_DO_BUCKOFF,a14
|
||
ori M_NO_BUCKOFF,a14
|
||
move a14,*a2(STATUS_FLAGS),L
|
||
#nxt6 dsj a1,#lp6
|
||
|
||
|
||
#nobuck
|
||
|
||
;temp! - 314
|
||
.if DEBUG
|
||
DBEVENT BDE_ARW_ENDRND,a13,L,*a13(#CREATOR),L,*a13(#ORIGIN),L
|
||
.endif
|
||
|
||
;set round_end_time
|
||
move @PCNT,a0,L
|
||
move a0,@round_end_time,L
|
||
|
||
;set annc_rnd_winner_done
|
||
movk 1,a14
|
||
move a14,@annc_rnd_winner_done
|
||
|
||
;set EVERYONE'S NO_BUCKOFF flags, just to be safe.
|
||
callr set_all_buckoffs
|
||
|
||
MOVI ZFLIP_FOR_SURE,A0
|
||
MOVE A0,@ZFLIP_POS_VAR,L
|
||
|
||
MOVI CROWD_VICTORY_LOOP,A3
|
||
CALLA SNDSND
|
||
|
||
callr set_winner ;a3 = PLYRNUM of a wrestler on the winning
|
||
; team. The pinner if there is one.
|
||
jrn #do_game_over
|
||
X32 a3
|
||
addi process_ptrs,a3
|
||
move *a3,a10,L
|
||
|
||
move @p1rounds,a0
|
||
cmpi 2,a0
|
||
jrz at_end
|
||
move @p2rounds,a0
|
||
cmpi 2,a0
|
||
jreq at_end
|
||
calla calc_match_time_1
|
||
jruc timer_updated
|
||
|
||
at_end
|
||
;#let_finish_happen
|
||
; move @in_finish_move,a0 ; Did a finish move get started?
|
||
; jrz #no_finish_move ; br = no
|
||
; SLEEPK 1 ; Wait for it to finish
|
||
; jruc #let_finish_happen
|
||
;#no_finish_move
|
||
move @p1rounds,a0
|
||
move @p2rounds,a3
|
||
or a0,a3
|
||
cmpi 2,a3
|
||
jrnz #no_2_rnd_victory
|
||
calla is_8_on_1
|
||
jrc #no_2_rnd_victory
|
||
MATCH_AWARD a10,TWO_RND_AWD
|
||
#no_2_rnd_victory
|
||
calla calc_match_time_2
|
||
|
||
timer_updated
|
||
|
||
callr is_perfect
|
||
jrnc #not_perfect
|
||
MATCH_AWARD a10,PERFECT_AWD
|
||
CREATE ADD_INIT_PID,CREATE_PERFECT
|
||
SLEEP 55+50
|
||
#not_perfect
|
||
;NOT_PERFECT_MATCH
|
||
|
||
;a10=*proc of wrestler who just pinned opponent
|
||
;-not neccesarily: if the win was by disqualification or timeout, there's
|
||
; no pin.
|
||
SLEEPK 30
|
||
|
||
;Place token on top of winner, then have it float up to the top of the screen
|
||
|
||
movi 27,a3
|
||
calla SNDSND
|
||
|
||
move *a10(PLYR_SIDE),a0
|
||
CALLA CALL_MATCH_OVER
|
||
|
||
SLEEPK 20
|
||
|
||
;has anyone won the match?
|
||
move @p1rounds,a0
|
||
cmpi 2,a0
|
||
jrz DO_WAIT
|
||
move @p2rounds,a0
|
||
cmpi 2,a0
|
||
jrnz #go0
|
||
|
||
DO_WAIT
|
||
CLR A0
|
||
MOVE A0,@MUSIC_HAP
|
||
|
||
;Increment his win count
|
||
calla increment_wincount
|
||
|
||
;don't draw the text if this is a royal rumble
|
||
move @royal_rumble,a14
|
||
jrnz #skip_rw
|
||
callr replace_wins
|
||
#skip_rw
|
||
|
||
;wait 1 sec or until a press
|
||
movi TSEC,a9
|
||
#wl0 SLEEPK 1
|
||
calla get_all_buttons_cur2
|
||
jrnz #go0
|
||
dsjs a9,#wl0
|
||
#go0
|
||
|
||
move @p1rounds,a9
|
||
cmpi 2,a9
|
||
jreq #won_match
|
||
move @p2rounds,a14
|
||
cmpi 2,a14
|
||
jreq #won_match
|
||
add a14,a9
|
||
dec a9
|
||
jruc #won_fall
|
||
|
||
#won_match
|
||
movk 2,a9
|
||
#won_fall
|
||
|
||
|
||
; calla is_8_on_1
|
||
; jrnc #no_fireworks
|
||
; move @p1rounds,a0
|
||
; move @p2rounds,a14
|
||
; or a0,a14
|
||
; cmpi 2,a14
|
||
; jrlt #no_fireworks
|
||
; JSRP do_fireworks
|
||
;#no_fireworks
|
||
|
||
move *a10(PLYR_SIDE),a11
|
||
movi 0c4h,a0
|
||
calla triple_sound
|
||
CREATE ANNC_PID,CREATE_END_ROUND_TOP
|
||
SLEEPK 15
|
||
CREATE ANNC_PID,CREATE_END_ROUND_BOT
|
||
SLEEPK 10
|
||
CREATE ANNC_PID,CREATE_END_ROUND_ICON
|
||
SLEEPK 20
|
||
|
||
;Move round awards into match awards section and annunciate round awards for
|
||
;each human player. Then clear out round awards.
|
||
|
||
calla is_it_a_really_quick_win
|
||
calla give_award_if_opponent_is_human
|
||
calla check_for_award_for_big_comeback
|
||
|
||
|
||
calla accumulate_awards ; Accumulate awards for each player
|
||
|
||
CALLA CLEAR_SPEECH_REPEAT
|
||
|
||
move @p1rounds,a0
|
||
cmpi 2,a0
|
||
jrz #end
|
||
move @p2rounds,a0
|
||
cmpi 2,a0
|
||
jrnz #not_end
|
||
|
||
#end
|
||
calla check_for_award_for_winstreak
|
||
clr a0
|
||
move a0,@award_ok_to_die,L
|
||
CREATE AWARD_PID,create_end_rnd_awards
|
||
|
||
CREATE SOUND_PID,DO_RIGHT_MUSIC
|
||
move @royal_rumble,a0
|
||
jrnz #no_award_wait
|
||
#wait_awards_dead
|
||
SLEEPK 1
|
||
move @award_ok_to_die,a0,L
|
||
cmpi 3,a0
|
||
jrlt #wait_awards_dead
|
||
#no_award_wait
|
||
|
||
|
||
|
||
;wait 1 sec or until a press
|
||
movi TSEC*3,a9
|
||
#wl1 SLEEPK 1
|
||
calla get_all_buttons_cur2
|
||
jrnz #go1
|
||
dsjs a9,#wl1
|
||
#go1
|
||
movk 4,a0
|
||
move a0,@award_ok_to_die,L
|
||
|
||
MOVI ANNC_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
|
||
movi 25,a0 ; Tips every 25 consecutive wins
|
||
move @p1winstreak,a1 ; p1 winstreak ?
|
||
jrnz #tip_chk ; br = yes
|
||
#ck_p2
|
||
move @p2winstreak,a1 ; p2 winstreak ?
|
||
jrz #ck_mtch_num ; br = no
|
||
#tip_chk
|
||
modu a0,a1 ; 25 wins?
|
||
jrz #do_tip ; br = yes
|
||
#ck_mtch_num
|
||
movi 100,a0 ; Tips every 100 matches
|
||
move @match_cnt,a1 ; Get match count
|
||
modu a0,a1 ; Time for a tip
|
||
jrnz #no_tip ; br = no
|
||
#do_tip
|
||
CREATE 04000h,show_mk3_tip ; Show a random mk3 tip
|
||
SLEEPK 2
|
||
#no_tip
|
||
|
||
MOVE @MUSIC_HAP,A0
|
||
JRNZ MUSIC_ALREADY_GOING
|
||
CREATE SOUND_PID,DO_RIGHT_MUSIC2
|
||
|
||
MUSIC_ALREADY_GOING
|
||
MOVK 2,A0
|
||
move a0,@match_over
|
||
CALLA KILL_ALL_CHANNELS
|
||
MOVI 4DH,A0
|
||
CALLA triple_sound
|
||
clr a0
|
||
move a0,@HALT
|
||
DIE
|
||
|
||
********
|
||
* Create game over process and die
|
||
|
||
SUBRP #do_game_over
|
||
CREATE0 do_game_over ;it'll set it's own PROCID
|
||
DIE
|
||
|
||
********
|
||
* Play's a wrestler's music
|
||
|
||
SUBRP DO_RIGHT_MUSIC
|
||
SLEEP 55
|
||
SUBRP DO_RIGHT_MUSIC2
|
||
MOVK 1,A0
|
||
MOVE A0,@MUSIC_HAP
|
||
MOVE *A10(WRESTLERNUM),A11
|
||
SLL 4,A11
|
||
ADDI #wrestler_tunes,A11
|
||
MOVE *A11,A3
|
||
calla SNDSND
|
||
DIE
|
||
|
||
#wrestler_tunes
|
||
.word 5,2,1,7,6,4,8,0,3
|
||
|
||
#not_end
|
||
move @royal_rumble,a14
|
||
jrnz #no_run_boxes
|
||
JSRP show_dufus_messages ; Shows run msg (only between rounds)
|
||
#no_run_boxes
|
||
|
||
;wait 105 ticks or until a press
|
||
movi 105,a9
|
||
#wl2 SLEEPK 1
|
||
calla get_all_buttons_cur2
|
||
jrnz #go2
|
||
dsjs a9,#wl2
|
||
#go2 ;Hey! REAL programmers don't use go2's!
|
||
;if the dufus msg boxes are on make sure their
|
||
;on for at least 1 second
|
||
move @dboxes_on,a0,L ; Any dufus msg boxes on?
|
||
jrz #death_ok ; br = no
|
||
cmpi 50,a9 ; Has 1 second passed ?
|
||
jrle #death_ok ; br = yes
|
||
subi 50,a9 ; Give me remainder of 1 second
|
||
#dbox_wait
|
||
SLEEPK 1
|
||
dsjs a9,#dbox_wait
|
||
#death_ok
|
||
movk 1,a0
|
||
move a0,@award_ok_to_die,L
|
||
|
||
MOVI ANNC_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL ;STOP BAR MOTION IF NEED BE
|
||
|
||
MOVE @PSTATUS,A5
|
||
CMPI 3,A5
|
||
JREQ RESET_HUMAN_VS_HUMAN
|
||
|
||
MOVE *A10(PLYRNUM),A3
|
||
CMPI 2,A3
|
||
JRGE RESET_HUMAN_VS_HUMAN
|
||
|
||
NOT A5
|
||
SLL 30,A5
|
||
SRL 30,A5
|
||
DEC A5
|
||
JRUC WRESTLERS_RESET
|
||
|
||
HUMAN_WON_IT
|
||
|
||
RESET_HUMAN_VS_HUMAN
|
||
MOVE *A10(WHOIHIT),A1,L
|
||
MOVE *A1(PLYRNUM),A5
|
||
|
||
WRESTLERS_RESET
|
||
|
||
;Cause wrestlers to re-appear in the correct spot to start the next round.
|
||
|
||
CALLA CLEAR_SPEECH_REPEAT
|
||
|
||
;do new music for the coming round
|
||
MOVE @current_round,A1
|
||
MOVI 16,A3
|
||
CMPI 2,A1
|
||
JREQ NOT_THIRD_MATCH
|
||
MOVI 17,A3
|
||
NOT_THIRD_MATCH
|
||
CALLA SNDSND
|
||
NO_LOWER
|
||
movk 8,a8
|
||
movk 1,a9
|
||
jsrp CLOSE_VERT_SCREEN_LINE
|
||
|
||
MOVI LINES_VERT,A1
|
||
MOVE A1,@WHICH_SCREEN,L
|
||
|
||
movi CLSNEUT|TYPTEXT|SUBMES1,a0
|
||
calla obj_del1c ;delete text/plates
|
||
|
||
movi ZFLIP_POS,a0
|
||
move a0,@ZFLIP_POS_VAR,L
|
||
|
||
calla reset_for_round
|
||
calla reset_for_round2
|
||
|
||
movi TIMER_PID,a0
|
||
movi -1,a1
|
||
calla EXISTP
|
||
jrz dont_update_clock
|
||
pushst
|
||
dint
|
||
push a13
|
||
move a0,a13
|
||
calla update_timer
|
||
movi WGFS_W_P,a0
|
||
calla pal_getf
|
||
move *a13(PDATA+20h),a8,L ;10's image pointer
|
||
move a0,*a8(OPAL)
|
||
move *a13(PDATA),a8,L ;10's image pointer
|
||
move a0,*a8(OPAL)
|
||
pull a13
|
||
popst
|
||
dont_update_clock
|
||
|
||
;Update the meters
|
||
clr a0
|
||
MOVE A0,@DAM_MULT
|
||
callr update_meter
|
||
movk 1,a0
|
||
callr update_meter
|
||
|
||
;reset the scroller position
|
||
calla init_scroller
|
||
|
||
calla INIT_SKIRTS
|
||
|
||
calla BGND_UD1
|
||
|
||
;Now display "round 2" or "round 3"
|
||
|
||
CREATE SOUND_PID,ring_bell
|
||
|
||
movk 1,a0
|
||
move a0,@HALT
|
||
|
||
SLEEPK 1
|
||
calla BGND_UD1
|
||
CREATE SKIRT_PID,CHANGE_SKIRTS2
|
||
|
||
SLEEPK 1
|
||
calla BGND_UD1
|
||
; CREATE SKIRT_PID,CHANGE_SKIRTS2
|
||
|
||
SLEEPK 1
|
||
|
||
|
||
movk 8,a8
|
||
movk 1,a9
|
||
jsrp OPEN_VERT_SCREEN_LINE
|
||
|
||
CREATE ANNC_PID,DO_ROUNDS
|
||
|
||
SLEEP 50
|
||
CALLA VINCE_START_ROUND2_3
|
||
clr a0
|
||
move a0,@HALT
|
||
SLEEP 40
|
||
|
||
movi CLSNEUT|TYPTEXT|SUBMES1,a0
|
||
calla obj_del1c ;delete text/plates
|
||
|
||
movi CLSNEUT|TYPTEXT|SUBTXT,a0
|
||
calla obj_del1c ;delete text/plates
|
||
|
||
clr a0
|
||
move a0,@HALT
|
||
|
||
;reset round_start_time
|
||
move @PCNT,a14,L
|
||
move a14,@round_start_time,L
|
||
|
||
|
||
DIE
|
||
|
||
******************************************************************************
|
||
|
||
SUBRP DO_ROUNDS
|
||
movi [200,0],a0 ;x pos
|
||
movi [255,0],a1 ;y pos
|
||
movi RNDPLAT,a2
|
||
movi RNDPLT_P,b0
|
||
movi 1800h,a3 ;z pos
|
||
callr #begin_obj
|
||
|
||
clr a0
|
||
move a0,*a8(OID)
|
||
|
||
PUSH A8
|
||
|
||
move @current_round,a0
|
||
MOVI RNDNUM_1,A2
|
||
DEC A0
|
||
JRZ #OKAY
|
||
MOVI RNDNUM_2,A2
|
||
DEC A0
|
||
JRZ #OKAY
|
||
MOVI RNDNUM_3,A2
|
||
DEC A0
|
||
JRZ #OKAY
|
||
MOVI RNDNUM_4,A2
|
||
#OKAY
|
||
movi [200,0],a0 ;x pos
|
||
movi [255,0],a1 ;y pos
|
||
movi RNDNUM_P,b0
|
||
movi 1801h,a3 ;z pos
|
||
callr #begin_obj
|
||
|
||
clr a0
|
||
move a0,*a8(OID)
|
||
|
||
PULL A9
|
||
|
||
MOVK 20,A10
|
||
LOOP_ROUNDS_ON
|
||
MOVI [190,0],A0
|
||
CALLR ZIP_ROUNDS_ON
|
||
SLEEPK 1
|
||
DSJS A10,LOOP_ROUNDS_ON
|
||
movk 20,a10
|
||
JSRP wait_on_butn
|
||
MOVK 20,A10
|
||
LOOP_ROUNDS_OFF
|
||
MOVI [300,0],A0
|
||
CALLR ZIP_ROUNDS_ON
|
||
SLEEPK 1
|
||
DSJS A10,LOOP_ROUNDS_OFF
|
||
|
||
calla DELOBJA8
|
||
move a9,a0
|
||
calla DELOBJ
|
||
DIE
|
||
|
||
ZIP_ROUNDS_ON
|
||
move *a8(OYVAL),a1,L
|
||
sub a1,a0
|
||
sra 3,a0
|
||
move *a8(OYVAL),a2,L
|
||
add a0,a2
|
||
move a2,*a8(OYVAL),L
|
||
move *a9(OYVAL),a2,L
|
||
add a0,a2
|
||
move a2,*a9(OYVAL),L
|
||
RETS
|
||
|
||
#set_x
|
||
movi ram_lst,a11
|
||
move *a11,a8,L
|
||
move *a8(OXVAL),a1,L
|
||
sub a1,a0
|
||
sra 3,a0
|
||
#lp5
|
||
move *a11+,a8,L
|
||
jrz #x4
|
||
move *a8(OXVAL),a2,L
|
||
add a0,a2
|
||
move a2,*a8(OXVAL),L
|
||
|
||
jruc #lp5
|
||
#x4
|
||
rets
|
||
|
||
#begin_obj
|
||
|
||
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
||
movi CLSNEUT|TYPTEXT|SUBTXT,a5
|
||
clr a6 ;x vel
|
||
clr a7 ;y vel
|
||
calla BEGINOBJP
|
||
rets
|
||
|
||
blink_text
|
||
SLEEPK 10
|
||
#lp1
|
||
movi SGMD8RED2,a0
|
||
calla pal_getf
|
||
move a0,*a8(OPAL)
|
||
SLEEPK 4
|
||
movi SGMD8WHT2,a0
|
||
calla pal_getf
|
||
move a0,*a8(OPAL)
|
||
SLEEPK 7
|
||
jruc #lp1
|
||
|
||
*******************************************************************************
|
||
|
||
SUBR FIRSTATT_MESS
|
||
|
||
move a10,a0
|
||
movi FIRSTATT,a8
|
||
move *a0(PLYR_SIDE),a9
|
||
clr a10
|
||
pushp a10
|
||
movi 1801h,a11
|
||
|
||
jruc #common
|
||
|
||
SUBR BONUS_MESS
|
||
|
||
;Process which displays high risk - 2x damage & possibly move name
|
||
;This comes in from Secret button moves
|
||
;A8=* plyr proc of who fired off the move
|
||
;A10=# of move message
|
||
;Messages display the first time only
|
||
|
||
clr a14
|
||
move a10,a10 ;No message
|
||
jrz #already
|
||
jrnn #reg
|
||
|
||
#tag
|
||
;Taunt style high risk move - give 3x dmg
|
||
PUSHP a14
|
||
|
||
; movk 3,a1
|
||
; move a1,@DAM_MULT
|
||
|
||
RND_AWARD a8,HIGH_RISK_AWD ; give award for high risk
|
||
|
||
move *a8(PLYR_SIDE),a9
|
||
MOVI HIGHRISK,A8
|
||
CLR A10
|
||
MOVI 1801H,A11
|
||
|
||
CREATE0 MAYBE_HIGH_RISK
|
||
|
||
callr is_there_one_already
|
||
jrnz #exit
|
||
|
||
CREATE MESSAGE_PID,SPECIAL_MESSAGE
|
||
|
||
MOVI 0BBH,A0 ;Guitar snd
|
||
CALLA triple_sound
|
||
|
||
SLEEP 50
|
||
|
||
movk 4,a10
|
||
jruc #inhere
|
||
#reg
|
||
|
||
move *a8(RISK),a1
|
||
btst 15,a1
|
||
;Taunt style high risk move - give 3x dmg
|
||
jrnz #tag
|
||
|
||
|
||
|
||
move a10,a3
|
||
movi message_flag,a2
|
||
cmpi 32,a3
|
||
jrlt normal_thing2
|
||
addi 32,a2
|
||
subi 32,a3
|
||
normal_thing2
|
||
move *a2,a0,L
|
||
btst a3,a0
|
||
jrnz #already
|
||
;Set the bit which says I've been displayed already!
|
||
movk 1,a1
|
||
sll a3,a1
|
||
or a1,a0
|
||
move a0,*a2,L
|
||
|
||
sll 5,a10
|
||
addi #message_tbl,a10
|
||
move *a10,a14,L
|
||
#already
|
||
PUSHP a14
|
||
|
||
|
||
; movk 2,a1
|
||
; move *a8(RISK),a14
|
||
; btst 15,a14
|
||
; jrz #reg2
|
||
;
|
||
;;Taunt style high risk move - give 3x dmg
|
||
; movk 4,a1
|
||
;#reg2 move a1,@DAM_MULT
|
||
|
||
movk 2,a1
|
||
move a1,@DAM_MULT
|
||
|
||
RND_AWARD a8,HIGH_RISK_AWD ; give award for high risk
|
||
|
||
move *a8(PLYR_SIDE),a9
|
||
MOVI HIGHRISK,A8
|
||
CLR A10
|
||
MOVI 1801H,A11
|
||
|
||
CREATE0 MAYBE_HIGH_RISK
|
||
|
||
#common
|
||
callr is_there_one_already
|
||
jrnz #exit
|
||
|
||
CREATE MESSAGE_PID,SPECIAL_MESSAGE
|
||
|
||
MOVI 0BBH,A0 ;Guitar snd
|
||
CALLA triple_sound
|
||
|
||
SLEEP 50
|
||
|
||
movk 2,a10
|
||
#inhere MOVI xDAMAGE,A8
|
||
MOVI 1803H,A11
|
||
|
||
CREATE MESSAGE_PID,SPECIAL_MESSAGE
|
||
|
||
;Wait for 2x to leave
|
||
;Try to print correct move name
|
||
SLEEP 50
|
||
|
||
;Get back message img addr to display
|
||
PULLP a8
|
||
jaz SUCIDE
|
||
|
||
callr DO_THIS_MESS
|
||
DIE
|
||
|
||
SUBRP is_there_one_already
|
||
MOVE A9,A1
|
||
NOT A1
|
||
SLL 31,A1
|
||
SRL 31-4,A1
|
||
ADDI MESSAGE_FLAGS,A1
|
||
MOVE *A1,A0
|
||
rets
|
||
|
||
SET_MESS_FLAGS
|
||
MOVE A9,A1
|
||
NOT A1
|
||
SLL 31,A1
|
||
SRL 31-4,A1
|
||
ADDI MESSAGE_FLAGS,A1
|
||
MOVE A0,*A1
|
||
RETS
|
||
|
||
*******************************************************************************
|
||
|
||
SUBR MOVE_NAME_ANNC
|
||
|
||
;Process which displays move name
|
||
;This comes in from actual script - like a hip toss announce
|
||
;A8=* plyr proc of who fired off the move
|
||
;A10=# of move message
|
||
;Messages display the first time only
|
||
|
||
cmpi 41,a10
|
||
jrz #skip
|
||
|
||
move @reduce_bog,a14
|
||
jrnz #exit
|
||
#skip
|
||
move *a8(PLYR_SIDE),a9
|
||
|
||
callr is_there_one_already
|
||
jrnz #exit
|
||
|
||
move a10,a3
|
||
movi message_flag,a2
|
||
cmpi 32,a3
|
||
jrlt normal_thing
|
||
addi 32,a2
|
||
subi 32,a3
|
||
cmpi 9,a3
|
||
jrz #cont
|
||
normal_thing
|
||
move *a2,a0,L
|
||
btst a3,a0
|
||
jrnz #exit
|
||
;Set the bit which says I've been displayed already!
|
||
movk 1,a1
|
||
sll a3,a1
|
||
or a1,a0
|
||
move a0,*a2,L
|
||
#cont
|
||
sll 5,a10
|
||
addi #message_tbl,a10
|
||
move *a10,a8,L
|
||
|
||
callr DO_THIS_MESS
|
||
|
||
#exit
|
||
DIE
|
||
|
||
;Add new move img names here:
|
||
#message_tbl
|
||
.long 0 ;0 = Blank
|
||
.long HEADSLAM ;1
|
||
.long 0 ;2
|
||
.long SNAPMIRR ;3
|
||
.long FRANKEN ;4 *
|
||
.long BACKBRKR ;5
|
||
.long BODYSLAM ;6
|
||
.long PILEDRV ;7
|
||
.long FIRSTATT ;8 ; saved for Jason
|
||
.long ARMBREAK ;9 *
|
||
.long ARMDRAG ;10 * ;RAZOR & HART HIP TOSS
|
||
.long BACKDROP ;11 * ;BAM BAM HIP TOSS
|
||
.long BACKSUPL ;12 * ;SHAWN MICHEALS
|
||
.long BANZAI ;13 *
|
||
.long BEHMBUTT ;14 * ;BAM BAM RUNNING BUTT DROP
|
||
.long CROSFIRE ;15 *
|
||
.long DDT ;16 *
|
||
.long DOBLSNAP ;17 * ;SHAWN KICK
|
||
.long ELBOWDRP ;18 ;EVERYBODY MOSTLY
|
||
.long EYERAKER ;19 *
|
||
.long FACESLAM ;20 *
|
||
.long FIRESPL ;21 * ;BAM BAM OFF TURNBUCKLES
|
||
.long CLAPPER ;22 * ;DOINK
|
||
.long FLYBUTT ;23 ?
|
||
.long FLYCLOTH ;24 *
|
||
.long HAMMER ;25 *
|
||
.long HIPTOSS ;26 * ;LEX YOKO
|
||
.long BIGBOOT ;27 * ;EVERYBODY
|
||
.long JOYBUZZ ;28 *
|
||
.long MYSTGLVE ;29 ;
|
||
.long NAPALM ;30 ;
|
||
.long POGOPILE ;31 *
|
||
.long RAPIDRND ;32 *
|
||
.long RAZOREDG ;33 *
|
||
.long SCISSOR ;34 * ;YOKO
|
||
.long SKULLCRK ;35 *
|
||
.long SLMONKEY ;36 *
|
||
.long SPEEDKIK ;37 *
|
||
.long SPLASH ;38 ;BAMBAM TURNBUCKLE DROP, EVENTUALLY
|
||
.long SUNSETFL ;39 * ;SHAWN FLIP
|
||
.long TOMBPLDR ;40 *
|
||
.long SECWND09 ;41
|
||
.long VERTSUPL ;42 * ;YOKO LEX
|
||
|
||
*******************************************************************************
|
||
|
||
DO_THIS_MESS
|
||
;a8=*message to print
|
||
;a9=0 or 1
|
||
|
||
;if this is the second wind message, skip the permission check
|
||
cmpi SECWND09,a8
|
||
jreq #skip_perm_check
|
||
|
||
;no messages in no-bog mode?
|
||
move @no_debris,a14
|
||
jrnz NO_MORE_MESS
|
||
|
||
move a9,a0
|
||
sll 5,a0
|
||
addi p1powerup_request,a0
|
||
move *a0,a0,L
|
||
btst MOVE_NAMES_ON_BIT,a0
|
||
jrz NO_MORE_MESS
|
||
#skip_perm_check
|
||
|
||
;Don't allow overlaps!
|
||
CLR A10
|
||
|
||
MOVI 1805H,A11 ;1801
|
||
|
||
CREATE MESSAGE_PID,SPECIAL_MESSAGE
|
||
|
||
MOVI 0BBH,A0 ;Move name annc snd
|
||
CALLA triple_sound
|
||
|
||
NO_MORE_MESS
|
||
RETS
|
||
|
||
|
||
*******************************************************************************
|
||
|
||
SUBR DO_REVERSAL_MESS
|
||
RND_AWARD a8,REVERSAL_AWD ; give award for reversal
|
||
movi 15Ch,a0
|
||
calla ADD_VOICE
|
||
|
||
move *a8(PLYR_SIDE),a9
|
||
CREATE MESSAGE_PID,CREATE_REVERSAL_MESS
|
||
RETS
|
||
|
||
SUBRP CREATE_REVERSAL_MESS ;process
|
||
|
||
callr is_there_one_already
|
||
jrnz exit_reversal
|
||
|
||
MOVI REVERS,A8
|
||
CLR A10
|
||
MOVI 1801H,A11
|
||
|
||
CREATE MESSAGE_PID,SPECIAL_MESSAGE
|
||
|
||
MOVI 0BBH,A0
|
||
CALLA triple_sound
|
||
|
||
exit_reversal
|
||
DIE
|
||
|
||
#****************************************************************************
|
||
* Returns process ptr to first wrestler we can find who's trying a buckoff.
|
||
|
||
SUBR anyone_bucking
|
||
|
||
;no buckoffs allowed in royal rumble mode
|
||
move @royal_rumble,a14
|
||
jrnz #no
|
||
|
||
movi process_ptrs,a0
|
||
movi NUM_WRES,a1
|
||
#lp move *a0+,a2,L
|
||
jrz #nxt
|
||
move *a2(STATUS_FLAGS),a14,L
|
||
btst B_DO_BUCKOFF,a14
|
||
jrz #nxt
|
||
btst B_NEW_BUCKOFF,a14
|
||
jrnz #yes
|
||
btst B_DID_BUCKOFF,a14
|
||
jrnz #nxt
|
||
#yes move a2,a0
|
||
rets
|
||
|
||
#nxt dsj a1,#lp
|
||
#no clr a0
|
||
rets
|
||
|
||
#****************************************************************************
|
||
* Sets everyone's NO_BUCKOFF flag.
|
||
|
||
SUBRP set_all_buckoffs
|
||
|
||
movi process_ptrs,a0
|
||
movi NUM_WRES,a1
|
||
#lp move *a0+,a2,L
|
||
jrz #nxt
|
||
move *a2(STATUS_FLAGS),a14
|
||
ori M_NO_BUCKOFF,a14
|
||
move a14,*a2(STATUS_FLAGS)
|
||
#nxt dsj a1,#lp
|
||
rets
|
||
|
||
#****************************************************************************
|
||
*
|
||
* Returns carry set if everyone on winning team is unharmed.
|
||
* Exception: Never returns C if final match.
|
||
*
|
||
* >a10 = proc of a wrestler on the winning team (anyone will do)
|
||
*
|
||
|
||
SUBRP is_perfect
|
||
|
||
calla is_8_on_1
|
||
jrc #final
|
||
|
||
PUSH a2,a3,a4,a5
|
||
|
||
move *a10(PLYR_SIDE),a5
|
||
movi NUM_WRES,a2
|
||
movi process_ptrs,a3
|
||
|
||
#lp move *a3+,a4,L
|
||
jrz #nxt ;skip inactive
|
||
|
||
move *a4(PLYR_SIDE),a14
|
||
cmp a5,a14
|
||
jrne #nxt ;skip enemies
|
||
|
||
move *a4(PLYRNUM),a1
|
||
callr get_health
|
||
cmpi LIFE_MAX,a0
|
||
jreq #nxt ;okay - unharmed
|
||
|
||
;injured guy found. return !c
|
||
PULL a2,a3,a4,a5
|
||
#final clrc
|
||
rets
|
||
|
||
#nxt dsj a2,#lp
|
||
|
||
;no injured teammates found. return c
|
||
PULL a2,a3,a4,a5
|
||
setc
|
||
rets
|
||
|
||
#*****************************************************************************
|
||
|
||
SUBR DO_COMBO_MESS
|
||
|
||
;Combo messages come from the scripts
|
||
|
||
MOVE @combo_audit_done,A0
|
||
JRNZ YES_WE_HAVE
|
||
movi AUD_COMBO,A0
|
||
calla AUD1
|
||
MOVK 1,A0
|
||
MOVE A0,@combo_audit_done
|
||
YES_WE_HAVE
|
||
|
||
;if our combo_broken bit is set, blow out of here altogether.
|
||
; We audit it, but we don't adjust the bar or display any kind of
|
||
; message.
|
||
move *a13(STATUS_FLAGS),a14,L
|
||
btst B_COMBO_BROKEN,a14
|
||
jrnz #rets
|
||
|
||
MOVE *A13(PLYRNUM),A9
|
||
MOVI HITCOMBO,A8
|
||
MOVE *A13(COMBO_COUNT),A10
|
||
DEC A10
|
||
;We need to announce even the lowly combos
|
||
;How can you have a combo of 1 ?????
|
||
CMPI 2,A10
|
||
JRLT NO_MESSAGE
|
||
|
||
|
||
cmpi 10,a10
|
||
jrlt #award_reg_combo
|
||
RND_AWARD a13,UCOMBOS_AWD
|
||
jruc #combo_awd_done
|
||
#award_reg_combo
|
||
RND_AWARD a13,COMBOS_AWD ; give award for combo started
|
||
#combo_awd_done
|
||
|
||
MOVI 0BAH,A0 ;0BAH humbug!
|
||
CALLA triple_sound
|
||
|
||
MOVI 01A4H,A0 ;INCREDIBLE COMBINATION MOVE !
|
||
CALLA ADD_VOICE
|
||
|
||
;Add a couple for a better appearance!
|
||
CMPI 5,A10
|
||
JRLE NO_MIGHT_BE_OBVIOUS
|
||
addk 2,a10
|
||
NO_MIGHT_BE_OBVIOUS
|
||
|
||
MOVI 1803H,A11
|
||
|
||
move *a13(PLYR_SIDE),a9
|
||
|
||
;Don't allow combo message to come out if other message there...
|
||
callr is_there_one_already
|
||
jrnz NO_MESSAGE
|
||
|
||
CREATE MESSAGE_PID,SPECIAL_MESSAGE
|
||
|
||
NO_MESSAGE
|
||
|
||
;HACK ALERT: In royal rumble, the two human players share one combo
|
||
; meter. This means that if player 1 (on the right) calls this,
|
||
; we clear HIS combo count but we zero his TEAMMATES bar.
|
||
; Confusing, eh?
|
||
|
||
CLR A0
|
||
MOVE A0,*A13(COMBO_START)
|
||
|
||
move *a13(PLYR_SIDE),a1
|
||
move *a13(PLYRNUM),a11
|
||
|
||
cmpi 1,a11
|
||
jrne #norum
|
||
move @royal_rumble,a14
|
||
jrz #norum
|
||
|
||
;pretend we're player 0
|
||
clr a1 ;side
|
||
clr a11 ;PLYRNUM
|
||
|
||
|
||
;clear_combo_meter jumps here!
|
||
SUBRP zero_combo_meter
|
||
|
||
#norum movi MD_SIZE,a9
|
||
mpyu a1,a9
|
||
addi meter_data,a9
|
||
MOVE *A9(MD_COMBO),A8,L
|
||
move a11,a5
|
||
X64 a5 ;x by PLT_SIZE
|
||
ADDI life_data,A5
|
||
CLR A2
|
||
|
||
;halve_combo_meter jumps here!
|
||
SUBRP draw_combo_meter
|
||
|
||
MOVE A2,*A5(PLT_COMBO_SIZE)
|
||
SLL 5,A2
|
||
ADDI WHICH_SIZE_BAR,A2
|
||
MOVE *A2,A0,L
|
||
move *a0(IANIOFF),*A8(ODOFF),L
|
||
move *a0(ISAG),*a8(OSAG),L
|
||
MOVE *A0(ISIZEX),*A8(OSIZE),L
|
||
|
||
PUSH A0,a1
|
||
MOVE A1,A0
|
||
SLL 4,A0
|
||
ADDI COMBO_FLASH_FLAG,A0
|
||
CLR A2
|
||
MOVE A2,*A0
|
||
|
||
ADDI FLASH_COMBO_PID,A1
|
||
MOVE A1,A0
|
||
MOVI -1,A1
|
||
CALLA KILALL
|
||
PULL A0,a1
|
||
|
||
;get the flip right
|
||
sll B_FLIPH,a1
|
||
move *a0(ICTRL),a14
|
||
or a1,a14
|
||
ori 8000H|DMAWNZ,a14
|
||
move a14,*a8(OCTRL)
|
||
|
||
MOVI SUPER_P,A0
|
||
CALLA pal_getf
|
||
MOVE A0,*A8(OPAL)
|
||
|
||
NO_GO_AWAY
|
||
#rets RETS
|
||
|
||
*******************************************************************************
|
||
*
|
||
|
||
SUBRP SPECIAL_MESSAGE
|
||
|
||
ZIP_SPEED .EQU 18H
|
||
BUFF .EQU 25
|
||
|
||
;A8=IMAGE TO PLACE UP
|
||
;A9=WHICH SIDE (1 OR 2)
|
||
;A10=NUMBER OF BONUS MULTIPLIER 2-5 (IF NECESSARY)
|
||
;A11=ZPOS TO PLACE BLOCK (SO DAMAGE x GOES OVER OTHER)
|
||
|
||
MOVK 1,A0
|
||
CALLR SET_MESS_FLAGS
|
||
PUSHP A9
|
||
|
||
NOT A9
|
||
SLL 31,A9
|
||
SRL 31,A9
|
||
|
||
MOVI 10H,A0 ;Whoosh
|
||
CALLA triple_sound
|
||
|
||
MOVE A11,B5
|
||
CLR A11
|
||
MOVE A8,A2
|
||
MOVE *A2(ISIZEX),A3
|
||
CMPI xDAMAGE,A2
|
||
JREQ SPECIAL_CASE_THIS
|
||
CMPI HITCOMBO,A2
|
||
JRNE ONLY_THIS_SIZE
|
||
SPECIAL_CASE_THIS
|
||
ADDI 19,A3
|
||
MOVE A10,A0
|
||
CALLA BINBCD
|
||
MOVE A0,A10
|
||
MOVE A10,A11
|
||
SRL 4,A11
|
||
JRZ ONLY_THIS_SIZE
|
||
MOVI HITCOMBO2,A2
|
||
ADDI 21,A3
|
||
CMPI 1,A11
|
||
JRNE ONLY_THIS_SIZE
|
||
SUBI 4,A3
|
||
ONLY_THIS_SIZE
|
||
MOVI TYPE_MESS2,A5
|
||
ADDI BUFF*2,A3
|
||
MOVI 410,A0
|
||
MOVE A0,A7
|
||
SUB A3,A7
|
||
SLL 16,A7
|
||
DEC A9
|
||
JRNZ WE_SET_XPOS
|
||
MOVI TYPE_MESS1,A5
|
||
MOVE A3,A0
|
||
NEG A0
|
||
MOVI [BUFF,0],A7
|
||
ADDK BUFF,A0
|
||
WE_SET_XPOS
|
||
SLL 16,A0
|
||
MOVE A0,*A13(PDATA+120H),L
|
||
MOVE A7,*A13(PDATA+100H),L
|
||
MOVI [230+4,0],A1
|
||
MOVE B5,A3
|
||
ADDK 1,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
|
||
CLR A6
|
||
CLR A7
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9,A10
|
||
calla BEGINOBJ
|
||
|
||
|
||
move *a8(OIMG),a0,L
|
||
cmpi SECWND09,a0
|
||
jrnz #nospec
|
||
;We need to animate this second wind message
|
||
|
||
CREATE0 flash_2ndwind
|
||
#nospec
|
||
|
||
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9,A10
|
||
PUSH A8
|
||
|
||
MOVI WHICH_BONUS_2,A14
|
||
CMPI xDAMAGE,A2
|
||
JREQ WE_HAVE_NUMBERS
|
||
CMPI HITCOMBO,A2
|
||
JREQ WE_HAVE_NUMBERS
|
||
MOVI WHICH_BONUS_1,A14
|
||
CMPI HITCOMBO2,A2
|
||
JRNE NO_NEED_FOR_THIRD_OBJ
|
||
WE_HAVE_NUMBERS
|
||
SLL 32-4,A10
|
||
SRL 32-4-5,A10 ;*32
|
||
ADD A14,A10
|
||
MOVE *A10,A2,L
|
||
MMTM SP,A0,A1,A3,A4,A5,A6,A7,A11
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A3,A4,A5,A6,A7,A11
|
||
MOVE A8,A10
|
||
|
||
MOVE A11,A7
|
||
SLL 32-4,A7
|
||
JRZ NO_NEED_FOR_THIRD_OBJ
|
||
SRL 32-4-5,A7 ;*32
|
||
ADDI WHICH_BONUS_2,A7
|
||
MOVE *A7,A2,L
|
||
CLR A7
|
||
MMTM SP,A0,A1,A5,A6,A7
|
||
CMPI 1,A11
|
||
JRNE NO_REPOS_THIS_NUM
|
||
ADDI [4,0],A0
|
||
NO_REPOS_THIS_NUM
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A5,A6,A7
|
||
MOVE A8,A11
|
||
NO_NEED_FOR_THIRD_OBJ
|
||
|
||
MOVE *A8(OSIZEX),A2
|
||
MOVI 395,A3
|
||
SUB A2,A3
|
||
SUBI BUFF,A3
|
||
SLL 16,A0
|
||
SUB A3,A0
|
||
MOVI MVEBAR_B,A2
|
||
movi DMAWNZ|M_FLIPH|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVE A9,A9
|
||
JRZ BAR_SET
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVI MVEBAR_R,A2
|
||
MOVE *A8(OXVAL),A0,L
|
||
SUBI [BUFF,0],A0
|
||
BAR_SET
|
||
MOVE B5,A3
|
||
calla BEGINOBJ
|
||
MOVE A8,A9
|
||
PULL A8
|
||
|
||
MOVI ZIP_SPEED,A3
|
||
MOVE_IT_ON
|
||
MOVE *A13(PDATA+100H),A0,L
|
||
CALLR MOVE_BARS
|
||
PUSHP A3
|
||
SLEEPK 1
|
||
PULLP A3
|
||
DSJS A3,MOVE_IT_ON
|
||
|
||
SLEEP 50
|
||
|
||
MOVI ZIP_SPEED,A3
|
||
MOVE_IT_OFF
|
||
MOVE *A13(PDATA+120H),A0,L
|
||
SLA 1,A0
|
||
CALLR MOVE_BARS
|
||
PUSHP A3
|
||
SLEEPK 1
|
||
PULLP A3
|
||
DSJS A3,MOVE_IT_OFF
|
||
|
||
CALLA DELOBJA8
|
||
MOVE A9,A8
|
||
CALLA DELOBJA8
|
||
MOVE A10,A8
|
||
JRZ NO_A10_3
|
||
CALLA DELOBJA8
|
||
NO_A10_3
|
||
MOVE A11,A8
|
||
JRZ NO_A11_3
|
||
CALLA DELOBJA8
|
||
NO_A11_3
|
||
PULLP A9
|
||
CLR A0
|
||
CALLR SET_MESS_FLAGS
|
||
|
||
DIE
|
||
|
||
MOVE_BARS
|
||
PUSH A8
|
||
MOVE *A8(OXVAL),A1,L
|
||
SUB A1,A0
|
||
SRA 3,A0
|
||
|
||
CALLR MOVE_THIS_PART
|
||
MOVE A9,A8
|
||
JRZ NO_A11_PART
|
||
CALLR MOVE_THIS_PART
|
||
MOVE A10,A8
|
||
JRZ NO_A10_PART
|
||
CALLR MOVE_THIS_PART
|
||
NO_A10_PART
|
||
MOVE A11,A8
|
||
JRZ NO_A11_PART
|
||
CALLR MOVE_THIS_PART
|
||
NO_A11_PART
|
||
PULL A8
|
||
RETS
|
||
|
||
MOVE_THIS_PART
|
||
MOVE *A8(OXVAL),A2,L
|
||
ADD A0,A2
|
||
MOVE A2,*A8(OXVAL),L
|
||
RETS
|
||
|
||
WHICH_BONUS_2
|
||
.LONG X0X,X1X,X2X
|
||
.LONG X3X,X4X,X5X
|
||
.LONG X6X,X7X,X8X
|
||
.LONG X9X
|
||
|
||
WHICH_BONUS_1
|
||
.LONG X0X2,X1X2,X2X2
|
||
.LONG X3X2,X4X2,X5X2
|
||
.LONG X6X2,X7X2,X8X2
|
||
.LONG X9X2
|
||
|
||
Z_FORWARD .EQU 1800H
|
||
|
||
SUBR SHIFT_BARS_IN_Z
|
||
CLR A0
|
||
MOVE A0,@LAST_FLIP
|
||
SHIFT_BARS_IN_Z_MOTION
|
||
MOVE @WORLDTLY,A0,L
|
||
MOVE @ZFLIP_POS_VAR,A1,L
|
||
CMP A1,A0
|
||
JRLT CHECK_IF_WE_ALREADY_FLIPPED_BACK
|
||
|
||
MOVE @LAST_FLIP,A0
|
||
JRNZ YES_WE_DID
|
||
MOVK 1,A0
|
||
MOVE A0,@LAST_FLIP
|
||
CALLR SHIFT_BARS_FORWARD
|
||
SLOOP 4,SHIFT_BARS_IN_Z_MOTION
|
||
|
||
CHECK_IF_WE_ALREADY_FLIPPED_BACK
|
||
MOVE @LAST_FLIP,A0
|
||
JRZ YES_WE_DID
|
||
CLR A0
|
||
MOVE A0,@LAST_FLIP
|
||
CALLR SHIFT_BARS_BACK
|
||
YES_WE_DID
|
||
SLOOP 4,SHIFT_BARS_IN_Z_MOTION
|
||
|
||
SHIFT_BARS_FORWARD
|
||
movi OBJLST,a8
|
||
movi bak_z,A2
|
||
movi name_z,A3
|
||
movi Z_FORWARD,A4
|
||
JRUC DONT_SHIFT_IT_FORWARD
|
||
STILL_MORE_TO_CHECK
|
||
MOVE *A8(OZPOS),A1
|
||
CMP a2,A1
|
||
JRLT DONT_SHIFT_IT_FORWARD
|
||
CMP a3,A1
|
||
JRGT DONT_SHIFT_IT_FORWARD
|
||
SHIFT_IT_FORWARD
|
||
ADD a4,A1
|
||
MOVE A1,*A8(OZPOS)
|
||
DONT_SHIFT_IT_FORWARD
|
||
MOVE *A8,A8,L
|
||
JRNZ STILL_MORE_TO_CHECK
|
||
RETS
|
||
|
||
SHIFT_BARS_BACK
|
||
movi OBJLST,a8
|
||
movi bak_z+Z_FORWARD,A2
|
||
movi name_z+Z_FORWARD,A3
|
||
movi Z_FORWARD,A4
|
||
JRUC DONT_SHIFT_IT_BACK
|
||
STILL_MORE_TO_CHECK_B
|
||
MOVE *A8(OZPOS),A1
|
||
CMP a2,A1
|
||
JRLT DONT_SHIFT_IT_BACK
|
||
CMP a3,A1
|
||
JRGT DONT_SHIFT_IT_BACK
|
||
SHIFT_IT_BACK
|
||
SUB a4,A1
|
||
MOVE A1,*A8(OZPOS)
|
||
DONT_SHIFT_IT_BACK
|
||
MOVE *A8,A8,L
|
||
JRNZ STILL_MORE_TO_CHECK_B
|
||
RETS
|
||
|
||
END_BUFF .equ 10
|
||
END_POS .EQU 30
|
||
END_YPOS .EQU 80
|
||
TURM_OFF .EQU 4
|
||
|
||
WHICH_ROUND
|
||
.LONG FIRSTFAL,SECNDFAL,MATCHFAL
|
||
|
||
CREATE_END_ROUND_TOP
|
||
SLL 5,A9
|
||
ADDI WHICH_ROUND,A9
|
||
MOVE *A9,A2,L
|
||
|
||
CLR A1
|
||
MOVE A1,*A13(PDATA+140),L
|
||
|
||
MOVI [END_POS+150+TURM_OFF,0],A1
|
||
MOVI [400+END_BUFF+150+TURM_OFF,0],A0
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVE A11,A11
|
||
JRNZ WHICH_TEXT_SET
|
||
MOVI [400-END_POS-150,0],A1
|
||
MOVI [0-END_BUFF-150,0],A0
|
||
WHICH_TEXT_SET
|
||
MOVE A1,*A13(PDATA+100H),L
|
||
MOVI [END_YPOS,0],A1
|
||
MOVI 1803H,A3
|
||
MOVI CLSNEUT|TYPTEXT|SUBMES1,A5
|
||
CLR A6
|
||
CLR A7
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
|
||
MOVE A8,A9
|
||
|
||
MOVI [END_POS+TURM_OFF,0],A1
|
||
MOVI [400+END_BUFF+TURM_OFF,0],A0
|
||
MOVI MVEBAR_R,A2
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVE A11,A11
|
||
JRNZ WHICH_BAR_SET
|
||
MOVI [400-END_POS,0],A1
|
||
MOVI [0-END_BUFF,0],A0
|
||
movi DMAWNZ|M_FLIPH|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVI MVEBAR_B,A2
|
||
WHICH_BAR_SET
|
||
MOVE A1,*A13(PDATA+120H),L
|
||
MOVI [END_YPOS,0],A1
|
||
MOVI 1800H,A3
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
CLR A0
|
||
MOVE A0,*A13(PDATA+140H),L
|
||
JSRP ZIP_HIM_ON
|
||
DIE
|
||
|
||
WHICH_WRESTLE_NAME
|
||
.LONG BIGHRT
|
||
.LONG BIGRAZ
|
||
.LONG BIGUND
|
||
.LONG BIGYOK
|
||
.LONG BIGSHN
|
||
.LONG BIGBAM
|
||
.LONG BIGDNK
|
||
.LONG 0
|
||
.LONG BIGLEX
|
||
|
||
CREATE_END_ROUND_BOT
|
||
MOVE *A10(WRESTLERNUM),A2
|
||
SLL 5,A2
|
||
ADDI WHICH_WRESTLE_NAME,A2
|
||
MOVE *A2,A2,L
|
||
|
||
MOVI [END_POS+150+TURM_OFF,0],A1
|
||
MOVI [400+END_BUFF+150+TURM_OFF,0],A0
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVE A11,A11
|
||
JRNZ ON_LEFT
|
||
MOVI [400-END_POS-150,0],A1
|
||
MOVI [0-END_BUFF-150,0],A0
|
||
ON_LEFT
|
||
MOVE A1,*A13(PDATA+100H),L
|
||
MOVI [END_YPOS+25,0],A1
|
||
MOVI 1802H,A3
|
||
MOVI CLSNEUT|TYPTEXT|SUBMES1,A5
|
||
CLR A6
|
||
CLR A7
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7
|
||
movi WGSF_W_P1,b0
|
||
; calla BEGINOBJ
|
||
calla BEGINOBJP
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
|
||
MOVE A8,A9
|
||
|
||
MOVI [END_POS+TURM_OFF,0],A1
|
||
MOVI AWDNMPL_R,A2
|
||
MOVI [400+END_BUFF+TURM_OFF,0],A0
|
||
MOVE A11,A11
|
||
JRNZ ON_LEFT2
|
||
MOVI [400-END_POS,0],A1
|
||
MOVI [0-END_BUFF,0],A0
|
||
MOVI AWDNMPL_B,A2
|
||
movi DMAWNZ|M_FLIPH|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
ON_LEFT2
|
||
MOVE A1,*A13(PDATA+120H),L
|
||
MOVE A1,*A13(PDATA+140H),L
|
||
MOVI [END_YPOS,0],A1
|
||
DEC A3
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
|
||
PUSH A8
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVI DIAGLGO_R,A2
|
||
MOVE A11,A11
|
||
JRNZ ON_LEFT3
|
||
MOVI DIAGLGO_B,A2
|
||
ON_LEFT3
|
||
INC A3
|
||
calla BEGINOBJ
|
||
MOVE A8,A10
|
||
PULL A8
|
||
JSRP ZIP_HIM_ON
|
||
DIE
|
||
|
||
ZIP_HIM_ON
|
||
MOVI ZIP_SPEED,A3
|
||
MOVE_END_ON
|
||
MOVE *A13(PDATA+140H),A0,L
|
||
JRZ NOTHING_IN_A10
|
||
PUSH A8
|
||
MOVE A10,A8
|
||
CALLR MOVE_THIS
|
||
PULL A8
|
||
NOTHING_IN_A10
|
||
MOVE *A13(PDATA+100H),A0,L
|
||
JRZ NOTHING_IN_A9
|
||
PUSH A8
|
||
MOVE A9,A8
|
||
CALLR MOVE_THIS
|
||
PULL A8
|
||
NOTHING_IN_A9
|
||
MOVE *A13(PDATA+120H),A0,L
|
||
CALLR MOVE_THIS
|
||
PUSHP A3
|
||
SLEEPK 1
|
||
PULLP A3
|
||
DSJS A3,MOVE_END_ON
|
||
RETP
|
||
|
||
MOVE_THIS
|
||
MOVE *A8(OXVAL),A1,L
|
||
SUB A1,A0
|
||
SRA 3,A0
|
||
JRUC MOVE_THIS_PART
|
||
|
||
|
||
END_IPOS1 .EQU 332
|
||
END_IPOS2 .EQU 292
|
||
END_IYPOS .EQU 54
|
||
|
||
CREATE_END_ROUND_ICON
|
||
|
||
.ref wrestler_count_proc
|
||
.ref wrestler_count
|
||
|
||
move @wrestler_count_proc,a0,L ; Does the counter proc exist ?
|
||
jrz #no_wc_proc ; br = no
|
||
|
||
; move @wrestler_count,a14 ; Current count == 0 ?
|
||
; jrz #no_wc_proc ; br = yes
|
||
; dec a14 ; Decrement it
|
||
clr a14
|
||
move a14,@wrestler_count ; Write it back
|
||
|
||
movk 1,a14 ; Make counter proc wakeup on next tick
|
||
move a14,*a0(PTIME)
|
||
#no_wc_proc
|
||
|
||
|
||
|
||
MOVI [END_IPOS1+30,0],B4
|
||
MOVI [400-END_IPOS1-30,0],B5
|
||
MOVI [END_IPOS1,0],B6
|
||
MOVI [400-END_IPOS1,0],B7
|
||
|
||
MOVE @p1rounds,a1
|
||
MOVE A11,A11
|
||
JRZ GOT_RIGHT_SIDE
|
||
MOVE @p2rounds,a1
|
||
GOT_RIGHT_SIDE
|
||
DEC A1
|
||
JRZ DO_THE_RIGHT_ROUND
|
||
|
||
MOVI [END_IPOS2+30,0],B4
|
||
MOVI [400-END_IPOS2-30,0],B5
|
||
MOVI [END_IPOS2,0],B6
|
||
MOVI [400-END_IPOS2,0],B7
|
||
DO_THE_RIGHT_ROUND
|
||
|
||
CLR A1
|
||
MOVE A1,*A13(PDATA+140),L
|
||
|
||
MOVI WWFICON10,A2
|
||
MOVE B4,A1
|
||
MOVI [400+END_BUFF+150,0],A0
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVE A11,A11
|
||
JRNZ WHICH_ICON_SET
|
||
MOVE B5,A1
|
||
MOVI [0-END_BUFF-150,0],A0
|
||
WHICH_ICON_SET
|
||
MOVE A1,*A13(PDATA+100H),L
|
||
MOVI [END_IYPOS,0],A1
|
||
MOVI 1800h+200,A3
|
||
MOVE @WORLDTLY,A5,L
|
||
MOVE @ZFLIP_POS_VAR,A6,L
|
||
CMP A6,A5
|
||
JRGE IN_FORWARD_POS
|
||
MOVI 200,A3
|
||
IN_FORWARD_POS
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi TYPWWFICON,a5
|
||
CLR A6
|
||
CLR A7
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A9
|
||
MOVE A8,A9
|
||
|
||
MOVE B6,A1
|
||
MOVI [400+END_BUFF,0],A0
|
||
MOVI MVEBAR_R,A2
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVE A11,A11
|
||
JRNZ WHICH_BAR2_SET
|
||
MOVE B7,A1
|
||
MOVI [0-END_BUFF,0],A0
|
||
movi DMAWNZ|M_FLIPH|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
MOVI MVEBAR_B,A2
|
||
WHICH_BAR2_SET
|
||
MOVE A1,*A13(PDATA+120H),L
|
||
MOVE A0,*A13(PDATA+160H),L
|
||
MOVI [END_IYPOS,0],A1
|
||
MOVI 1800h+199,A3
|
||
MOVE @WORLDTLY,A5,L
|
||
MOVE @ZFLIP_POS_VAR,A6,L
|
||
CMP A6,A5
|
||
JRGE IN_FORWARD_POS2
|
||
MOVI 199,A3
|
||
IN_FORWARD_POS2
|
||
MOVI CLSNEUT|TYPTEXT|SUBMES1,A5
|
||
CLR A6
|
||
CLR A7
|
||
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7
|
||
calla BEGINOBJ
|
||
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
|
||
|
||
JSRP ZIP_HIM_ON
|
||
SLEEP 20
|
||
MOVI ICON_PID,A1
|
||
ADD A11,A1
|
||
CALLA FIND_ANY_OTHERS
|
||
MOVI 4DH,A0
|
||
CALLA triple_sound
|
||
MOVI MAKE_ICON_GLOW,A7
|
||
CALLA GETPRC
|
||
MOVE A9,A11
|
||
CLR A9
|
||
MOVE A9,*A13(PDATA+100),L
|
||
MOVE *A13(PDATA+160H),*A13(PDATA+120H),L
|
||
JSRP ZIP_HIM_ON
|
||
|
||
MOVE A11,A8
|
||
|
||
CREATE FLASH_PID,MAYBE_A_SPARKLE
|
||
DIE
|
||
|
||
MAKE_ICON_GLOW
|
||
MOVE A9,A8
|
||
MOVI WWF_ICON_ANIM,A1
|
||
CALLA setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
SLEEP TSEC*10
|
||
JRUC MAKE_ICON_GLOW
|
||
|
||
FIND_ANY_OTHERS
|
||
PUSH A1
|
||
MOVE A1,A0
|
||
MOVI -1,A1
|
||
CALLA EXISTP
|
||
JRZ NO_MORE
|
||
MOVK 1,A1
|
||
MOVE A1,*A0(PTIME)
|
||
NO_MORE
|
||
PULL A1
|
||
RETS
|
||
|
||
CANI_END equ 2 + 8000H
|
||
|
||
WWF_ICON_ANIM
|
||
WL 2,WWFICON01
|
||
WL 2,WWFICON02
|
||
WL 2,WWFICON03
|
||
WL 2,WWFICON04
|
||
WL 2,WWFICON05
|
||
WL 2,WWFICON06
|
||
WL 2,WWFICON07
|
||
WL 2,WWFICON08
|
||
WL 2,WWFICON09
|
||
WL 2,WWFICON10
|
||
.WORD CANI_END
|
||
|
||
MAYBE_A_SPARKLE
|
||
MOVI 120,A0
|
||
CALLA RNDRNG0
|
||
ADDI 50,A0
|
||
CALLA PRCSLP
|
||
CREATE FLASH_PID,ICON_SPARKLE
|
||
JRUC MAYBE_A_SPARKLE
|
||
|
||
SUBRP ICON_SPARKLE
|
||
|
||
move @reduce_bog,a14
|
||
jrnz #die
|
||
|
||
MOVK 6,A0
|
||
CALLA RNDRNG0
|
||
SLL 5,A0
|
||
ADDI WHERE_SPARKLE,A0
|
||
MOVE A0,A2
|
||
|
||
MOVE *A8(OXPOS),A0
|
||
MOVE *A2,A14
|
||
ADD A14,A0
|
||
|
||
MOVE *A8(OYPOS),A1
|
||
MOVE *A2(10H),A14
|
||
ADD A14,A1
|
||
|
||
SLL 16,A0
|
||
SLL 16,A1
|
||
MOVI SPRKLA01,A2
|
||
MOVE *A8(OZVAL),A3,L
|
||
INC A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi TYPWWFICON,a5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
|
||
MOVK 2,A0
|
||
CALLA RNDRNG0
|
||
SLL 5,A0
|
||
ADDI WHICH_SPARKLE,A0
|
||
MOVE *A0,A1,L
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
CALLA DELOBJA8
|
||
#die DIE
|
||
|
||
|
||
WHICH_SPARKLE
|
||
.LONG SPARKLE_1
|
||
.LONG SPARKLE_2
|
||
.LONG SPARKLE_3
|
||
.LONG BSPARKLE1
|
||
.LONG BSPARKLE2
|
||
|
||
|
||
WHERE_SPARKLE
|
||
.LONG [-8,-14]
|
||
.LONG [8,-9]
|
||
.LONG [-1,8]
|
||
.LONG [0,15]
|
||
.LONG [-9,19]
|
||
.LONG [-10,2]
|
||
.LONG [-1,-6]
|
||
|
||
SPARKLE_1
|
||
WL 2,SPRKLA01
|
||
WL 2,SPRKLA02
|
||
WL 2,SPRKLA03
|
||
WL 2,SPRKLA04
|
||
WL 2,SPRKLA05
|
||
WL 2,SPRKLA06
|
||
WL 2,SPRKLA07
|
||
WL 2,SPRKLA08
|
||
WL 2,SPRKLA09
|
||
WL 2,SPRKLA10
|
||
WL 2,SPRKLA11
|
||
WL 2,SPRKLA12
|
||
WL 2,SPRKLA13
|
||
.WORD CANI_END
|
||
|
||
SPARKLE_2
|
||
WL 2,SPRKLB01
|
||
WL 2,SPRKLB02
|
||
WL 2,SPRKLB03
|
||
WL 2,SPRKLB04
|
||
WL 2,SPRKLB05
|
||
WL 2,SPRKLB06
|
||
WL 2,SPRKLB07
|
||
WL 2,SPRKLB08
|
||
WL 2,SPRKLB09
|
||
WL 2,SPRKLB10
|
||
WL 2,SPRKLB11
|
||
WL 2,SPRKLB12
|
||
WL 2,SPRKLB13
|
||
.WORD CANI_END
|
||
|
||
SPARKLE_3
|
||
WL 2,SPRKLC01
|
||
WL 2,SPRKLC02
|
||
WL 2,SPRKLC03
|
||
WL 2,SPRKLC04
|
||
WL 2,SPRKLC05
|
||
WL 2,SPRKLC06
|
||
WL 2,SPRKLC07
|
||
WL 2,SPRKLC08
|
||
WL 2,SPRKLC09
|
||
WL 2,SPRKLC10
|
||
WL 2,SPRKLC11
|
||
WL 2,SPRKLC12
|
||
WL 2,SPRKLC13
|
||
.WORD CANI_END
|
||
|
||
BSPARKLE1
|
||
WL 2,BSPRKA01
|
||
WL 2,BSPRKA02
|
||
WL 2,BSPRKA03
|
||
WL 2,BSPRKA04
|
||
WL 2,BSPRKA05
|
||
WL 2,BSPRKA06
|
||
WL 2,BSPRKA07
|
||
WL 2,BSPRKA08
|
||
WL 2,BSPRKA09
|
||
WL 2,BSPRKA10
|
||
WL 2,BSPRKA11
|
||
WL 2,BSPRKA12
|
||
WL 2,BSPRKA13
|
||
WL 2,BSPRKA14
|
||
WL 2,BSPRKA15
|
||
.WORD CANI_END
|
||
|
||
BSPARKLE2
|
||
WL 2,BSPRKB01
|
||
WL 2,BSPRKB02
|
||
WL 2,BSPRKB03
|
||
WL 2,BSPRKB04
|
||
WL 2,BSPRKB05
|
||
WL 2,BSPRKB06
|
||
WL 2,BSPRKB07
|
||
WL 2,BSPRKB08
|
||
WL 2,BSPRKB09
|
||
WL 2,BSPRKB10
|
||
WL 2,BSPRKB11
|
||
WL 2,BSPRKB12
|
||
WL 2,BSPRKB13
|
||
WL 2,BSPRKB14
|
||
WL 2,BSPRKB15
|
||
.WORD CANI_END
|
||
|
||
YSPEED .EQU [4,0]
|
||
|
||
CREATE_PERFECT
|
||
|
||
movi CYCPID,a0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRNZ NO_NEED_FOR_PERFECT
|
||
|
||
MOVI 0c4h,A0
|
||
CALLA triple_sound
|
||
|
||
MOVI [200,0],A0
|
||
MOVI [300,0],A1
|
||
MOVI PERFCT09,A2
|
||
MOVI 1799H,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi TYPPERFECT,a5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
MOVI YSPEED,A0
|
||
NEG A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
|
||
PUSHP A10
|
||
MOVI PERFECT_DISSOLVE_ANIM,A9
|
||
MOVI 12,A11
|
||
MOVI PERFCT09,A10
|
||
CREATE FX_PID,COPY_OBJ_AND_MOVE_UP
|
||
|
||
PULLP A10
|
||
|
||
|
||
#wait_loop
|
||
SLEEPK 1
|
||
move *a8(OYPOS),a0
|
||
cmpi 100,a0
|
||
jrge #wait_loop
|
||
clr a0
|
||
move a0,*a8(OYVEL),L
|
||
movi FX_PID,a0
|
||
clr a1
|
||
not a1
|
||
calla KILALL
|
||
|
||
MOVE *A10(PLYRNUM),A10
|
||
INC A10
|
||
move @PERFECT_WINS,A0
|
||
and a10,A0
|
||
JRZ NOT_A_DOUBLE
|
||
CREATE ADD_INIT_PID,CREATE_DOUBLE
|
||
|
||
NOT_A_DOUBLE
|
||
|
||
move @PERFECT_WINS,A0
|
||
or a10,A0
|
||
MOVE A0,@PERFECT_WINS
|
||
|
||
MOVI PERFECT_FLASH_ANIM,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
|
||
MOVI 0A8H,A0
|
||
calla triple_sound
|
||
|
||
MOVI WHERE_PERFECT_SPARKLE,A10
|
||
PUSH A8
|
||
MOVE *A8(OXPOS),A9
|
||
MOVE *A8(OYVAL),A8,L
|
||
MOVX A9,A8
|
||
MOVK 2,A9
|
||
CREATE FLASH_PID,SPRINKLE_GLINTS
|
||
PULL A8
|
||
MOVI 110,A9
|
||
JRUC LOOK_FOR_IT
|
||
NO_NEED_FOR_PERFECT
|
||
DIE
|
||
|
||
CREATE_DOUBLE
|
||
MOVI [200,0],A0
|
||
MOVI [80,0],A1
|
||
MOVI DOUBLE09,A2
|
||
MOVI 1799H,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi TYPPERFECT,a5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
|
||
MOVI DOUBLE_FLASH_ANIM,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
MOVI 110,A9
|
||
JRUC LOOK_FOR_IT
|
||
DIE
|
||
|
||
COPY_OBJ_AND_MOVE_UP
|
||
PUSHP A10
|
||
MOVE A8,A10
|
||
COPY_OBJ_AND_MOVE_UP2
|
||
MOVE *A10(OYVAL),A1,L
|
||
MOVI [200,0],A0
|
||
PULLP A2
|
||
PUSHP A2
|
||
MOVI 1799H,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
movi TYPPERFECT,a5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
CREATE OVRHED_PID,KILL_THEM_EVENTUALLY_EACH
|
||
SLEEP 3
|
||
JRUC COPY_OBJ_AND_MOVE_UP2
|
||
|
||
KILL_THEM_EVENTUALLY_EACH
|
||
MOVK 6,A11
|
||
MOVE A9,A9
|
||
JRZ NORMAL_KILL
|
||
MOVE_IT_BACK
|
||
MOVE *A8(OZPOS),A1
|
||
DEC A1
|
||
MOVE A1,*A8(OZPOS)
|
||
SLEEP 1
|
||
DSJS A11,MOVE_IT_BACK
|
||
MOVE A9,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
CALLA DELOBJA8
|
||
DIE
|
||
|
||
NORMAL_KILL
|
||
MOVE *A8(OZPOS),A1
|
||
DEC A1
|
||
MOVE A1,*A8(OZPOS)
|
||
SLEEP 1
|
||
DSJS A11,NORMAL_KILL
|
||
CALLA DELOBJA8
|
||
DIE
|
||
|
||
DOUBLE_FLASH_ANIM
|
||
WL 2,DOUBLE01
|
||
WL 2,DOUBLE02
|
||
WL 2,DOUBLE03
|
||
WL 2,DOUBLE04
|
||
WL 2,DOUBLE05
|
||
WL 2,DOUBLE06
|
||
WL 2,DOUBLE07
|
||
WL 2,DOUBLE08
|
||
WL 2,DOUBLE09
|
||
.WORD CANI_END
|
||
|
||
PERFECT_FLASH_ANIM
|
||
WL 2,PERFCT01
|
||
WL 2,PERFCT02
|
||
WL 2,PERFCT03
|
||
WL 2,PERFCT04
|
||
WL 2,PERFCT05
|
||
WL 2,PERFCT06
|
||
WL 2,PERFCT07
|
||
WL 2,PERFCT08
|
||
WL 2,PERFCT09
|
||
.WORD CANI_END
|
||
|
||
PERFECT_DISSOLVE_ANIM
|
||
WL 2,PERFDS01
|
||
WL 2,PERFDS02
|
||
WL 2,PERFDS03
|
||
WL 2,PERFDS04
|
||
WL 2,PERFDS05
|
||
WL 2,PERFDS06
|
||
WL 2,PERFDS07
|
||
WL 2,PERFDS08
|
||
.WORD CANI_END
|
||
|
||
SUBR RANDOM_SPARKLE
|
||
|
||
SLEEP 20
|
||
MOVI FLASH_PID,A0
|
||
MOVI -1,A1
|
||
CALLA EXISTP
|
||
JRNZ RANDOM_SPARKLE
|
||
|
||
MOVI 39,A0
|
||
CALLA RNDRNG0
|
||
MOVE A0,A9
|
||
MOVI [102,7],A8
|
||
MOVI WHERE_WRESTLMANIA_SPARKLES,A10
|
||
MOVE A9,A11
|
||
SLL 5,A11
|
||
ADD A10,A11
|
||
MOVK 4,A9
|
||
CREATE FLASH_PID,START_SPARKLE
|
||
SLOOP 30,RANDOM_SPARKLE
|
||
|
||
SUBR SPRINKLE_GLINTS
|
||
CLR A6
|
||
PUSHP A6
|
||
NEXT_SPARKLE
|
||
PULLP A6
|
||
MOVE A6,A11
|
||
SLL 5,A11
|
||
ADD A10,A11
|
||
MOVE *A11,A1,L
|
||
INC A1
|
||
JRZ NO_MORE_SPARKLE
|
||
CREATE FLASH_PID,START_SPARKLE
|
||
INC A6
|
||
PUSHP A6
|
||
SLOOP 5,NEXT_SPARKLE
|
||
NO_MORE_SPARKLE
|
||
DIE
|
||
|
||
START_SPARKLE
|
||
MOVE A8,A0
|
||
MOVE *A11,A14
|
||
ADD A14,A0
|
||
MOVE A8,A1
|
||
SRL 16,A1
|
||
MOVE *A11(10H),A14
|
||
ADD A14,A1
|
||
|
||
SLL 16,A0
|
||
SLL 16,A1
|
||
MOVI SPRKLA01,A2
|
||
MOVI 1800H,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
CLR A5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
MOVE A9,A0
|
||
CALLA RNDRNG0
|
||
SLL 5,A0
|
||
ADDI WHICH_SPARKLE,A0
|
||
MOVE *A0,A1,L
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
CALLA DELOBJA8
|
||
DIE
|
||
|
||
WHERE_PERFECT_SPARKLE
|
||
.LONG [-6,-71]
|
||
.LONG [0,-64]
|
||
.LONG [-7,-49]
|
||
.LONG [5,-42]
|
||
.LONG [-2,-35]
|
||
.LONG [5,-31]
|
||
.LONG [-7,-18]
|
||
.LONG [5,-10]
|
||
.LONG [-2,-1]
|
||
.LONG [-7,9]
|
||
.LONG [5,17]
|
||
.LONG [-7,31]
|
||
.LONG [2,39]
|
||
.LONG [-7,49]
|
||
.LONG [6,59]
|
||
.LONG [-2,69]
|
||
.LONG [-7,74]
|
||
.LONG -1
|
||
|
||
SUBR WHERE_WRESTLMANIA_SPARKLES
|
||
.LONG [5,8]
|
||
.LONG [29,22]
|
||
.LONG [4,43]
|
||
.LONG [60,50]
|
||
.LONG [4,65]
|
||
.LONG [28,76]
|
||
.LONG [56,80]
|
||
.LONG [15,87]
|
||
.LONG [33,94]
|
||
.LONG [50,105]
|
||
.LONG [32,110]
|
||
.LONG [4,114]
|
||
.LONG [64,121]
|
||
.LONG [56,125]
|
||
.LONG [28,129]
|
||
.LONG [15,158]
|
||
.LONG [56,159]
|
||
.LONG [4,177]
|
||
.LONG [33,186]
|
||
.LONG [30,200]
|
||
.LONG [15,203]
|
||
.LONG [35,220]
|
||
.LONG [4,225]
|
||
.LONG [40,236]
|
||
.LONG [4,257]
|
||
.LONG [13,260]
|
||
.LONG [4,271]
|
||
.LONG [61,273]
|
||
.LONG [56,277]
|
||
.LONG [15,286]
|
||
.LONG [33,291]
|
||
.LONG [15,309]
|
||
.LONG [37,320]
|
||
.LONG [56,334]
|
||
.LONG [33,338]
|
||
.LONG [4,345]
|
||
.LONG [32,359]
|
||
.LONG [4,370]
|
||
.LONG [56,373]
|
||
.LONG [17,383]
|
||
.LONG -1
|
||
|
||
******************************************************************************
|
||
|
||
SUBR CREATE_TIMEOUT
|
||
|
||
MOVI 0c4h,A0
|
||
CALLA triple_sound
|
||
|
||
MOVI [200,0],A0
|
||
MOVI [300,0],A1
|
||
MOVI TIMEEX09,A2
|
||
MOVI 1799H,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
CLR A5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
|
||
MOVI YSPEED,A0
|
||
NEG A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
|
||
MOVI TIMEOUT_DISSOLVE_ANIM,A9
|
||
MOVI 12,A11
|
||
MOVI TIMEEX09,A10
|
||
CREATE FX_PID,COPY_OBJ_AND_MOVE_UP
|
||
CREATE FX_PID,HAVE_TO_MOVE_IT_TO
|
||
|
||
SLEEP 50
|
||
CLR A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
MOVI FX_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
|
||
SLEEP 10
|
||
|
||
MOVK 4,A4
|
||
LOOP_TIMEOUT
|
||
PUSHP A4
|
||
MOVI TIMEOUT_FLASH_ANIM,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
|
||
MOVE @match_time,A0,L
|
||
CMPI 90009H,A0
|
||
JREQ JUMP_OUT
|
||
PULLP A4
|
||
DSJS A4,LOOP_TIMEOUT
|
||
|
||
MOVI 110-(3*18),A9
|
||
JRUC LOOK_FOR_IT
|
||
|
||
TIMEOUT_FLASH_ANIM
|
||
WL 2,TIMEEX01
|
||
WL 2,TIMEEX02
|
||
WL 2,TIMEEX03
|
||
WL 2,TIMEEX04
|
||
WL 2,TIMEEX05
|
||
WL 2,TIMEEX06
|
||
WL 2,TIMEEX07
|
||
WL 2,TIMEEX08
|
||
WL 2,TIMEEX09
|
||
.WORD CANI_END
|
||
|
||
TIMEOUT_DISSOLVE_ANIM
|
||
WL 2,TIMEDS01
|
||
WL 2,TIMEDS02
|
||
WL 2,TIMEDS03
|
||
WL 2,TIMEDS04
|
||
WL 2,TIMEDS05
|
||
WL 2,TIMEDS06
|
||
WL 2,TIMEDS07
|
||
WL 2,TIMEDS08
|
||
.WORD CANI_END
|
||
|
||
SUBR CREATE_DISQUAL
|
||
|
||
MOVI 0c4h,A0
|
||
CALLA triple_sound
|
||
|
||
MOVI [200,0],A0
|
||
MOVI [300,0],A1
|
||
MOVI DISQUA09,A2
|
||
MOVI 1799H,A3
|
||
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
|
||
CLR A5
|
||
CLR A6
|
||
CLR A7
|
||
CALLA BEGINOBJ
|
||
MOVI YSPEED,A0
|
||
NEG A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
|
||
MOVI DISQUAL_DISSOLVE_ANIM,A9
|
||
MOVI 12,A11
|
||
MOVI DISQUA09,A10
|
||
CREATE FX_PID,COPY_OBJ_AND_MOVE_UP
|
||
|
||
SLEEP 50
|
||
CLR A0
|
||
MOVE A0,*A8(OYVEL),L
|
||
MOVI FX_PID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA KILALL
|
||
|
||
MOVK 4,A4
|
||
LOOP_DISQUAL
|
||
PUSHP A4
|
||
|
||
MOVI DISQUAL_FLASH_ANIM,A1
|
||
calla setup_back_anim
|
||
JSRP ANIM_CROWD
|
||
|
||
MOVE @match_time,A0,L
|
||
CMPI 90009H,A0
|
||
JREQ JUMP_OUT
|
||
PULLP A4
|
||
DSJS A4,LOOP_DISQUAL
|
||
|
||
MOVI 110-(3*18),A9
|
||
LOOK_FOR_IT
|
||
SLEEP 2
|
||
MOVE @match_time,A0,L
|
||
CMPI 90009H,A0
|
||
JREQ JUMP_OUT
|
||
DSJS A9,LOOK_FOR_IT
|
||
JUMP_OUT
|
||
CALLA DELOBJA8
|
||
DIE
|
||
|
||
HAVE_TO_MOVE_IT_TO
|
||
MOVE *A8(OYVEL),A1,L
|
||
MOVE *A8(OYVAL),A2,L
|
||
ADD A1,A2
|
||
MOVE A2,*A8(OYVAL),L
|
||
SLOOP 1,HAVE_TO_MOVE_IT_TO
|
||
|
||
DISQUAL_FLASH_ANIM
|
||
WL 2,DISQUA01
|
||
WL 2,DISQUA02
|
||
WL 2,DISQUA03
|
||
WL 2,DISQUA04
|
||
WL 2,DISQUA05
|
||
WL 2,DISQUA06
|
||
WL 2,DISQUA07
|
||
WL 2,DISQUA08
|
||
WL 2,DISQUA09
|
||
.WORD CANI_END
|
||
|
||
DISQUAL_DISSOLVE_ANIM
|
||
WL 2,DISQDS01
|
||
WL 2,DISQDS02
|
||
WL 2,DISQDS03
|
||
WL 2,DISQDS04
|
||
WL 2,DISQDS05
|
||
WL 2,DISQDS06
|
||
WL 2,DISQDS07
|
||
WL 2,DISQDS08
|
||
.WORD CANI_END
|
||
|
||
SUBR PIN_FLASH_ANIM
|
||
|
||
WL 2,PINHIM01
|
||
WL 2,PINHIM02
|
||
WL 2,PINHIM03
|
||
WL 2,PINHIM04
|
||
WL 2,PINHIM05
|
||
WL 2,PINHIM06
|
||
WL 2,PINHIM07
|
||
WL 2,PINHIM08
|
||
WL 20,PINHIM09
|
||
.WORD CANI_END
|
||
|
||
***********
|
||
*
|
||
* Old:
|
||
* returns lowest PLYRNUM on winning side (0 or 1 for plyrs, 2 for drones)
|
||
* in a3. increments p1rounds and p2rounds too. (actually, it's okay to
|
||
* return a 3 or a 4 if we want. The code that calls this will work fine.
|
||
* If this is the final battle, we add 2 instead of 1 to pXrounds.
|
||
*
|
||
* New:
|
||
* returns lowest PLYRNUM on winning side, unless there was a pin, in which
|
||
* case it returns the first wrestler on the winning side with his DID_PIN
|
||
* flag set.
|
||
*
|
||
|
||
SUBRP set_winner
|
||
|
||
;first, establish cause of death. Choices are time running out
|
||
; and loss of all health.
|
||
move @match_time,a14,L
|
||
jrz #tmout
|
||
|
||
;time didn't run out, so either someone was pinned, which should
|
||
; only happen if everyone on his team is dead, or the last living
|
||
; member of a team died by ring-out. Search through the wrestlers
|
||
; and award victory to the first live one we find.
|
||
movi NUM_WRES,a0
|
||
movi process_ptrs,a1
|
||
clr a3
|
||
|
||
#loop0 move *a1+,a2,L
|
||
jrz #nxt0 ;skip inactive
|
||
|
||
move *a2(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #nxt0 ;skip dead
|
||
|
||
;got a live one. if he pinned, use him. if not, save his pointer
|
||
; in case we find no pinner, but keep looking
|
||
move *a2(STATUS_FLAGS),a14
|
||
btst B_DID_PIN,a14
|
||
jrnz #a2wins
|
||
|
||
move a2,a3
|
||
|
||
#nxt0 dsj a0,#loop0
|
||
|
||
;okay, nobody pinned. did we find any live ones at all?
|
||
move a3,a2
|
||
jrnz #a2wins ;yes, we saved a non-pinner.
|
||
|
||
;trouble. we didn't find any live wrestlers, and there definitely
|
||
; should have been one. This is really bad and should never happen,
|
||
; but just in case it does, give the win to the first valid wrestler
|
||
; we can find.
|
||
.if DEBUG
|
||
LOCKUP
|
||
.endif
|
||
#bogus movi NUM_WRES,a0
|
||
movi process_ptrs,a1
|
||
|
||
#loop1 move *a1+,a2,L
|
||
jrz #nxt1 ;skip inactive
|
||
|
||
;got one
|
||
jruc #a2wins
|
||
|
||
#nxt1 dsjs a0,#loop1
|
||
|
||
;good heavens! no actives found at all! no way is this ever gonna
|
||
; happen. fuck it. quit or something.
|
||
jruc #no_hits
|
||
|
||
#a2wins ;a2 is process of winner
|
||
;increment pXrounds
|
||
movi p1rounds,a0
|
||
movi 01h,a1 ;match_winner value for p1 side winning
|
||
move *a2(PLYR_SIDE),a4
|
||
jrz #rok
|
||
movi p2rounds,a0
|
||
movi 02h,a1 ;match_winner value for p1 side winning
|
||
#rok move *a0,a4
|
||
inc a4
|
||
|
||
;if this is the final match (or royal rumble), increment it again.
|
||
inc a4 ;increment, then dec if we shouldn't have.
|
||
calla is_8_on_1
|
||
jrc #a4ok
|
||
move @royal_rumble,a14
|
||
jrnz #a4ok
|
||
dec a4
|
||
#a4ok move a4,*a0
|
||
|
||
;if pXwins == 2, set match_winner
|
||
cmpi 2,a4
|
||
jrne #no_mw
|
||
move a1,@match_winner
|
||
|
||
#no_mw move *a2(PLYRNUM),a3
|
||
rets
|
||
|
||
#tmout ;clock ran out on the round. Award victory to the team with the
|
||
; highest average life points remaining. In case of a tie, winner
|
||
; is the last team to land a hit. If there have been no hits,
|
||
; we'll wanna drop out and go straight to game over, which I'll
|
||
; deal with later, probably by returning a -1 and letting the
|
||
; caller deal with it.
|
||
|
||
;If this was an 8-on-1 or 8-on-2 match, the CPU wins when time
|
||
; runs out.
|
||
move @process_ptrs+40h,a2,L ;first drone
|
||
calla is_8_on_1
|
||
jrc #a2wins
|
||
move @royal_rumble,a14
|
||
jrnz #a2wins
|
||
|
||
;reggies:
|
||
clr a4 ;team 1 count
|
||
clr a5 ;team 1 total
|
||
clr a6 ;team 2 count
|
||
clr a7 ;team 2 total
|
||
|
||
movi NUM_WRES,a9
|
||
movi process_ptrs,a8
|
||
|
||
#loop2 move *a8+,a10,L
|
||
jrz #nxt2 ;skip inactive
|
||
|
||
move *a10(PLYRNUM),a1
|
||
calla get_health
|
||
move *a10(PLYR_SIDE),a14
|
||
jrnz #t2
|
||
|
||
;on team 1
|
||
inc a4
|
||
add a0,a5
|
||
jruc #nxt2
|
||
|
||
#t2 ;on team 2
|
||
inc a6
|
||
add a0,a7
|
||
|
||
#nxt2 dsj a9,#loop2
|
||
|
||
;compute the averages (we could check for the very likely case of
|
||
; the divisor being one, but there's no real need, as this is
|
||
; hardly a performance-critical event.)
|
||
divu a4,a5
|
||
divu a6,a7
|
||
|
||
cmp a5,a7
|
||
jrlt #t1w
|
||
jrgt #t2w
|
||
|
||
#tie ;uh-oh. Tie. Find wrestler with most recent LAST_HIT_TIME and
|
||
; award the match to his team. If everyone's LAST_HIT_TIME's are
|
||
; zero, nobody has landed a blow, so just quit to game over.
|
||
; LAST_HIT_TIME holds all 32 bits of PCNT, so we don't need to worry
|
||
; about wraparound.
|
||
|
||
movi NUM_WRES,a9
|
||
movi process_ptrs,a8
|
||
clr a0 ;current high LAST_HIT_TIME
|
||
clr a1 ;team with current high LAST_HIT_TIME
|
||
|
||
#loop4 move *a8+,a10,L
|
||
jrz #nxt4 ;skip inactive
|
||
|
||
move *a10(LAST_HIT_TIME),a14,L
|
||
cmp a0,a14
|
||
jrle #nxt4
|
||
|
||
;new champ.
|
||
move a14,a0
|
||
move *a10(PLYR_SIDE),a1
|
||
|
||
#nxt4 dsj a9,#loop4
|
||
|
||
TEST a0
|
||
jrz #no_hits
|
||
TEST a1
|
||
jrnz #t2w
|
||
;fall through to #t1w
|
||
|
||
#t1w ;team 1 wins
|
||
clr a4
|
||
jruc #fw
|
||
|
||
#t2w ;team 2 wins
|
||
movk 1,a4
|
||
|
||
#fw ;award win to first live wrestler with PLYR_SIDE equal to a4
|
||
|
||
movk NUM_WRES,a0
|
||
movi process_ptrs,a1
|
||
|
||
#loop3 move *a1+,a2,L
|
||
jrz #nxt3 ;skip inactive
|
||
|
||
move *a2(PLYRMODE),a14
|
||
cmpi MODE_DEAD,a14
|
||
jreq #nxt3 ;skip dead
|
||
|
||
move *a2(PLYR_SIDE),a14
|
||
cmp a14,a4
|
||
jrne #nxt3 ;skip losers
|
||
|
||
;got one
|
||
move *a2(PLYRNUM),a3
|
||
jruc #a2wins
|
||
|
||
#nxt3 dsj a0,#loop3
|
||
|
||
;good heavens. we didn't find ANYONE from that team. This is
|
||
; a major error that should never happen. Deal with it as in
|
||
; the 'no live wrestlers found' case above.
|
||
.if DEBUG
|
||
LOCKUP
|
||
.endif
|
||
jruc #bogus
|
||
|
||
#no_hits
|
||
;battle ended in a tie with neither side landing a blow. drop
|
||
; out to game over.
|
||
movi -1,a2
|
||
rets
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Clears a combo meter.
|
||
* >a13 = process of victim
|
||
|
||
SUBR clear_combo_meter
|
||
|
||
move *a13(PLYR_SIDE),a1
|
||
move *a13(PLYRNUM),a11
|
||
jruc zero_combo_meter
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Sets a combo meter to half-size.
|
||
* >a13 = process of victim
|
||
|
||
SUBR halve_combo_meter
|
||
|
||
move *a13(PLYR_SIDE),a1
|
||
move *a13(PLYRNUM),a11
|
||
movi MD_SIZE,a9
|
||
mpyu a1,a9
|
||
addi meter_data,a9
|
||
move *a9(MD_COMBO),a8,L
|
||
move a11,a5
|
||
X64 a5 ;x by PLT_SIZE
|
||
addi life_data,a5
|
||
movk 10,a2
|
||
jruc draw_combo_meter
|
||
|
||
#*****************************************************************************
|
||
*
|
||
* Clears a life bar.
|
||
* >a13 = process of victim
|
||
|
||
SUBR clear_lifebar
|
||
|
||
move *a13(PLYRNUM),a0
|
||
X64 a0
|
||
addi life_data,a0
|
||
clr a14
|
||
move a14,*a0(PLT_LIFE)
|
||
|
||
move *a13(PLYR_SIDE),a0
|
||
callr update_meter
|
||
|
||
rets
|
||
|
||
******************************************************************************
|
||
|
||
.end
|
||
|