wwf-wrestlemania/BACKUP/LIFEBAR.ASM

3443 lines
58 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

**************************************************************
*
* Software: Jason Skiles
* Initiated: 29 Oct 93
*
* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 4/12/94 15:30
**************************************************************
.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 "miscimg.glo"
.include "fontsimg.glo"
.INCLUDE "SOUND.EQU"
#*****************************************************************************
.REF ANIM_CROWD
.REF setup_back_anim
.REF RNDRNG0
.ref update_timer
.DEF DO_HEAD_MESS,DO_GERM_MESS
.DEF DO_FRANK_MESS,DO_BACK_MESS
.DEF DO_BODY_MESS,DO_SNAP_MESS
.DEF CLEAR_COUNTERS
.DEF DO_PILE_MESS
.ref LINES
.DEF WHICH_NAME, KILL_REWIRE_DUMMY
.REF get_process_ptr
.REF WHICH_SCREEN
.REF DUMRETS
.ref match_over
.def SHIFT_BARS_IN_Z
.DEF DO_REVERSAL_MESS
.REF SET_LOWER_VOL
.if rounds_on
.ref reset_for_round
.ref reset_for_round2
.ref calc_match_time_2
.endif
.REF CLEAR_SPEECH_REPEAT
.ref calc_match_time_1
.REF VINCE_START_ROUND2_3
;from ADJUST.ASM
.ref BINBCD
;from AUDIT.ASM
.ref CR_STRTP,GET_ADJ,GET_CREDITS
;from DCSSOUND.ASM
.ref triple_sound
;from DISPLAY.ASM
.ref BEGINOBJ_TBL
;from PAL.ASM
.ref pal_getf
;from ROBO.ASM
.ref civanic
;from STRING.ASM
.ref setup_message,print_string_C2,mess_objid
.ref sgmd8_ascii,osgemd_ascii
;from WRESTLE.ASM
.ref set_winner
.ref PSTATUS,process_ptrs,p1winstreak,p2winstreak,current_round
.ref secret_damage,fight_debug,p1rounds,p2rounds
.ref log_damage
.ref GAMSTATE
.ref HALT
.ref dnk_head_dead_dizzy_anim
.ref dnk_fall_back_anim
.ref wres_collis_off
.ref change_anim1a
.ref ring_bell
.REF CALL_MATCH_OVER
;from UTIL.ASM
.ref get_all_buttons_cur2
.DEF BONUS_MESS
.DEF DO_COMBO_MESS
.ref CLOSE_VERT_SCREEN_LINE,OPEN_VERT_SCREEN_LINE
.REF LINES_VERT
;RJR (REMOVE LINE) .REF anibobj
.REF ANIM_CROWD
.REF AUD1
#*****************************************************************************
;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_ON_SECOND EQU PLT_TURBO+10h
PLT_PAL EQU PLT_ON_SECOND+010H
PLT_SIZE equ PLT_PAL+10h
;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
MD_COMBO_SIZE equ MD_COMBO+20h
MD_SIZE equ MD_COMBO_SIZE+10H
.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
.BSS PILE_COUNT,16
.BSS BODY_COUNT,16
.BSS FRANK_COUNT,16
.BSS GERM_COUNT,16
.BSS BACK_COUNT,16
.BSS HEAD_COUNT,16
.BSS SNAP_COUNT,16
BSSX HAVE_WE_AUDITED_THIS_GAME,16
;MJT Start
PILE_LIMIT .EQU 0
FRANK_LIMIT .EQU 0
BODY_LIMIT .EQU 0
GERM_LIMIT .EQU 0
BACK_LIMIT .EQU 0
HEAD_LIMIT .EQU 0
SNAP_LIMIT .EQU 0
;MJT End
NUM_OF_COUNTERS .EQU 7
#*****************************************************************************
*
* Life/Turbo meter sizes and positions.
*
LIFE_MAX .equ 164 ;green pixels in life bar
TURBO_MAX .equ 84<<8 ;max turbo value
#*****************************************************************************
*
* >a8 = PLYRNUM for left meter
* >a9 = PLYRNUM for right meter
SUBR init_life_data
;initialize life data
MOVI FGR2YL_P,A0
CALLA pal_getf
MOVE A0,A5
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_ON_SECOND)
MOVE A5,*A1(PLT_PAL)
addi PLT_SIZE,a1
dsj a0,#init_loop
rets
CLEAR_COUNTERS
MOVK NUM_OF_COUNTERS,A0
CLR A1
MOVI PILE_COUNT,A2
CLEAR_NEXT_COUNTER
MOVE A1,*A2+
DSJS A0,CLEAR_NEXT_COUNTER
RETS
#*****************************************************************************
*
* >a8 = PLYRNUM for left meter
* >a9 = PLYRNUM for right meter
SUBR init_rnd_life_data
;initialize 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
rets
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
callr display_damage
;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
clr a8 ;initialize the combo meter
move a8,*a1(MD_COMBO_SIZE)
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
clr a8 ;initialize the combo meter
move a8,*a1(MD_COMBO_SIZE)
;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 120,a0
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 60,a0
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 120,a0
move a0,*a13(P2CNTR)
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 60,a0
move a0,*a13(P2CNTR)
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
;; A0 = PLAYER
; SUBR REWIRE_COMBO_METER
; MOVE *A13(PLYRNUM),A0
; CMPI 2,A0
; JRLT WE_SET_RIGHT_PLYRNUM
; MOVE @PSTATUS,A0
; DEC A0
; NOT A0
; ANDI 1,A0
;WE_SET_RIGHT_PLYRNUM
; PUSH A0
; ADDI FLASH_COMBO_PID,A0
; MOVI -1,A1
; CALLA KILALL
; PULL A0
; movi MD_SIZE,a1
; mpyu a0,a1
; addi meter_data,a1
; CLR A14
; MOVE A14,*A1(MD_COMBO_SIZE)
; MOVE *A1(MD_COMBO),A8,L
; 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)
;
; MOVI SUPER_0,A0
; 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
; RETS
FLASH_COMBO
CREATE0 DO_COMBO_SOUND
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
callr setup_back_anim
JSRP ANIM_CROWD
SLEEP 10
JRUC DO_COMBO_FLASH_AGAIN
DO_COMBO_SOUND
SLEEP 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
SUBR CHECK_COMBO_GO
MOVE *A8(PLYRNUM),A14
CMPI 2,A14
JRLT WE_SET_NUMBER_RIGHT
MOVE @PSTATUS,A14
DEC A14
NOT A14
ANDI 1,A14
WE_SET_NUMBER_RIGHT
movi MD_SIZE,a1
mpyu a14,a1
addi meter_data,a1
MOVE *A1(MD_COMBO_SIZE),a14
cmpi 16,a14
rets
;A7 = BIT TO SET IN PLAYER HISTORY
;A5 = FIRST TIME FOR MOVE
;A6 = MOVE REPEAT
SUBR ADD_TO_COMBO_COUNT
MOVE A7,A2
MOVE A6,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
MOVE *A13(PLYRNUM),A1
CMPI 2,A1
JRLT WE_SET_ON_PLAYER_NUMBER
MOVE @PSTATUS,A1
DEC A1
NOT A1
ANDI 1,A1
WE_SET_ON_PLAYER_NUMBER
movi MD_SIZE,a9
mpyu a1,a9
addi meter_data,a9
MOVE *A9(MD_COMBO),A8,L
MOVE *A9(MD_COMBO_SIZE),A2
ADD A3,A2
MOVE A2,*A9(MD_COMBO_SIZE)
CMPI 16,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
SET_FLASHING_COMBO_GOING
PUSH A1
ADDI FLASH_COMBO_PID,A1
MOVE A1,A0
MOVI -1,A1
CALLA EXISTP
JRNZ COMBO_ALREADY_STARTED
PULL A0
MOVI FLASH_COMBO_PID,A1
ADD A0,A1
MOVI FLASH_COMBO,A7
CALLA GETPRC
RETS
COMBO_ALREADY_STARTED
PULL A0
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
WHICH_NAME
MOVE A9,A10
NOT A9
ANDI 1,A9
MOVE A10,A1
CALLA get_process_ptr
MOVE *A0(CLOSEST_NUM),A11
WHICH_NAME_DIS
MOVI REWIRE_PID,A0
MOVI -1,A1
CALLA EXISTP
JRNZ NO_REWIRE
MOVE A10,A1
CALLA get_process_ptr
MOVE *A0(CLOSEST_NUM),A1
CMP A11,A1
JREQ NO_REWIRE
MOVE A1,A11
MOVE A9,A0
CALLR rewire_meter
CREATE REWIRE_PID,WAIT_ON_REWIRE
NO_REWIRE
SLOOP 1,WHICH_NAME_DIS
WAIT_ON_REWIRE
SLEEP 20
DIE
KILL_REWIRE_DUMMY
MMTM SP,A0,A1,A7
MOVI REWIRE_PID,A0
MOVI -1,A1
CALLA KILALL
MMFM SP,A0,A1,A7
RETS
#*****************************************************************************
* 'rewires' a meter display for a different wrestler
* >a0 = display(0 or 1), >a1= playernum (0 to NUM_WRES-1)
SUBR rewire_meter
;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
movi PLT_SIZE,a3
mpyu a1,a3
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 name
MOVE *A6(PLT_PAL),A2
MOVE *A5(MD_LIFE),A8,L
MOVE A2,*A8(OPAL),L
move *a5(MD_NAME),a8,L
move *a7(WRESTLERNUM),a1
X32 a1
addi name_tbl,a1
move *a1,a0,L
calla civanic
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
#*****************************************************************************
* 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
movi PLT_SIZE,a3
mpyu a2,a3
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
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
SUBR get_health
movi PLT_SIZE,a14
mpyu a14,a1
addi life_data,a1
move *a1(PLT_LIFE),a0
rets
#*****************************************************************************
* Adjusts a player's health total
* >a0 = amount to add to player's health total
* >a1 = PLYRNUM
* >a10= attacker's process ptr
SUBR adjust_health
PUSH a1,a8,a10,a13
MOVE A0,A0
JRZ NO_MULTIPLIER
;make sure a10 is valid
move *a13(WHOHITME),a14,L
cmp a14,a10
jrne NO_MULTIPLIER
MOVE *A10(COMBO_COUNT),A14
JRZ DO_NORMAL_ADJUST_CHECK
SRA 1,A0
CLR A3
MOVE A3,@DAM_MULT
JRUC NO_MULTIPLIER
DO_NORMAL_ADJUST_CHECK
MOVE @DAM_MULT,A14
JRZ NO_MULTIPLIER
;THIS CODE IS A BIT OF A HACK, BUT NEVER MIND
;MULT 2= 1.5 x HIT DAMAGE
;MULT 3= 2.0 x HIT DAMAGE
;MULT 4 UPWARDS = 2.5 x HIT DAMAGE
MOVE A0,A3
SLL 1,A3
CMPI 3,A14
JREQ MULT_SET
MOVE A0,A10
SRA 1,A10
SUB A10,A3
CMPI 2,A14
JREQ MULT_SET
ADD A0,A3
MULT_SET
MOVE A3,A0
CLR A3
MOVE A3,@DAM_MULT
NO_MULTIPLIER
move a1,a14
X32 a14
addi process_ptrs,a14
move *a14,a13,L
move *a13(PLYRMODE),a14
cmpi MODE_DEAD,a14
jrnz #norm
;Opponent already dead
jruc #notdead
#norm
move a1,a10
calla log_damage
callr update_secret_display
movi PLT_SIZE,a14
mpyu a14,a1
addi life_data,a1
move *a1(PLT_LIFE),a14
;if a14 > 20 and a14+a0 <= 20, fire off a danger process.
PUSH a0,a1,a14
cmpi 30,a14
jrle #no_danger
move a14,a1
add a0,a1
cmpi 30,a1
jrgt #no_danger
CREATE0 flash_obj
#no_danger
PULL a0,a1,a14
add a14,a0
jrn #toolow
jrz #toolow
cmpi LIFE_MAX,a0
jrle #done
movi LIFE_MAX,a0
jruc #done
#toolow
clr a0
;MJT Start
.if DEBUG
;if he's out of life and we're in debug mode, fill him up.
move @fight_debug,a14
jrz #done
movi LIFE_MAX,a0
.endif
;MJT End
#done
move a0,*a1(PLT_LIFE)
; PULL a1,a10
move a10,a1
callr get_health
;Temp... Take this jrnz out and one blow kills opponent!
jrnz #notdead
;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
;MJT Start
jrz #ok
;Give him some life back
move *a13(PLYRNUM),a1
movi PLT_SIZE,a14
mpyu a14,a1
addi life_data,a1
movk 1,a14
move a14,*a1(PLT_LIFE)
movk 1,a0
move a0,*a13(I_WILL_DIE)
jruc #notdead
#ok
;If this is the match winning blow, then keep opponent standing in finish him
;mode. Otherwise, knock him down to the ground and move onto the next round.
;Finish this someday!
;We need to decide what to do in finish him situations.
;Player has just lost his first round, knock him down onto
;his butt.
;Add speech call "Pin him!"
;MJT Start
; WRSND W_DOINK,FLYKICK_L1,FLYKICK_L2
;MJT End
clr a0
move a0,*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
move *a13(WRESTLERNUM),a0
sll 5,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
SETMODE DEAD
#skip0
calla wres_collis_off
PULL a1,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 #skip
;Puppet mode? Others?
;How best to deal with this?
SETMODE DEAD
#skip calla wres_collis_off
;MJT End
PULL a1,a8,a10,a13
setc
rets
#fallbk addi #fallbacks_t,a0
move *a0,a0,L
calla change_anim1a
movi [2,0],a2
move *a13(OBJ_XPOSINT),a1
move *a13(WHOHITME),a0,L ;* wrestler process
;MJT Start
; move *a0(OBJ_XVEL),a14,L
; sra 1,a14 ;x_vel after collis
; neg a14
; move a14,*a0(OBJ_XVEL),L
; movi 60000h,a14 ;4
; move a14,*a0(OBJ_YVEL),L
;MJT End
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
calla wres_collis_off
SETMODE DEAD
PULL a1,a8,a10,a13
setc
rets
;#finishhim
;
; move *a13(WRESTLERNUM),a0
; sll 5,a0
; addi #dizzydead_t,a0
; move *a0,a0,L
;
; calla change_anim1a
;
; PULL a1,a10,a13
;
; setc
; rets
#notdead
PULL a1,a8,a10,a13
clrc
rets
#fallbacks_t
#fall_back
.ref hrt_fall_back_anim ;0 Bret Hart
.ref rzr_fall_back_anim ;1 Razor Ramon
.ref und_fall_back_anim ;2 Undertaker
.ref yok_fall_back_anim ;3 Yokozuna
.ref shn_fall_back_anim ;4 Shawn Michaels
.ref bam_fall_back_anim ;5 Bam Bam
.ref dnk_fall_back_anim ;6 Doink
.ref lex_fall_back_anim ;8 Lex Luger
.long hrt_fall_back_anim ;0 Bret Hart
.long rzr_fall_back_anim ;1 Razor Ramon
.long und_fall_back_anim ;2 Undertaker
.long yok_fall_back_anim ;3 Yokozuna
.long shn_fall_back_anim ;4 Shawn Michaels
.long bam_fall_back_anim ;5 Bam Bam
.long dnk_fall_back_anim ;6 Doink
.long 0 ;7 spare
.long lex_fall_back_anim ;8 Lex Luger
.long 0 ;9 Referee
.ref dnk_hitonground_anim
#convulse_t
#hitonground
.ref hrt_hitonground_anim ;0 Bret Hart
.ref rzr_hitonground_anim ;1 Razor Ramon
.ref und_hitonground_anim ;2 Undertaker
.ref yok_hitonground_anim ;3 Yokozuna
.ref shn_hitonground_anim ;4 Shawn Michaels
.ref bam_hitonground_anim ;5 Bam Bam
.ref dnk_hitonground_anim ;6 Doink
.ref lex_hitonground_anim ;8 Lex Luger
.long hrt_hitonground_anim ;0 Bret Hart
.long rzr_hitonground_anim ;1 Razor Ramon
.long und_hitonground_anim ;2 Undertaker
.long yok_hitonground_anim ;3 Yokozuna
.long shn_hitonground_anim ;4 Shawn Michaels
.long bam_hitonground_anim ;5 Bam Bam
.long dnk_hitonground_anim ;6 Doink
.long 0 ;7 spare
.long lex_hitonground_anim ;8 Lex Luger
.long 0 ;9 Referee
;Fix this some day
;MJT Start
;#dizzydead_t
; .long dnk_head_dead_dizzy_anim ;0 Bret Hart
; .long dnk_head_dead_dizzy_anim ;1 Razor Ramon
; .long dnk_head_dead_dizzy_anim ;2 Undertaker
; .long dnk_head_dead_dizzy_anim ;3 Yokozuna
; .long dnk_head_dead_dizzy_anim ;4 Shawn Michaels
; .long dnk_head_dead_dizzy_anim ;5 Bam Bam
; .long dnk_head_dead_dizzy_anim ;6 Doink
; .long dnk_head_dead_dizzy_anim ;7 Adam Bomb
; .long dnk_head_dead_dizzy_anim ;8 Lex Luger
; .long dnk_head_dead_dizzy_anim ;9 Referee
;MJT End
#*****************************************************************************
* 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 INPREGAME,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
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 201,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 201,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,200 ;X, Y, Z
;#plate .word 176,4,1006 ;X, Y, Z
.long crplate ;IMG
.word DMAWNZ|M_SCRNREL ;CTRL
.word CLSDEAD ;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
movi PLT_SIZE,a1
mpyu a0,a1
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
#*****************************************************************************
* Secret display of damage amount
*
SUBR display_damage
PUSH a0,a1,a2,a3,a4,a5,a6,a7,a8,a9
move @secret_damage,a2
jrz #out
cmpi 2,a2
jrz #p2
;Display P1 damage meter
movi damage_imgs,a9
movi [0bh,0],a0
movi [0e8h,0],a1 ;21h
movi damage,a2
movi 1006,a3 ;Z
movi DMAWNZ|M_SCRNREL,a4
movi CLSNEUT|TYPNEUT|SUBMES1,a5
clr a6
clr a7
movi DMG_P,b0
calla BEGINOBJP
;Now draw both digits for player 1
movi [4fh,0],a0
movi [0ech,0],a1
movi SGMD8_0,a2
movi 1007,a3 ;Z
movi SGMD8YEL2,b0
calla BEGINOBJP
move a8,*a9+,L
movi [48h,0],a0
movi [0ech,0],a1
movi SGMD8_0,a2
movi 1007,a3 ;Z
movi SGMD8YEL2,b0
calla BEGINOBJP
move a8,*a9+,L
move @secret_damage,a2
cmpi 1,a2
jrz #out
;Also do p2
#p2
;Display p2 damage meter
movi [135h,0],a0
movi [0e8h,0],a1
movi damage,a2
movi 1006,a3 ;Z
movi DMAWNZ|M_SCRNREL,a4
movi CLSNEUT|TYPNEUT|SUBMES1,a5
clr a6
clr a7
movi DMG_P,b0
calla BEGINOBJP
;Now draw both digits for player 2
movi [178h,0],a0
movi [0ech,0],a1
movi SGMD8_0,a2
movi 1007,a3 ;Z
movi SGMD8YEL2,b0
calla BEGINOBJP
move a8,*a9+,L
movi [171h,0],a0
movi [0ech,0],a1
movi SGMD8_0,a2
movi 1007,a3 ;Z
movi SGMD8YEL2,b0
calla BEGINOBJP
move a8,*a9+,L
#out
PULL a0,a1,a2,a3,a4,a5,a6,a7,a8,a9
rets
#*****************************************************************************
* Update secret display of damage amount
* >a0 = amount to display
* >a1 = PLYRNUM
SUBRP update_secret_display
PUSH a0,a1,a2,a3,a4,a5,a6,a7,a8,a9
move @secret_damage,a2
jrz #out
neg a0
move a1,a1
jrz #p2
;Plyr 1
btst 0,a2
jrz #out
calla BINBCD
move a0,a9
sll 32-4,a0
srl 32-4-5,a0 ;*32
addi #numfont,a0
move *a0,a1,L
move @damage_imgs,a8,L
move *a8(OCTRL),a4
calla ANI
srl 4,a9
sll 32-4,a9
srl 32-4-5,a9 ;*32
addi #numfont,a9
move *a9,a1,L
move @damage_imgs+32,a8,L
move *a8(OCTRL),a4
calla ANI
jruc #out
#p2
btst 1,a2
jrz #out
calla BINBCD
move a0,a9
sll 32-4,a0
srl 32-4-5,a0 ;*32
addi #numfont,a0
move *a0,a1,L
move @damage_imgs+64,a8,L
move *a8(OCTRL),a4
calla ANI
srl 4,a9
sll 32-4,a9
srl 32-4-5,a9 ;*32
addi #numfont,a9
move *a9,a1,L
move @damage_imgs+96,a8,L
move *a8(OCTRL),a4
calla ANI
#out
PULL a0,a1,a2,a3,a4,a5,a6,a7,a8,a9
rets
#numfont
.long SGMD8_0
.long SGMD8_1
.long SGMD8_2
.long SGMD8_3
.long SGMD8_4
.long SGMD8_5
.long SGMD8_6
.long SGMD8_7
.long SGMD8_8
.long SGMD8_9
#*****************************************************************************
* Flash the background of the life meter for the current player.
* >a10 = plyrnum
danger_snd equ 0b9h
SUBRP flash_obj
;find the bar obj
movi meter_data,a1
move *a1(MD_LINK),a2
cmp a10,a2
jreq #found
addi MD_SIZE,a1
move *a1(MD_LINK),a2
cmp a10,a2
jrne #not_displayed
#found
move *a1(MD_LBAK),a8,L
movi danger_snd,a0
calla triple_sound
movi 26,a3
calla SNDSND
CLR A1
MOVI 225,A0
CALLA SET_LOWER_VOL
movi TSEC&0FFFEh,a10 ;make sure it's an even number
movi 0808h,a0
move a0,*a8(OCONST),W
#loop
move *a8(OCTRL),a0,W
xori M_CONST|M_WRNONZ,a0
move a0,*a8(OCTRL),W
SLEEPK 1
dsj a10,#loop
#not_displayed
DIE
******************************************************************************
do_win_streaks
move @p1winstreak,a0
jrz #p2
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 1000h|name_z,a3 ;Z
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
movi CLSDEAD,a5
clr a6
clr a7
calla BEGINOBJ
; 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 [36h,0],a0
movi [23h,0],a1
calla BEGINOBJ
TBL_OBJ lwin
#p2 move @p2winstreak,a0
jrz #x
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 1000h|name_z,a3 ;Z
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
movi CLSDEAD,a5
clr a6
clr a7
calla BEGINOBJ
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
TBL_OBJ rwin
#x
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 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
CLR A3
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
CREATE0 blink_font
move a0,*a13(BLINK_PROC),L
;Slide everthing onto screen
movi >b6,a0
calla triple_sound
movi 30h,a10
#onscr_loop
SLEEPK 1
movi [200,0],a0
callr #set_x
dsj a10,#onscr_loop
CREATE0 DO_ROUNDS
;In middle
CREATE0 ring_bell
SLEEP 20h
movi 60h,a10
.ref wait_on_butn
JSRP wait_on_butn
movi >b6,a0
calla triple_sound
movi 23h,a10
#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
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
SUBR announce_rnd_winner
movi ANNC_PID,a0
clr a1
not a1
calla EXISTP
jrnz announcing_being_done
MOVI CROWD_VICTORY_LOOP,A3
CALLA SNDSND
calla set_winner
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
calla calc_match_time_2
timer_updated
;a10=*proc of wrestler who just pinned opponent
;
SLEEP 30
;Place token on top of winner, then have it float up to the top of the screen
movi 27,a3
calla SNDSND
CLR A1
MOVI 255,A0
CALLA SET_LOWER_VOL
; movi [200,0],a0 ;x pos
; movi [2fh,0],a1 ;y pos
; movi MTCHPLT,a2
; movi MPLTPRPP,b0
; movi 1800h,a3 ;z pos
; callr #begin_obj
;
; movi #ln_nm1_setup,a2
; calla setup_message
;
; movi CLSNEUT|TYPTEXT|SUBMES1,a0
; move a0,@mess_objid
;
; move *a10(WRESTLERNUM),a0
; sll 5,a0
; addi #ln1_t,a0
; move *a0,a4,L
; calla print_string_C2
;
; movi #ln_nm2_setup,a2
; calla setup_message
;
; movi CLSNEUT|TYPTEXT|SUBMES1,a0
; move a0,@mess_objid
;
;;Display who won & what round was won
; movi #rnd1,a4
; move @current_round,a0
; cmpi 1,a0
; jrz #ok0
; movi #rnd2,a4
; cmpi 2,a0
; jrnz #okz
;;This may be a match winner!
; move @p1rounds,a0
; jrz #okz
; cmpi 2,a0
; jrnz #ok0
;#okz
;;Match winner
; movi #rnd3,a4
;#ok0 calla print_string_C2
;
;;This will blink between red/white
; SLEEPK 4
;
; PUSH a8,a9
; movi SGMD8RED2,a8
; movi SGMD8WHT2,a9
.ref blink_pals
; CREATE0 blink_pals
; PULL a8,a9
; move a0,*a13(BLINK_PROC),L
;
; SLEEP 60
CALLA CALL_MATCH_OVER
SLEEP 20
move @p1rounds,a0
cmpi 2,a0
jrz DO_WAIT
move @p2rounds,a0
cmpi 2,a0
jrnz WE_CAN_EXIT
DO_WAIT
MOVI 2*TSEC,a9
WAIT_HERE
SLEEPK 1
calla get_all_buttons_cur2
JRNZ WE_CAN_EXIT
DSJS A9,WAIT_HERE
WE_CAN_EXIT
move @current_round,a9
CMPI 1,A9
JREQ SET_WHICH_ROUND
CMPI 3,A9
JREQ SET_WHICH_ROUND
INC A9
move @p1rounds,a0
JRZ SET_WHICH_ROUND
CMPI 2,A0
JREQ SET_WHICH_ROUND
DEC A9
SET_WHICH_ROUND
DEC A9
MOVE *A10(PLYRNUM),A11
CMPI 2,A11
JRLT NO_PROBLEMS_HERE
CLR A11
MOVE @PSTATUS,A0
SRL 1,A0
JRNC NO_PROBLEMS_HERE
INC A11
NO_PROBLEMS_HERE
CREATE0 CREATE_END_ROUND_TOP
SLEEP 15
CREATE0 CREATE_END_ROUND_BOT
SLEEP 40
CREATE0 CREATE_END_ROUND_ICON
CALLA CLEAR_SPEECH_REPEAT
move @p1rounds,a0
cmpi 2,a0
jrz #end
move @p2rounds,a0
cmpi 2,a0
jrnz #not_end
#end
clr a0
move a0,@HALT
MOVI 260,a9
WAIT_HERE2
SLEEPK 1
calla get_all_buttons_cur2
JRNZ WE_CAN_EXIT2
DSJS A9,WAIT_HERE2
WE_CAN_EXIT2
MOVK 2,A0
move a0,@match_over
MOVI 4DH,A0
CALLA triple_sound
DIE
#not_end
SLEEP 85
CLR A1
MOVE *A2(PLYRNUM),A3
JRZ WHICH_ONE_SORTED
INC A1
DEC A3
JRZ WHICH_ONE_SORTED
MOVE *A10(PLYRNUM),A3
JRZ WHICH_ONE_SORTED
DEC A1
WHICH_ONE_SORTED
MOVE A1,A5
MOVI PLT_SIZE,A3
MPYU A3,A1
ADDI life_data,A1
MOVI LIFE_MAX,A14
move a14,*a1(PLT_LIFE)
MOVI MD_SIZE,A3
MPYU A3,A5
ADDI meter_data,A5
MOVE *A5(MD_LIFE),A8,L
MOVI FYL2RD_P,A0
CALLA pal_getf
MOVE A0,*A8(OPAL)
;Cause wrestlers to re-appear in the correct spot to start the next round.
CALLA CLEAR_SPEECH_REPEAT
MOVE @current_round,A1
MOVI 16,A3
CMPI 2,A1
JREQ NOT_THIRD_MATCH
MOVI 17,A3
NOT_THIRD_MATCH
CALLA SNDSND
CLR A1
MOVI 175,A0
CALLA SET_LOWER_VOL
NO_LOWER
movk 16,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
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
movi [339h,0],a0
move a0,@WORLDTLX,L
movi [0ffd6h,0],a0
move a0,@WORLDTLY,L
.ref BGND_UD1
calla BGND_UD1
;Now display "round 2" or "round 3"
CREATE0 ring_bell
movk 1,a0
move a0,@HALT
SLEEPK 1
calla BGND_UD1
SLEEPK 1
calla BGND_UD1
movk 16,a8
movk 1,a9
jsrp OPEN_VERT_SCREEN_LINE
CREATE0 DO_ROUNDS
SLEEP 60
CALLA VINCE_START_ROUND2_3
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
DIE
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
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
PULL A9
MOVK 20,A10
LOOP_ROUNDS_ON
MOVI [190,0],A0
CALLR ZIP_ROUNDS_ON
SLEEP 1
DSJS A10,LOOP_ROUNDS_ON
SLEEP 40
MOVK 20,A10
LOOP_ROUNDS_OFF
MOVI [300,0],A0
CALLR ZIP_ROUNDS_ON
SLEEP 1
DSJS A10,LOOP_ROUNDS_OFF
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
#ln_nm1_setup
JAM_STR sgmd8_ascii,5,0,200,40h-10,SGMD8WHT2,0
#ln_nm2_setup
JAM_STR sgmd8_ascii,5,0,200,4bh-10,SGMD8WHT2,0
#ln_rnd_setup
.ref font9_ascii
JAM_STR font9_ascii,5,0,200,43h-10,FNT9WHT_P,0
#ln1_t .long #bh_ln1,#rr_ln1,#un_ln1,#yo_ln1
.long #sm_ln1,#bb_ln1,#do_ln1,#ll_ln1
.long #ll_ln1
#ln2_t .long #bh_ln1,#rr_ln1,#un_ln1,#yo_ln1
.long #sm_ln1,#bb_ln1,#do_ln1,#ll_ln1
.long #ll_ln1
#bh_ln1 .string "BRET HART",0
#rr_ln1 .string "RAZOR RAMON",0
#un_ln1 .string "THE UNDERTAKER",0
#yo_ln1 .string "YOKOZUNA",0
#sm_ln1 .string "SHAWN MICHAELS",0
#bb_ln1 .string "BAM BAM BIGELOW",0
#do_ln1 .string "DOINK THE CLOWN",0
#ll_ln1 .string "LEX LUGER",0
#rnd1 .string "WINS ROUND ONE",0
#rnd2 .string "WINS ROUND TWO",0
#rnd3 .string "WINS THE MATCH",0
#rnd_2 .string "ROUND 2",0
#rnd_3 .string "ROUND 3",0
.even
announce_winner
.if 0
SLEEP 90
movi [252h,0],a0 ;x pos
movi [2Eh,0],a1 ;y pos
movi MTCHPLT,a2
movi MPLTPRPP,b0
movi 1200,a3 ;z pos
callr #begin_obj
move a8,*a13(IPTR_PLATE),L
xori 1,a10
X32 a10
addi process_ptrs,a10
move *a10,a10,L
move *a10(WRESTLERNUM),a10
X32 a10
movi name_tbl,a2
add a10,a2
move *a2,a2,L
movi [252h,0],a0 ;x pos
movi [46h,0],a1 ;y pos
movi TEXT_P,b0
movi 1202,a3 ;z pos
callr #begin_obj
move a8,*a13(IPTR_TEXT),L
movi [252h,0],a0 ;x pos
movi [54h,0],a1 ;y pos
movi wins_txt,a2
movi TEXT_P,b0
movi 1202,a3 ;z pos
callr #begin_obj
move a8,*a13(IPTR_TEXT2),L
movi >b6,a0
calla triple_sound
movi 30h,a10
#onscr_loop2
SLEEPK 1
movi [200,0],a0
movk 3,a11
callr #set_x
dsj a10,#onscr_loop2
;In middle
;Wait for wrestlers to scramble into position
SLEEP 3*60
movi >b6,a0
calla triple_sound
movi 23h,a10
#offscr_loop2
SLEEPK 1
movi [0fec0h,0],a0
movk 3,a11
callr #set_x
dsj a10,#offscr_loop2
move *a13(IPTR_PLATE),a0,L
calla DELOBJ
move *a13(IPTR_TEXT),a0,L
calla DELOBJ
move *a13(IPTR_TEXT2),a0,L
calla DELOBJ
clr a0
move a0,@HALT
.endif
DIE
#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 a0,*a8(OXVEL),L
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
DO_SNAP_MESS
MOVE @SNAP_COUNT,A0
INC A0
MOVE A0,@SNAP_COUNT
CMPI SNAP_LIMIT,A0
JRGE NO_NORE_MESS
MOVI SNAPMIRR,A8
DO_THIS_MESS
MOVE *A13(PLYRNUM),A9
CALLA MAKE_PLAYER_NUMBER_RIGHT
MOVI MESSAGES_PID,A0
ADD A9,A0
MOVI -1,A1
CALLA EXISTP
JRNZ NO_NORE_MESS
INC A9
CLR A10
MOVI 1801H,A11
MOVI MESSAGES_PID,A1
ADD A9,A1
MOVI SPECIAL_MESSAGE,A7
CALLA GETPRC
MOVI 0BBH,A0
CALLA triple_sound
NO_NORE_MESS
RETS
DO_HEAD_MESS
MOVE @HEAD_COUNT,A0
INC A0
MOVE A0,@HEAD_COUNT
CMPI HEAD_LIMIT,A0
JRGE NO_NORE_MESS
MOVI HEADSLAM,A8
JRUC DO_THIS_MESS
DO_GERM_MESS
MOVE @GERM_COUNT,A0
INC A0
MOVE A0,@GERM_COUNT
CMPI GERM_LIMIT,A0
JRGE NO_NORE_MESS
MOVI GERMSUPL,A8
JRUC DO_THIS_MESS
DO_FRANK_MESS
MOVE @FRANK_COUNT,A0
INC A0
MOVE A0,@FRANK_COUNT
CMPI FRANK_LIMIT,A0
JRGE NO_NORE_MESS
MOVI FRANKEN,A8
JRUC DO_THIS_MESS
DO_BACK_MESS
MOVE @BACK_COUNT,A0
INC A0
MOVE A0,@BACK_COUNT
CMPI BACK_LIMIT,A0
JRGE NO_NORE_MESS
MOVI BACKBRKR,A8
JRUC DO_THIS_MESS
DO_BODY_MESS
MOVE @BODY_COUNT,A0
INC A0
MOVE A0,@BODY_COUNT
CMPI BODY_LIMIT,A0
JRGE NO_NORE_MESS
MOVI BODYSLAM,A8
JRUC DO_THIS_MESS
DO_PILE_MESS
MOVE @PILE_COUNT,A0
INC A0
MOVE A0,@PILE_COUNT
CMPI PILE_LIMIT,A0
JRGE NO_NORE_MESS
MOVI PILEDRV,A8
JRUC DO_THIS_MESS
DO_REVERSAL_MESS
MOVE *A10(PLYRNUM),A9
CALLA MAKE_PLAYER_NUMBER_RIGHT
CREATE0 CREATE_REVERSAL_MESS
RETS
CREATE_REVERSAL_MESS
MOVK 2,A0
MOVE A0,@DAM_MULT
MOVI REVERS,A8
CLR A10
MOVI 1801H,A11
MOVI MESSAGES_PID,A1
ADD A9,A1
MOVI SPECIAL_MESSAGE,A7
INC A9
CALLA GETPRC
MOVI 0BBH,A0
CALLA triple_sound
SLEEP 50
MOVI xDAMAGE,A8
MOVI 2,A10
MOVI 1803H,A11
DEC A9
MOVI MESSAGES_PID,A1
ADD A9,A1
MOVI SPECIAL_MESSAGE,A7
INC A9
CALLA GETPRC
DIE
BONUS_MESS
CREATE0 DO_BONUS_MESS
RETS
DO_BONUS_MESS
MOVE *A10(PLYRNUM),A9
CALLA MAKE_PLAYER_NUMBER_RIGHT
MOVI HIGHRISK,A8
CLR A10
MOVI 1801H,A11
MOVI MESSAGES_PID,A1
ADD A9,A1
MOVI SPECIAL_MESSAGE,A7
INC A9
CALLA GETPRC
MOVI 0BBH,A0
CALLA triple_sound
SLEEP 50
MOVI xDAMAGE,A8
MOVI 2,A10
MOVI 1803H,A11
DEC A9
MOVI MESSAGES_PID,A1
ADD A9,A1
MOVI SPECIAL_MESSAGE,A7
INC A9
CALLA GETPRC
DIE
DO_COMBO_MESS
MOVE @HAVE_WE_AUDITED_THIS_GAME,A0
JRNZ YES_WE_HAVE
movi AUD_COMBO,A0
calla AUD1
MOVK 1,A0
MOVE A0,@HAVE_WE_AUDITED_THIS_GAME
YES_WE_HAVE
MOVI 0BAH,A0
CALLA triple_sound
MOVE *A13(PLYRNUM),A9
MOVI HITCOMBO,A8
MOVE *A13(COMBO_COUNT),A10
CMPI 2,A10
JRLT NO_MESSAGE
;Add a couple for a better appearance!
addk 2,a10
MOVI 1803H,A11
CALLA MAKE_PLAYER_NUMBER_RIGHT
MOVI MESSAGES_PID,A1
ADD A9,A1
MOVI SPECIAL_MESSAGE,A7
INC A9
CALLA GETPRC
NO_MESSAGE
RETS
MAKE_PLAYER_NUMBER_RIGHT
CMPI 2,A9
JRLT WE_ARE_ALREADY_CORRECT
MOVE @PSTATUS,A9
DEC A9
NOT A9
ANDI 1,A9
WE_ARE_ALREADY_CORRECT
RETS
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)
SPECIAL_MESSAGE
MOVI 10H,A0
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,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
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
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
ZFLIP_POS .EQU 0D8000H
SHIFT_BARS_IN_Z
CLR A0
MOVE A0,@LAST_FLIP
SHIFT_BARS_IN_Z_MOTION
MOVE @WORLDTLY,A0,L
CMPI ZFLIP_POS,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
JRUC DONT_SHIFT_IT_FORWARD
STILL_MORE_TO_CHECK
MOVE *A8(OZPOS),A1
CMPI bak_z,A1
JREQ SHIFT_IT_FORWARD
CMPI bar_z,A1
JREQ SHIFT_IT_FORWARD
CMPI frame_z,A1
JREQ SHIFT_IT_FORWARD
CMPI name_z,A1
JRNE DONT_SHIFT_IT_FORWARD
SHIFT_IT_FORWARD
ADDI Z_FORWARD,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
JRUC DONT_SHIFT_IT_BACK
STILL_MORE_TO_CHECK_B
MOVE *A8(OZPOS),A1
CMPI bak_z+Z_FORWARD,A1
JREQ SHIFT_IT_BACK
CMPI bar_z+Z_FORWARD,A1
JREQ SHIFT_IT_BACK
CMPI frame_z+Z_FORWARD,A1
JREQ SHIFT_IT_BACK
CMPI name_z+Z_FORWARD,A1
JRNE DONT_SHIFT_IT_BACK
SHIFT_IT_BACK
SUBI Z_FORWARD,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
calla BEGINOBJ
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
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 1801H,A3
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
CLR 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,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
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
CREATE0 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
CREATE0 ICON_SPARKLE
JRUC MAYBE_A_SPARKLE
ICON_SPARKLE
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
MOVI 1802H,A3
movi DMAWNZ|M_3D|M_SCRNREL,a4 ;DMA flags
CLR 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
WHICH_SPARKLE
.LONG SPARKLE_1
.LONG SPARKLE_2
.LONG SPARKLE_3
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
******************************************************************************
.end