wwf-wrestlemania/SELECT.ASM

3323 lines
60 KiB
NASM
Executable File
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: 1066, shortly after the Battle of Hastings
*
* COPYRIGHT (C) 1993 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 11/22/93 14:24
**************************************************************
.file "select.asm"
.title "wrestling selection screens"
.width 132
.option b,d,l,t
.mnolist
.include "mproc.equ" ;Mproc equates
.include "display.equ" ;Display proc equates
.include "gsp.equ" ;Gsp asm equates
.include "sys.equ"
.include "game.equ"
.include "audit.equ"
.include "macros.h"
.include "link.equ"
.include "sound.h"
.include "plyr.equ"
.INCLUDE "SOUND.EQU"
.include "fontsimg.glo"
.include "bgndtbl.glo"
.include "imgtbl.glo"
.include "miscimg.glo"
.include "ropeimg.glo"
#*****************************************************************************
.ref current_round
.ref DO_BEATEN_GAME
.def howard_wins,digits_tbl,calc_match_time_1
.def num_wrestlers,wrestler_mugs
.def wrestler_attributes,attbars
.def wrestler_mugs2,wrestler_audits
.ref ADD_VOICE,BAKMODS,BCDBIN,BEGINOBJ_TBL,BGND_UD1
.ref BINBCD,change_image,CHECK_SCORE,civanic
.ref CLOSE_PROGRESS_SCREEN,CLOSE_SCREEN_LINE,CR_STRTP
.ref CURRENT_ANN_QUEUE,DONE_HOWARD,do_that_cycle,dpageflip
.ref entered_inits,FADE_MASTER_VOL,FIND_LOW_TABLE_LEVEL
.ref GET_ADJ,get_but_val_down,get_process_ptr,get_start_cur
.ref get_stick_val_cur,get_stick_val_down,match_time
.ref NEXT_ANN_QUEUE,no_pin_check,PCNT,pin_speed_check
.ref PIN_SPEED_TAB,PSTATUS,PUT_UP_PROGRESS,RNDPER,RNDRNG0
.ref SPECIAL_WIPEOUT,start_credbox
.ref NEXT_IN_LADDER,INIT_LADDER_TABLE
.ref NUM_OF_OPPS,CURRENT_LADDER,get_all_buttons_cur2
.ref print_message,osgemd_ascii,is_final_match
.ref UNIT_CLR,attract_mode,round_start_time,round_end_time
.REF set_volume
.REF belt_type
.if DEBUG
.ref stay_down
.endif
.ref total_matches
.ref triple_sound,winstreak_check,WIPEOUT,wmania_tune
.ref print_beaten
.ref print_inter
.ref GET_AUD
.ref match_cnt
.ref show_bonus_icons
.ref clear_icon_total
.ref del_bonus_icons
.ref wgsf24_ascii
.REF royal_rumble
.REF DO_TAG_GAME
.ref print_tag
.ref hscore_colcyc
.ref hscore_colcyc2
.ref font9_ascii,FNT9WHT_P,auto_init
#*****************************************************************************
BSSX MATCH_TIMERS,64
bssx which_player,32
BSSX index1, 16 ;player 1 cursor position
BSSX index2, 16 ;player 2 cursor position
.bss time_out, 16 ;time out flag
BSSX active_flag, 16 ;0:player 1 active, 1:player 2 active
.bss kp_p1cursor, 32
.bss blow_out, 16 ;Flag for not delaying after no buyin
.BSS SPEECH_STARTED, 16
bssx match_time_bcd,32
bssx are_we_waiting_f,32
; BSSX player_pal_pref,116*2
BSSX player_pal_pref,120*2
.bss cursor_procs,16
BSSX rr_loss,16
.BSS TEMP_PSTATUS,16
#*****************************************************************************
num_wrestlers EQU 9
.word AUD_SNDERR4,AUD_SNDERR4,AUD_SNDERR4,AUD_SNDERR4
wrestler_audits
.word AUD_BHART,AUD_BHARTHW,AUD_BHARTC,AUD_BHARTCW
.word AUD_RRAMO,AUD_RRAMOHW,AUD_RRAMOC,AUD_RRAMOCW
.word AUD_UNDER,AUD_UNDERHW,AUD_UNDERC,AUD_UNDERCW
.word AUD_YOKO,AUD_YOKOHW,AUD_YOKOC,AUD_YOKOCW
.word AUD_SMICH,AUD_SMICHHW,AUD_SMICHC,AUD_SMICHCW
.word AUD_BBBIG,AUD_BBBIGHW,AUD_BBBIGC,AUD_BBBIGCW
.word AUD_DCLOW,AUD_DCLOWHW,AUD_DCLOWC,AUD_DCLOWCW
.word 0,0,0,0
.word AUD_LLUGE,AUD_LLUGEHW,AUD_LLUGEC,AUD_LLUGECW
wrestler_auditsX
#*****************************************************************************
PLEASE_YPOS .equ 45
CONTINUE_YPOS .equ PLEASE_YPOS+157
CREDIT_LINE_YPOS .equ 110
TIMER_YPOS .equ 208
TO_CONTINUE_YPOS .equ CREDIT_LINE_YPOS+15
#*****************************************************************************
.ref OLD_PSTATUS
.ref CR_CONTP
.ref GAMSTATE
; .ref secret_damage
#*******************************
STRUCTPD
LONG #cursorimg ;UHL cursor *img
LONG #hiliteimg ;UHL hilite letter *img
WORD #stick ;UHW stick to read
LONG #which_tab
LONG #which_entry
LONG #which_level
SUBR GAME_BEATEN
;kill the ladder
calla INIT_LADDER_TABLE
MOVK INPARTY,A0
MOVE A0,@GAMSTATE
MOVI 998,A3
CALLA SNDSND
movi 2,a0
calla RNDRNG0
move a0,a3
addk 0fh,a3
calla SNDSND
MOVK 5,A11
MOVI 32,A8
CREATE FADE_PID,FADE_MASTER_VOL
calla WIPEOUT
movk 1,a0 ;page flipping on
move a0,@dpageflip
calla start_credbox
movi #plyrsel_mod,a0
move a0,@BAKMODS,L
calla BGND_UD1 ;create objects for background
clr a14
move a14,@time_out
CREATE CROUTON_PID,display_croutons
MOVE @royal_rumble,A10
JRNZ WE_PLAYED_A_TAG_TEAM
move @PSTATUS,A10
srl 1,a10
move a10,a8
MOVE a8,a1
sll 5,a1
move a8,a2
sll 4,a2
add a2,a1
addi entered_inits,a1
clr a2
move a2,*a1+,L
move a2,*a1
push a10
clr a1
move a10,a10
jrnz which_playr_set
movk 1,a1
which_playr_set
move a1,a10
CREATE PCURSOR_PID,player_cursor
pull a10
push a10
JSRP DO_BEATEN_GAME
pull a10
are_we_waiting4
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ no_need_for_inputb
sleep 1
movi CYCPID,a0
movi -1,a1
calla EXISTP
jrnz are_we_waiting4
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ no_need_for_inputb
mmtm sp,a10,a9,a8
calla do_that_cycle
mmfm sp,a10,a9,a8
jruc are_we_waiting4
no_need_for_inputb
CALLA WIPEOUT
movk 1,a0 ;page flipping on
move a0,@dpageflip
movi #hstd_mod,a0
move a0,@BAKMODS,L
CALLA BGND_UD1 ;create objects for background
movi AUD_BEATEN,A0
MOVE @belt_type,a1
jrnz got_right_audit
MOVI AUD_INTER,A0
got_right_audit
calla GET_AUD
SUBI 1,A1
CMPI 1,A1
JRGE NO_PROBLEM
MOVK 1,A1
NO_PROBLEM
CMPI 48,A1
JRLE NO_PROBLEM2
MOVI 48,A1
NO_PROBLEM2
MOVE A1,A5
MOVE @belt_type,a1
jrnz DISPLAY_RIGHT_TABLE
JSRP print_inter
SLEEP TSEC*7
RETP
DISPLAY_RIGHT_TABLE
JSRP print_beaten
calla hscore_colcyc
calla hscore_colcyc2
SLEEP TSEC*7
RETP
WE_PLAYED_A_TAG_TEAM
move @MATCH_TIMERS,a9,L
jrp #time_ok
move @MATCH_TIMERS+20h,a9,L
jrnz #time_ok
.if DEBUG
LOCKUP ;bogus timer value
.endif
movi 12340,a9 ;123.4 seconds if the value is bogus
#time_ok
CLR A10
MOVE A10,@entered_inits,L
MOVE A10,@entered_inits+32,L
MOVE A10,@entered_inits+64,L
clr a8
JSRP DO_TAG_GAME
MOVK 1,A10
MOVE A10,A8
JSRP DO_TAG_GAME
are_we_waiting5
sleep 1
movi CYCPID,a0
movi -1,a1
calla EXISTP
jrnz are_we_waiting6
calla do_that_cycle
are_we_waiting6
movi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRNZ are_we_waiting5
movi HI_INPUT_PID+1,a0
movi -1,a1
calla EXISTP
JRNZ are_we_waiting5
no_need_for_inputc
.if RR_AWARD = 1
move @royal_rumble,a14
jrnz no_scores
.endif
CALLA WIPEOUT
movk 1,a0 ;page flipping on
move a0,@dpageflip
movi #hstd_mod,a0
move a0,@BAKMODS,L
CALLA BGND_UD1 ;create objects for background
JSRP print_tag
calla hscore_colcyc
calla hscore_colcyc2
SLEEP TSEC*7
.if RR_AWARD = 1
no_scores
.endif
RETP
#hstd_mod
hstd_mod
.long slateBMOD
.word 0,0
.long 0
******************************************************************************
SUBR pin_speed_in_case
MOVE @PSTATUS,@TEMP_PSTATUS
move @total_matches,a14
jrz no_need_for_input
move @current_round,a14
cmpi 3,a14
jreq no_need_for_input
calla is_final_match
jrc no_need_for_input
movi INSELECT,a14
move a14,@GAMSTATE
move a10,a8
move a8,A1
CALLA get_process_ptr
MOVE A8,A0
SLL 5,A0
ADDI MATCH_TIMERS,A0
move *a0,A0,L
movi FIND_LOW_TABLE_LEVEL,a11
move a11,*a13(#which_level),L
clr a3
MOVI PIN_SPEED_TAB,A8
calla CHECK_SCORE
jrz no_need_for_input
move a10,A1
sll 5,a1
MOVE A10,A2
SLL 4,A2
ADD A2,A1
addi entered_inits,a1
move *a1,a1,L
jrnz no_display_anything
MOVI 998,A3
CALLA SNDSND
movi 2,a0
calla RNDRNG0
move a0,a3
addk 0fh,a3
calla SNDSND
MOVK 5,A11
MOVI 32,A8
CREATE FADE_PID,FADE_MASTER_VOL
calla WIPEOUT
movk 1,a0 ;page flipping on
move a0,@dpageflip
calla start_credbox
movi #plyrsel_mod,a0
move a0,@BAKMODS,L
calla BGND_UD1 ;create objects for background
clr a14
move a14,@time_out
CREATE CROUTON_PID,display_croutons
push a10
clr a1
move a10,a10
jrnz which_play_set
movk 1,a1
which_play_set
move a1,a10
CREATE PCURSOR_PID,player_cursor
pull a10
no_display_anything
move a10,a8
mmtm sp,a6,a7,a8,a9,a10,a11
jsrp pin_speed_check
mmfm sp,a6,a7,a8,a9,a10,a11
are_we_waiting3
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ no_need_for_input
sleep 1
movi CYCPID,a0
movi -1,a1
calla EXISTP
jrnz are_we_waiting3
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ no_need_for_input
mmtm sp,a10,a9,a8
calla do_that_cycle
mmfm sp,a10,a9,a8
jruc are_we_waiting3
no_need_for_input
MOVE @TEMP_PSTATUS,A14
MOVE @PSTATUS,A1
CMP A1,A14
JREQ NORMAL_EXIT
clr a14
move a14,@time_out
;a10 is already set up with side we are on 0 or 1
CREATE PCURSOR_PID,player_cursor
inc a10
move @active_flag,a14
or a10,a14
move a14,@active_flag
MOVI CLOCK_PID,A0
movi -1,a1
CALLA EXISTP
jrz waitloop
movi select_time,a14
move a14,*a0(PA9)
clr a14
move a14,@OLD_PSTATUS
JRUC waitloop
NORMAL_EXIT
RETP
calc_match_time_1
callr work_out_match_time
; movi 10000,a1
; sub a0,a1
JRUC STORE_MATCH_TIME
.def calc_match_time_2
calc_match_time_2
callr work_out_match_time
; movi 10000,a1
; sub a0,a1
MOVE *A10(PLYRNUM),A0
CMPI 2,A0
JRGE NO_POINT_ITS_A_DRONE
SLL 5,A0
ADDI MATCH_TIMERS,A0
MOVE *A0,A0,L
add a1,a0
cmpi 50000,a0
jrge no_bother_pin_speed_check
MOVE A0,A0
JRN no_bother_pin_speed_check
calla BINBCD
move a0,a1
JRUC STORE_MATCH_TIME
no_bother_pin_speed_check
movi -1,a1
STORE_MATCH_TIME
MOVE *A10(PLYR_SIDE),A0
CMPI 2,A0
JRGE NO_POINT_ITS_A_DRONE
SLL 5,A0
ADDI MATCH_TIMERS,A0
MOVE A1,*A0,L
NO_POINT_ITS_A_DRONE
rets
******************************************************************************
*
* Return match time in a0, format is kinda funny. Return 100 - time elapsed
* in BCD, 0xIIFF format, where II is the integer part and FF is the fractional.
* Then convert this back to hex from BCD.
SUBRP work_out_match_time
;old
move @match_time,a4,L
move a4,a1
srl 8,a4
sll 24,a1
srl 12,a1
or a1,a4
move @match_time+020h,a5
sll 16,a5
srl 16,a5
movi 100,a0
mpyu a0,a5
srl 16,a5
move a5,a0
calla BINBCD
or a4,a0
calla BCDBIN
;new
move @round_end_time,a1
move @round_start_time,a14
sub a14,a1 ;ticks
movi (100<<8)/55,a14 ;convert from 55ths to 100ths.
mpyu a14,a1
srl 8,a1
; movi 10000,a0
; sub a1,a0
; calla BINBCD
; calla BCDBIN
rets
***********
howard_wins
MOVE @SPEECH_STARTED,a0
CMPI 2,A0
jreq NO_SPEECH_COS_HOWRD_TALKIN
movi NORMAL_WINNERS,a2
CALLA is_final_match
JRNC NOT_LAST_MATCH
movi SPECIAL_CONGRATS,A2
NOT_LAST_MATCH
MOVK 2,A0
CALLA RNDRNG0
SLL 4,A0
ADD A2,A0
MOVE *A0,A0
CALLA ADD_VOICE
movk 2,a0
MOVE a0,@SPEECH_STARTED
sleep 80
clr a0
MOVE a0,@SPEECH_STARTED
die
NORMAL_WINNERS
.WORD 1FEH
.WORD L_SIGN_YOUR_NAME
.WORD SIGN_HERE_PLEASE
SPECIAL_CONGRATS
.WORD CONGRATULATIONS
.WORD L_CONGRATS
.WORD CONGRATULATIONS
SUBRP call_wrestler_name
SLEEPK 20 ;wait 1/3 sec before doing anything.
#wait SLEEPK 1
MOVE @SPEECH_STARTED,A0
JRNZ #wait
MOVE @NEXT_ANN_QUEUE,A1,L
MOVE @CURRENT_ANN_QUEUE,A2,L
CMP A1,A2
JRNE NO_SPEECH_COS_HOWRD_TALKIN
MOVK 1,A0
MOVE A0,@SPEECH_STARTED
MOVE *A8,A9
SLL 5,A9
ADDI WHICH_SPEECH,A9
MOVE *A9,A0
CALLA ADD_VOICE
MOVE *A8(010H),A0
CALLA PRCSLP
CLR A0
MOVE A0,@SPEECH_STARTED
NO_SPEECH_COS_HOWRD_TALKIN
DIE
;Bret
;Razor
;Taker
;Yoko
;Shawn
;Bam Bam
;Doink
;spare
;Lex
WHICH_SPEECH
.WORD 131H,70
.WORD 12DH,44
.WORD 12FH,54
.WORD 132H,59
.WORD 12CH,55
.WORD 12EH,76
.WORD 12BH,54
.WORD 0,0
.WORD 130H,47
SUBR buyin_select
;This turns on the player select background, etc.
;If this is a one player game, then display standard challenger needed
;message on the correct side. Then display a please continue message
;on the other side, along with a buyin timer.
;If this is a two player game, turn on the cursor, etc. for the winning
;player. Then display a please continue message on the other side, along
;with a buyin timer.
;If a player chooses to let his buyin timer expire, then check to see if
;he had achieved a high score. If so, display the initials on his side
;and let him pick. The other player (or none) will stay in limbo.
movi INWAITCONT,a14 ;set GAMSTATE
move a14,@GAMSTATE
SUBR select_screen
;clear royal_rumble at the start of every select screen
clr a14
move a14,@royal_rumble
calla display_blank
clr a0
; move a0,@secret_damage
MOVE A0,@SPEECH_STARTED
calla WIPEOUT ;kill any attract modes or old
;battles lying around.
movi INSELECT,a14 ;set GAMSTATE
move a14,@GAMSTATE
movi SELECT_PID,a14 ;set our PID
move a14,*a13(PROCID)
.if DEBUG
;Temp, stuff @index1,2 for testing wrestlers.
move @skip_select,a0
jrz #noskp
;0 (Bret)
;1 (Razor)
;2 (Taker)
;3 (Yoko)
;4 (Shawn)
;5 (Bam Bam)
;6 (Doink)
;7 spare
;8 (Lex)
calla display_unblank
movi 4,a0
move a0,@index1
movi 8,a0
move a0,@index2
; MOVK 1,A0
; .ref BONUS_POWER
; MOVE A0,@BONUS_POWER
move @skip_select,a0
jrp #skp
.ref NUM_OPPS
movk 1,a0
move a0,@NUM_OPPS
#skp
; RETP
clr a0
calla get_but_val_cur
btst PLAYER_BLOCK_BIT,a0
jrz #no_block1
movk 1,a14
move a14,@stay_down
andni PLAYER_BLOCK_VAL,a0
#no_block1
X16 a0
addi #select_table,a0
move *a0,a14
move a14,@index1
movi 1,a0
calla get_but_val_cur
btst PLAYER_BLOCK_BIT,a0
jrz #no_block2
movk 1,a14
move a14,@stay_down
andni PLAYER_BLOCK_VAL,a0
#no_block2
X16 a0
addi #select_table,a0
move *a0,a14
move a14,@index2
RETP
;lookup table
#df equ 8 ;LEX
#select_table
.word #df
.word 3 ;1 punch - YOKO
.word #df,#df
.word 0 ;4 spunch - BRET
.word 8 ;5 punch + spunch - LEX
.word #df,#df
.word 1 ;8 kick - RAZOR
.word 6 ;9 punch + kick - DOINK
.word #df,#df,#df
.word #df,#df,#df
.word 4 ;16 skick - SHAWN
.word #df,#df,#df
.word 5 ;20 spunch + skick - BAM BAM
.word #df,#df,#df
.word 2 ;24 kick + skick - TAKER
.word #df,#df,#df
.word #df,#df,#df,#df
BSSX skip_select, 16
#noskp
.endif
MOVK 5,A11
MOVI 32,A8
CREATE FADE_PID,FADE_MASTER_VOL
clr a0
move a0,@blow_out
movk 1,a0 ;page flipping on
move a0,@dpageflip
movi #plyrsel_mod,a0
move a0,@BAKMODS,L
calla BGND_UD1 ;create objects for background
;play wrestlemania tune
.if MUSIC_ON
MOVE @match_cnt,A0
JRNZ NO_NEW_TUNE
CREATE0 wmania_tune
NO_NEW_TUNE
.endif
CREATE CROUTON_PID,display_croutons
calla start_credbox
;Initialize flags
move @PSTATUS,a14
move a14,@active_flag
clr a14
move a14,@time_out
;create the player cursors
clr a10
move @rr_loss,a14
jrz #not_rr
move a10,@cursor_procs
#not_rr
CREATE PCURSOR_PID,player_cursor
move a0,@kp_p1cursor,L
CREATE0 blink_rndper
movk 1,a10
CREATE PCURSOR_PID,player_cursor
;wait for them to finish up
SLEEPK 1
movk 1,a0
move a0,@DISPLAYON
calla display_unblank
waitloop
SLEEPK 1
move @are_we_waiting_f,a14
jrle no_we_are_not
; jrz no_we_are_not
; jrn no_we_are_not
dec a14
move a14,@are_we_waiting_f
no_we_are_not
move @active_flag,a14
jrnz waitloop
move @OLD_PSTATUS,a14
jrnz waitloop
;Players have chosen their guys. wait a sec, then bail
movi 30,a8
#final_waitloop
SLEEPK 1
move @active_flag,a14 ;don't quit if someone jumps in here
jrnz waitloop
move @blow_out,a0
jrnz #out
dsj a8,#final_waitloop
#out
RETP
SUBRP display_croutons
;Why is this a process?
;Draw the croutons and their associated pix
move @PSTATUS,a0
; jrnz #gocrut
; SLEEPK 1
; jruc display_croutons
;#gocrut
movi crouton_pos_table,a9
movi #crouton_pic_table,a10
move *a9+,a0
#crouton_loop
move *a9+,a1
sll 16,a0
sll 16,a1
move *a10+,a2,L
movi #crutpic_z,a3
movi DMAWNZ,a4
movi CLSNEUT,a5
clr a6
clr a7
calla BEGINOBJW
move *a9+,a0
jrnz #crouton_loop
; CREATE0 select_clock
; move a0,a10
; CREATE0 clock_digits
DIE
#plyrsel_mod
.long wwfselbkBMOD
.word -40,0
.long choiceBMOD
.word 3,256
.long 0
#crutplt_z equ 1
hiplate_z equ 2 ;oscillates from 2 to 3
#crutpic_z equ 4
hilite_z equ 5
#baseshad_z equ 1
#hishad_z equ 2
#attplt_z equ 3
#sidebar_z equ 3
#nameshad_z equ 5
#namebar_z equ 7
atttxt_z equ 8
name_z equ 9
mugshot_z equ 1
#crouton_pic_table
.long CRUT_DK
.long CRUT_RR
.long CRUT_UN
.long CRUT_YK
.long CRUT_SM
.long CRUT_BM
.long CRUT_BH
.long CRUT_LX
crouton_pos_table
.word 164,45
.word 204,45
.word 164,90
.word 204,90
.word 164,135
.word 204,135
.word 164,180
.word 204,180
.word 0
#*****************************************************************************
* Process that handles player selection for one player.
* >a10 = player (0 or 1)
STRUCTPD
LONG #HILITE ;UHL *hilite ring
LONG #HIPLATE ;UHL *color crouton
LONG #NAME ;UHL *name obj (message *obj)
WORD #RND_DEST ;UHW target if in random mode
LONG #MUG1
LONG #MUG2
LONG #MUG3
LONG #MUG4
LONG #MUG5
LONG #MUG6
LONG #MUG7
LONG #MUG8
LONG #ATT1
LONG #ATT2
LONG #ATT3
LONG #ATT4
WORD #CNTR ;Flashing cursor delay
;player info struct
#PI_HILITE equ 0 ;UHL hilite box TBL_ hdr
#PI_HIPLATE equ 20h ;UHL hilite plate TBL_ hdr
#PI_STARTPOS equ 40h ;UHW starting pos (index)
#PI_MUGPOS equ 50h ;UHL mugshot [y,x]
#PI_MUGXPOS equ 50h ;UHW mugshot x
#PI_MUGYPOS equ 60h ;UHW mugshot y
#PI_MUGCTRL equ 70h ;UHW mugshot OCTRL
#PI_STARTNAME equ 80h ;UHL starting name TBL_ hdr
#PI_ATTTXT equ 0A0h ;UHL atttribute text TBL_ hdr
#PI_INDEX equ 0C0h ;UHL write selection word here
#PI_MOVESOUND equ 0E0h ;UHW cursor move triple_sound
#PI_SELSOUND equ 0F0h ;UHW select sound
#rnd_movespeed equ 5 ;ticks between rndsel moves
#rnd_wander equ 14 ;rnd moves before home-in begins
SUBRP player_cursor
;reg use
; a6 = ticks until another move is allowed (debounce)
; a6 = ticks until next move (random mode)
; a7 = moves until home-in (random mode)
; a9 = player info struct pointer
; a10 = player number
; a11 = position index (0-9)
;aim a9 at #p?info
move a10,a9
X32 a9
addi #info,a9
move *a9,a9,L
;initialize the index word to -1
movi -1,a14
move *a9(#PI_INDEX),a0,L
move a14,*a0,W
;initialize random dest to -1
movi -1,a14
move a14,*a13(#RND_DEST)
clr a0
move a0,*a13(#NAME),L
movk 30,a0
move a0,*a13(#CNTR)
;active?
move @PSTATUS,a14
btst a10,a14
jrnz #begin_select
move @OLD_PSTATUS,a14
btst a10,a14
jrz #norm
;This guy lost his last match:
;did this guy get a high win streak ?
move a10,a8
mmtm sp,a6,a7,a8,a9,a10,a11
JSRP winstreak_check
mmfm sp,a6,a7,a8,a9,a10,a11
; .ref wrestler_number
; .ref process_ptrs
;
; PUSH a9
; movi process_ptrs,a9
;#find_loop
; move *a9(PLYRNUM),a0
; cmp a10,a0
; jrz #found
; addi 32,a9
; jruc #find_loop
;#found
; move *a9(WRESTLERNUM),a0,W
; move a0,@wrestler_number,L
; PULL a9
;wait for the enter initials stuff to end
are_we_waiting
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ FINISHED_INPUTTING
SLEEPK 1
movi CYCPID,a0
movi -1,a1
calla EXISTP
jrnz are_we_waiting
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ FINISHED_INPUTTING
mmtm sp,a10,a9,a8
calla do_that_cycle
mmfm sp,a10,a9,a8
jruc are_we_waiting
FINISHED_INPUTTING
move @auto_init,a14
jrz #no_ai
movi auto_str,a2
calla print_message
clr a14
move a14,@auto_init
#no_ai
calla show_bonus_icons
;create the name text
move *a9(#PI_STARTNAME),a0,L
calla BEGINOBJ_TBL
move a8,*a13(#NAME),L
;Display please continue message
;Display price to continue
;Turn on continue timer at bottom of screen (Attribute area)
;Wait for him to make a decision
;If he continues, turn on cursor, etc.
;If he does not continue, start the other players time out for
;player selection (If other plyr is present)
CREATE0 buyin_counter
callr buyin_text
;Inactive. wait for buyin
;Display the insert coin/press start message
#enough_money1
calla CR_CONTP
jrhs #enough_money2
;There's not enough money. flash 'insert coins' message and wait
move *a13(#NAME),a8,L
movi WF_INSERT,a0
calla civanic
jruc #start_waitloop1
#enough_money2
;There's enough money. flash 'press start' message and wait
move *a13(#NAME),a8,L
movi WF_START,a0
calla civanic
#start_waitloop1
move @OLD_PSTATUS,a14
btst a10,a14
jrnz #okz
move @PSTATUS,a14
btst a10,a14
jrnz #okz
;Timer has run out on this player
move a10,a8
calla clear_icon_total
calla del_bonus_icons
move @PSTATUS,a0
jrnz #still
move @rr_loss,a0
jrz do_game_over
move @cursor_procs,a0
jrz do_game_over
move a10,a0
addk 1,a0
move @active_flag,a14
or a0,a14
move a14,@active_flag
jruc #still
; jruc do_game_over
;Goto game over.
SUBR THIS_GAME_IS_BEATEN
CLR A0
MOVE A0,@PSTATUS
movi INGAMEOVER,a14 ;set GAMSTATE
move a14,@GAMSTATE
movi GAMEOVER_PID,a14 ;set our PID
move a14,*a13(PROCID)
; ;put up the sneak preview screen
; calla display_blank
; calla WIPEOUT
; movk 1,a0 ;page flipping on
; move a0,@dpageflip
; movi hstd_mod,a0
; move a0,@BAKMODS,L
; CALLA BGND_UD1 ;create objects for background
;
; movi #win1_msg,a2
; calla print_message
;
; movi #win2_msg,a2
; calla print_message
;
; movi #win3_msg,a2
; calla print_message
;
; calla display_unblank
;
; SLEEP TSEC*10
SUBR do_game_over
;kill the ladder
calla INIT_LADDER_TABLE
clr a14
move a14,@rr_loss
move a14,@PSTATUS
movi INGAMEOVER,a14 ;set GAMSTATE
move a14,@GAMSTATE
movi GAMEOVER_PID,a14 ;set our PID
move a14,*a13(PROCID)
calla display_blank
calla WIPEOUT
.ref wsf14_ascii,GENERIC_DISPLAY
JSRP GENERIC_DISPLAY
movi LN1b_setup,a2
calla setup_message
movi CLSNEUT|TYPTEXT|SUBMES1,a0
move a0,@mess_objid ;OBJ ID's for text
movi #str_game,a4
calla print_string_C2
movi LN2b_setup,a2
calla setup_message
movi CLSNEUT|TYPTEXT|SUBMES1,a0
move a0,@mess_objid ;OBJ ID's for text
movi #str_over,a4
calla print_string_C2
; .ref show_wrestler_end_story
; movi 0,a1
; clr a0
; calla show_wrestler_end_story
; SLEEP TSEC*5
SLEEPK 1
MOVI -1,A11
MOVI 100,A8
CREATE FADE_PID,FADE_MASTER_VOL
calla display_unblank
SLEEP TSEC*4
calla UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS
movi AMODE_PID,a0
move a0,*a13(PROCID)
CLR A3
CALLA SNDSND
movi ADJVOLUME,a0
calla GET_ADJ
BADCHK a0,0,255,28 ;reg, lo, hi, val if bad
calla set_volume
clr a8
calla clear_icon_total
movk 1,a8
calla clear_icon_total
jauc attract_mode
LN1b_setup
JAM_STR wgsf24_ascii,6,0,200,128-41,WGSF_Y_P,0
LN2b_setup
JAM_STR wgsf24_ascii,6,0,200,128,WGSF_Y_P,0
#str_game
.byte "GAME",0
#str_over
.byte "OVER",0
.even
;#win1_msg
; JAM_STR osgemd_ascii,10,0,200,50,GOLD,print_string_C2
; .byte "THANK YOU FOR PLAYING",0,0
; .even
;
;#win2_msg
; JAM_STR osgemd_ascii,10,0,200,90,GOLD,print_string_C2
; .byte "THIS SNEAK PREVIEW",0,0
; .even
;
;#win3_msg
; JAM_STR osgemd_ascii,10,0,200,130,GOLD,print_string_C2
; .byte "OF WRESTLEMANIA BY MIDWAY",0,0
; .even
#still
;Other player is in game
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
calla obj_del1c
;If other player has already picked his wrestler, just blow out of here
;otherwise, goto challenger needed screen stuff...
move @active_flag,a14 ;don't quit if someone jumps in here
jrnz #norm
;Tell buyin_select proc to wake up and exit!
movk 1,a0
move a0,@blow_out
DIE
#okz
SLEEPK 1
callr #blink
move @PSTATUS,a14
btst a10,a14
jrz #enough_money1
; jrz #start_waitloop1
move *a8(OXPOS),a0
andi 1ffh,a0
move a0,*a8(OXPOS)
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
calla obj_del1c
SLEEPK 1 ;Fix pal glitch!
jruc #begin_select
#norm
move *a13(#NAME),a8,L
jrnz no_need_to_create_name
;create the name text
move *a9(#PI_STARTNAME),a0,L
calla BEGINOBJ_TBL
move a8,*a13(#NAME),L
no_need_to_create_name
;Place a message which reads:
;Challenger needed!
;x credits to start
;Unless we are in freeplay! Then
;just display challenger needed centered
;in the box!
movk ADJFREPL,a0 ;Are we in free play?
calla GET_ADJ
jrz #not_freeply
;Print free play
movi #ln0_setup,a2
move a10,a10
jrz #ok2c
movi #ln0_setupb,a2
#ok2c calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text0,a4
calla print_string_C2
;Print centered "challenger needed" message
movi #ln1_setup,a2
move a10,a10
jrz #ok
movi #ln1_setupb,a2
#ok calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text,a4
calla print_string_C2
movi #ln2_setup,a2
move a10,a10
jrz #ok4
movi #ln2_setupb,a2
jruc #ok4
#not_freeply
;Print how many credits to start
PUSH a8
movk ADJCSTRT,a0
calla GET_ADJ ;GET NUMBER NEEDED
move a0,a3
cmpi 10,a0
jrlt #max
movk 9,a0
#max
sll 5,a0
addi digits_tbl,a0
move *a0,a2,L ;* image
movi [050,0],a0 ;x pos
cmpi 1,a3
jrnz #not1
movi [054,0],a0 ;x pos
#not1 move a10,a10
jrz #zp1
movi [0122h,0],a0 ;x pos
cmpi 1,a3
jrnz #zp1
movi [0126h,0],a0 ;x pos
#zp1
movi [110,0],a1 ;y pos
movi 104+200,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
movi CLSNEUT|TYPTEXT|SUBOVRHED,a5
add a10,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi FNT9YEL_P,b0
calla BEGINOBJP
PULL a8
movi #ln3_setup,a2
move a10,a10
jrz #ok2
movi #ln3_setupb,a2
#ok2 calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text3,a4
movk ADJCSTRT,a0
calla GET_ADJ ;GET NUMBER NEEDED
cmpi 1,a0
jrnz #not1b
movi #str_text3b,a4
#not1b
calla print_string_C2
movi #ln4_setup,a2
move a10,a10
jrz #ok2B
movi #ln4_setupb,a2
#ok2B calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text4,a4
calla print_string_C2
;Print "challenger needed" message
movi #ln1_setupx,a2
move a10,a10
jrz #ok3
movi #ln1_setupxb,a2
#ok3 calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text,a4
calla print_string_C2
movi #ln2_setupx,a2
move a10,a10
jrz #ok4
movi #ln2_setupxb,a2
#ok4 calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text2,a4
calla print_string_C2
;Inactive. wait for buyin
;Create the insert coin/press start message
#enough_money
calla CR_STRTP
jrhs #enough_money3
;There's not enough money. flash 'insert coins' message and wait
move *a13(#NAME),a8,L
movi WF_INSERT,a0
calla civanic
jruc #start_waitloop
#enough_money3
;There's enough money. flash 'press start' message and wait
move *a13(#NAME),a8,L
movi WF_START,a0
calla civanic
#start_waitloop
SLEEPK 1
callr #blink
move @PSTATUS,a14
btst a10,a14
jrz #enough_money
; jrz #start_waitloop
move *a8(OXPOS),a0
andi 1ffh,a0
move a0,*a8(OXPOS)
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
calla obj_del1c
SLEEPK 1 ;Fix pal glitch!
jruc #begin_select
#ln0_setup
JAM_STR font9_ascii,8,0,81,120,FNT9YEL_P,0
#ln0_setupb
JAM_STR font9_ascii,8,0,321,120,FNT9YEL_P,0
#ln1_setup
JAM_STR font9_ascii,8,0,81,80,FNT9YEL_P,0
#ln1_setupb
JAM_STR font9_ascii,8,0,321,80,FNT9YEL_P,0
#ln2_setup
JAM_STR font9_ascii,8,0,81,95,FNT9YEL_P,0
#ln2_setupb
JAM_STR font9_ascii,8,0,321,95,FNT9YEL_P,0
#ln1_setupx
JAM_STR font9_ascii,8,0,81,60,FNT9YEL_P,0
#ln1_setupxb
JAM_STR font9_ascii,8,0,321,60,FNT9YEL_P,0
#ln2_setupx
JAM_STR font9_ascii,8,0,81,75,FNT9YEL_P,0
#ln2_setupxb
JAM_STR font9_ascii,8,0,321,75,FNT9YEL_P,0
#ln3_setup
JAM_STR font9_ascii,8,0,81,110,FNT9YEL_P,0
#ln3_setupb
JAM_STR font9_ascii,8,0,321,110,FNT9YEL_P,0
#ln4_setup
JAM_STR font9_ascii,8,0,81,125,FNT9YEL_P,0
#ln4_setupb
JAM_STR font9_ascii,8,0,321,125,FNT9YEL_P,0
#str_text
.string "CHALLENGER",0
#str_text0
.string "FREE PLAY",0
#str_text2
.string "NEEDED!",0
#str_text3
.string " CREDITS",0
#str_text3b
.string " CREDIT",0
#str_text4
.string "TO START",0
.even
#begin_select
MOVE @no_pin_check,A0
JRNZ are_we_waiting2
calla is_final_match
jrc are_we_waiting2
move a10,a8
mmtm sp,a6,a7,a8,a9,a10,a11
JSRP pin_speed_check
mmfm sp,a6,a7,a8,a9,a10,a11
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
jrz no_set_it_later
move a10,a0
inc a0
neg a0
move a0,@are_we_waiting_f
no_set_it_later
; move @PSTATUS,A0
; CMPI 3,A0
; JREQ are_we_waiting2
;
; movi 60,a0
; move a0,@are_we_waiting_f
are_we_waiting2
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ FINISHED_INPUTTING2b
sleep 1
movi CYCPID,a0
movi -1,a1
calla EXISTP
jrnz are_we_waiting2
move a10,a0
addi HI_INPUT_PID,a0
movi -1,a1
calla EXISTP
JRZ FINISHED_INPUTTING2b
mmtm sp,a10,a9,a8
calla do_that_cycle
mmfm sp,a10,a9,a8
jruc are_we_waiting2
FINISHED_INPUTTING2b
move @are_we_waiting_f,a0
move a10,a1
inc a1
neg a1
cmp a1,a0
jrne FINISHED_INPUTTING2
movi 60,a0
move a0,@are_we_waiting_f
FINISHED_INPUTTING2
MOVI CLOCK_PID,A0
movi -1,a1
CALLA EXISTP
JRNZ CLOCK_ALREADY_TICKING
PUSH A10
CREATE CLOCK_PID,select_clock
move a0,a10
CREATE0 clock_digits
PULL A10
CLOCK_ALREADY_TICKING
move *a13(#NAME),a8,L
jrnz no_need_to_create
;create the name text
move *a9(#PI_STARTNAME),a0,L
calla BEGINOBJ_TBL
move a8,*a13(#NAME),L
no_need_to_create
move @total_matches,a14
jrnz HOWARD_ALREADY_GOING
move @DONE_HOWARD,a14
jrnz HOWARD_HAS_SPOKEN
GOOD_EVENING
movi 1Fbh,a0
CALLA ADD_VOICE
movi 1Fch,a0
CALLA ADD_VOICE
movi 1Fdh,a0
CALLA ADD_VOICE
movk 1,a0
move a0,@DONE_HOWARD
JRUC HOWARD_HAS_SPOKEN
HOWARD_ALREADY_GOING
move @DONE_HOWARD,a14
jrnz HOWARD_HAS_SPOKEN
MOVI 100,A0
CALLA RNDPER
jrls HOWARD_HAS_SPOKEN
SUBI 50,A0
JRN GOOD_EVENING
movi 1Ffh,a0
CALLA ADD_VOICE
movk 1,a0
move a0,@DONE_HOWARD
HOWARD_HAS_SPOKEN
;set our active bit if it's not already set
move @active_flag,a14
move a10,a0
inc a0
or a0,a14
move a14,@active_flag
;initialize index
move *a9(#PI_STARTPOS),a11
;initialize #MUG?
movk 8,a0
clr a1
move a13,a2
addi #MUG1,a2
#initloop
move a1,*a2+,L
dsj a0,#initloop
; ;create our attrib text
; move *a9(#PI_ATTTXT),a0,L
; calla BEGINOBJ_TBL
; move *a8(OXVAL),a0,L
; move *a8(OYVAL),a1,L
;
; ;create the att bars
; addi [63,0],a0
; addi [12,0],a1
; movi ATTMTR_0,a2
; movi atttxt_z,a3
; movi DMAWNZ,a4
; movi CLSNEUT,a5
; clr a6
; clr a7
;
; PUSH a10,a11
;
; movi 4,a10 ;bar count
; move a13,a11
; addi #ATT1,a11
;
;#abc_loop
; PUSH a0,a1,a2,a3,a4,a5,a6,a7
; calla BEGINOBJ
; PULL a0,a1,a2,a3,a4,a5,a6,a7
; move a8,*a11+,L
; addi [8,0],a1
; dsj a10,#abc_loop
; PULL a10,a11
;create our cursors
move *a9(#PI_HILITE),a0,L
calla BEGINOBJ_TBL
move a8,*a13(#HILITE),L
move *a9(#PI_HIPLATE),a0,L
calla BEGINOBJ_TBL
move a8,*a13(#HIPLATE),L
jruc #first_adjust
#blink
move *a13(#CNTR),a0
dec a0
move a0,*a13(#CNTR)
jrp #cont
movk 22,a0
move a0,*a13(#CNTR)
move *a8(OXPOS),a0
xori 1000h,a0
move a0,*a8(OXPOS)
#cont
rets
.if 0
;Color cycle cursors...
;Good example for future cycles....
PUSH a8,a9,a10,a11
move a10,a10
jrz #blue
movi [1,1],a8
movi CRHI_R_P,a9
movi redcyc_tbl,a10
movk 4,a11
CREATE CYCPID,CYCLE_TABLE
jruc #out
#blue
movi [1,1],a8
movi CRHI_B_P,a9
movi blucyc_tbl,a10
movk 4,a11
CREATE CYCPID,CYCLE_TABLE
#out PULL a8,a9,a10,a11
jruc #first_adjust
blucyc_tbl
.word 0041fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0081fh,00c1fh,0101fh,0141fh,0181fh
.word 01c1fh,0201fh,0241fh,0281fh,02c1fh,0301fh,0341fh,0381fh
.word 03c1fh,0401fh,0441fh,0481fh,04c1fh,0501fh,0541fh,0581fh
.word 05c1fh,0601fh,0641fh,0681fh,06c1fh,0701fh
.word 0741fh,0701fh,06c1fh,0681fh,0641fh,0601fh,05c1fh
.word 0581fh,0541fh,0501fh,04c1fh,0481fh,0441fh,0401fh,03c1fh
.word 0381fh,0341fh,0301fh,02c1fh,0281fh,0241fh,0201fh,01c1fh
.word 0181fh,0141fh,0101fh,00c1fh,0081fh,0041fh
.word 0041fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0001fh
.word 0081fh,00c1fh,0101fh,0141fh,0181fh
.word 01c1fh,0201fh,0241fh,0281fh,02c1fh,0301fh,0341fh,0381fh
.word 03c1fh,0401fh,0441fh,0481fh,04c1fh,0501fh,0541fh,0581fh
.word 05c1fh,0601fh,0641fh,0681fh,06c1fh,0701fh
.word 0741fh,0701fh,06c1fh,0681fh,0641fh,0601fh,05c1fh
.word 0581fh,0541fh,0501fh,04c1fh,0481fh,0441fh,0401fh,03c1fh
.word 0381fh,0341fh,0301fh,02c1fh,0281fh,0241fh,0201fh,01c1fh
.word 0181fh,0141fh,0101fh,00c1fh,0081fh,0041fh
.word -1
redcyc_tbl
.word 07c20h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c40h,07c60h,07c80h,07ca0h,07cc0h
.word 07ce0h,07d00h,07d20h,07d40h,07d60h,07d80h,07da0h,07dc0h
.word 07de0h,07e00h,07e20h,07e40h,07e60h,07e80h,07ea0h
.word 07ec0h,07ee0h,07f00h,07f20h,07f40h,07f60h,07f80h
.word 07fa0h,07f80h,07f60h,07f40h,07f20h,07f00h,07ee0h,07ec0h
.word 07ea0h,07e80h,07e60h,07e40h,07e20h,07e00h,07de0h
.word 07dc0h,07da0h,07d80h,07d60h,07d40h,07d20h,07d00h,07ce0h
.word 07cc0h,07ca0h,07c80h,07c60h,07c40h,07c20h
.word 07c20h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c00h
.word 07c40h,07c60h,07c80h,07ca0h,07cc0h
.word 07ce0h,07d00h,07d20h,07d40h,07d60h,07d80h,07da0h,07dc0h
.word 07de0h,07e00h,07e20h,07e40h,07e60h,07e80h,07ea0h
.word 07ec0h,07ee0h,07f00h,07f20h,07f40h,07f60h,07f80h
.word 07fa0h,07f80h,07f60h,07f40h,07f20h,07f00h,07ee0h,07ec0h
.word 07ea0h,07e80h,07e60h,07e40h,07e20h,07e00h,07de0h
.word 07dc0h,07da0h,07d80h,07d60h,07d40h,07d20h,07d00h,07ce0h
.word 07cc0h,07ca0h,07c80h,07c60h,07c40h,07c20h
.word -1
.endif
#adjust
move *a9(#PI_MOVESOUND),a0
move *a13(#RND_DEST),a14
jrn #move_sound_ok
movi >DD,a0
#move_sound_ok
calla triple_sound
callr #erase_mugshot
#first_adjust
callr #place_cursor
callr #draw_mugshot
callr #update_name
; callr #update_attbars
;set a6 to debounce value if not rndsel, or to move time if rndsel
move *a13(#RND_DEST),a14
jrnn #waitloop
movk 3,a6
clr a0
move a0,*a8(OCONST) ;Clr color
move a0,*a13(#CNTR)
#waitloop
callr #place_cursor
;flash the hilightes
move *a13(#HIPLATE),a8,L
move *a8(OZPOS),a14
xori 1,a14
move a14,*a8(OZPOS)
move *a13(#HILITE),a8,L
move *a8(OZPOS),a14
xori 1,a14
move a14,*a8(OZPOS)
PUSHP a6,a7
SLEEPK 1
PULLP a6,a7
;Flash cursors white
move *a13(#CNTR),a14
dec a14
move a14,*a13(#CNTR)
jrp #normz
movk 8,a14
move a14,*a13(#CNTR)
PUSH a6,a7,a9
movi 0202h,a9
CREATE0 FLASHME
.ref FLASHME
PULL a6,a7,a9
#normz
;are we in random mode?
move *a13(#RND_DEST),a14
jrn #not_rndsel
;we're in random select
dsj a6,#waitloop
;time to move again
movi #rnd_movespeed,a6 ;set time to next move
dec a7
jrp #move_at_random
;move toward final destination
;if we're there, take it
move *a13(#RND_DEST),a14
cmp a14,a11
jreq #but_hit
;not there. one time in three, move at random anyway
movk 3,a0
calla RNDRNG0
TEST a0
jrz #move_at_random
;if we're in the correct row, move sideways
move *a13(#RND_DEST),a14
xor a11,a14
srl 1,a14
jrz #rnd_move_sideways
;okay, move toward the correct row
move *a13(#RND_DEST),a14
cmp a11,a14
jrlt #stick_up
jruc #stick_down
#move_at_random
;move in a random direction, but only in legal directions
movk 2,a0
calla RNDRNG0
cmpi 2,a0
jreq #rnd_move_up
cmpi 1,a0
jreq #rnd_move_down
;move sideways by toggling bit zero in the index
#rnd_move_sideways
xori 1,a11
jruc #adjust
#rnd_move_up
cmpi 2,a11
jrge #stick_up
;moving up isn't legal. move sideways or down
movi 1,a0
calla RNDRNG0
TEST a0
jrz #rnd_move_sideways
jruc #stick_down
#rnd_move_down
cmpi 5,a11
jrle #stick_down
;moving down isn't legal. move sideways or up
movi 1,a0
calla RNDRNG0
TEST a0
jrz #rnd_move_sideways
jruc #stick_up
#not_rndsel
;if time is out, pick whoever we're on.
move @time_out,a14
jrnz #but_hit
;begin random select?
move a10,a0
calla get_start_cur
jrz #button_checks
;start is down. check stick
move a10,a0
calla get_stick_val_cur
btst JOYUP,a0
jrz #button_checks
;stick is up. check position
move *a9(#PI_STARTPOS),a14
cmp a11,a14
jreq #begin_random_select
#button_checks
move @are_we_waiting_f,a14
jrn no_worry_about_it
jrnz no_check_buts_yet
no_worry_about_it
;button checks
move a10,a0
calla get_but_val_down
TEST a0
jrnz #but_hit
no_check_buts_yet
dec a6
jrp #waitloop
clr a6
;stick checks
move a10,a0
calla get_stick_val_down
btst JOYDN,a0
jrnz #stick_down
btst JOYUP,a0
jrnz #stick_up
btst JOYLFT,a0
jrnz #stick_left
btst JOYRGT,a0
jrnz #stick_right
jruc #waitloop
#stick_down
;add 2 unless the index is 6 or 7
cmpi 6,a11
jrge #waitloop
addi 2,a11
jruc #adjust
#stick_up
;sub 2 unless index is 0 or 1
cmpi 2,a11
jrlt #waitloop
subi 2,a11
jruc #adjust
#stick_left
;sub 1 unless index is even
btst 0,a11
jrz #waitloop
dec a11
jruc #adjust
#stick_right
;add 1 unless index is odd
btst 0,a11
jrnz #waitloop
inc a11
jruc #adjust
#begin_random_select
;Print text message
movi #message_setup,a2
move a10,a10
jrz #p1m
movi #message_setup2,a2
#p1m
calla setup_message
movi CLSNEUT|TYPTEXT|SUBMES1,a0
move a10,a10
jrz #p1x
movi CLSNEUT|TYPTEXT|SUBMES2,a0
#p1x
move a0,@mess_objid
movi #message_string,a4
calla print_string_C2
movi 7,a0
calla RNDRNG0
move a0,*a13(#RND_DEST)
movi #rnd_movespeed,a6
movi #rnd_wander,a7
jruc #waitloop
.ref font9_ascii
.ref pal_getf,setup_message
.ref mess_objid,print_string_C2
blink_rndper
movi FNT9RED_P,a0
calla pal_getf
move a0,a9
movi FNT9WHT_P,a0
calla pal_getf
movi OBJLST,a14
#lpz
move *a14,a14,L
jrz #x
move *a14(OPAL),a2
cmp a0,a2
jrne #lpz
move *a14(OID),a2
cmpi CLSNEUT|TYPTEXT|SUBMES1,a2
jreq #lpdo
cmpi CLSNEUT|TYPTEXT|SUBMES2,a2
jrne #lpz
#lpdo
move a9,*a14(OPAL)
jruc #lpz
#x SLEEPK 4
movi FNT9RED_P,a0
calla pal_getf
move a0,a9
movi FNT9WHT_P,a0
calla pal_getf
movi OBJLST,a14
#lp2
move *a14,a14,L
jrz #x2
move *a14(OPAL),a2
cmp a9,a2
jrne #lp2
move *a14(OID),a2
cmpi CLSNEUT|TYPTEXT|SUBMES1,a2
jreq #lpdo2
cmpi CLSNEUT|TYPTEXT|SUBMES2,a2
jrne #lp2
#lpdo2
move a0,*a14(OPAL)
jruc #lp2
#x2 SLEEPK 7
jruc blink_rndper
#message_setup
JAM_STR font9_ascii,5,0,79,15,FNT9WHT_P,0
#message_setup2
JAM_STR font9_ascii,5,0,321,15,FNT9WHT_P,0
#message_string
.string "CALLA RNDPER",0
.even
#but_hit
movi player_pal_pref,a1
move a10,a10
jrz #is_p1
addk 16,a1
#is_p1
move a10,a0
calla get_stick_val_cur
jrz #no_pref
move a10,a0
calla get_but_val_cur
jrz #no_pref
movk 4,a14
btst 0,a0 ; PUNCH
jrnz #pp_pref
movk 7,a14
btst 4,a0 ; SKICK
jrnz #pp_pref
movk 5,a14
btst 2,a0 ; SPUNCH
jrnz #pp_pref
movk 6,a14
btst 3,a0 ; KICK
jrnz #pp_pref
#no_pref
clr a14
#pp_pref
move a14,*a1
;they hit a button. Stick 'em with the current guy.
;Erase rndper message for this player
movi CLSNEUT|TYPTEXT|SUBMES1,a0
move a10,a10
jrz #p1c
movi CLSNEUT|TYPTEXT|SUBMES2,a0
#p1c
calla obj_del1c
move *a9(#PI_INDEX),a0,L
;rewire kludge
move a11,a14
X16 a14
addi scramble_table,a14
move *a14,a14,W
move a14,*a0
move a10,a1
sll 4,a1
addi which_player,a1
move a14,*a1
;say the name.
MOVI SEL_SPCH_PID1,A1
ADD A10,A1
MOVE A0,A8
MOVI call_wrestler_name,A7
CALLA GETPRC
;make a joyful noise unto the player
move *a9(#PI_SELSOUND),a0
calla triple_sound
;clear our bit in the active flag
move @active_flag,a0
move a10,a14
inc a14
andn a14,a0
move a0,@active_flag
;flash over the crouton
;synch! begin flashing on an even PCNT
move @PCNT,a14
btst 0,a14
jrnz #synch
SLEEPK 1
#synch
move *a13(#HILITE),a8,L
movi TSEC/4,a9
#flashloop
movi 0202h,a14
move a14,*a8(OCONST)
move *a8(OCTRL),a14
xori M_CONZER,a14
move a14,*a8(OCTRL)
SLEEPK 2
dsj a9,#flashloop
move *a8(OCTRL),a14
andni M_CONZER,a14
move a14,*a8(OCTRL)
movi hilite_z,a14
move a14,*a8(OZPOS)
move *a13(#HIPLATE),a8,L
movi hiplate_z,a14
move a14,*a8(OZPOS)
#lp
SLEEPK 1
callr #place_cursor
jruc #lp
********
* moves cursor to the current index position
SUBRP #place_cursor
PUSH a2,a3,a7,a8
move a11,a1
X32 a1
addi crouton_pos_table,a1
move *a1+,a2,W
move *a1,a3,W
move *a13(#HILITE),a7,L
move *a13(#HIPLATE),a8,L
move a2,*a8(OXPOS)
move a3,*a8(OYPOS)
move a10,a10
jrz #p1
move @kp_p1cursor,a8,L
move *a8(PA11),a8
cmp a8,a11
jrnz #p1
addk 2,a2
addk 2,a3
#p1
move a2,*a7(OXPOS)
move a3,*a7(OYPOS)
PULL a2,a3,a7,a8
rets
********
* updates the name text
SUBRP #update_name
PUSH a8,a11
;rewiring kludge
X16 a11
addi scramble_table,a11
move *a11,a11,W
move a11,a0
X32 a0
addi name_tbl,a0
move *a0,a0,L
move *a13(#NAME),a8,L
calla civanic
PULL a8,a11
rets
********
* erases current mugshot
SUBRP #erase_mugshot
PUSH a5,a6,a8
movk 8,a6
move a13,a5
addi #MUG1,a5
#eraseloop
move *a5+,a0,L
calla DELOBJ
dsj a6,#eraseloop
PULL a5,a6,a8
rets
********
* draws a new mugshot
SUBRP #draw_mugshot
;reg use
;a10 = PDATA pointer
;a11 = mug pointer
PUSH a6,a7,a8,a10,a11
;rewiring kludge
X16 a11
addi scramble_table,a11
move *a11,a11,W
X32 a11
addi wrestler_mugs,a11
move *a11,a11,L
move a13,a10
addi #MUG1,a10
move *a11+,a2,L
#drawloop
move *a9(#PI_MUGXPOS),a0
move *a9(#PI_MUGYPOS),a1
sla 16,a0
sla 16,a1
movi mugshot_z,a3
move *a9(#PI_MUGCTRL),a4
movi CLSNEUT,a5
clr a6
clr a7
calla BEGINOBJW
move a8,*a10+,L
move *a11+,a2,L
jrz #done
jruc #drawloop
#done
PULL a6,a7,a8,a10,a11
calla show_bonus_icons
rets
;
;********
;* updates the attribute bars
;
; SUBRP #update_attbars
;
; PUSH a7,a10,a11
;
;
; ;rewiring kludge
; X16 a11
; addi scramble_table,a11
; move *a11,a11,W
;
; move a11,a10
; X64 a10
; addi wrestler_attributes,a10
; move a13,a11
; addi #ATT1,a11
;
; movi 4,a7
;#ualoop
; move *a10+,a0,W
; X32 a0
; addi attbars,a0
; move *a0,a0,L
; move *a11+,a8,L
; calla civanic
; dsj a7,#ualoop
;
; PULL a7,a10,a11
; rets
;
wrestler_attributes
;Power, speed, agility, recovery
.word 4,9,9,3 ;0 (Bret)
.word 7,6,2,5 ;1 (Razor)
.word 8,4,7,6 ;2 (Taker)
.word 9,2,4,6 ;3 (Yoko)
.word 3,9,8,7 ;4 (Shawn)
.word 8,6,5,3 ;5 (Bam Bam)
.word 4,8,7,8 ;6 (Doink)
.word 9,5,4,7 ;7 (Lex)
.word 9,5,4,7 ;8 (Lex)
scramble_table ;swap bret and doink on the select page
.word 6
.word 1,2,3,4,5
.word 0
.word 8 ;put lex in place of adam
attbars
.long ATTMTR_0,ATTMTR_1,ATTMTR_2,ATTMTR_3,ATTMTR_4
.long ATTMTR_5,ATTMTR_6,ATTMTR_7,ATTMTR_8,ATTMTR_9
#info
.long #p1info,#p2info
#p1info
.long #hi_b,#plt_b ;hilite, crouton
.word 0 ;start index
.word 0+18+2,175 ;mug position
.word DMAWNZ|M_3D|M_SCRNREL ;mug octrl
.long #p1name,latttxt ;start name,att text
.long index1 ;report choice to
.word 0c8h,0cbh ;cursor/select sounds
#p2info
.long #hi_r,#plt_r ;hilite, crouton
.word 1 ;start index
.word 400-18,175 ;mug position
.word DMAWNZ|M_3D|M_SCRNREL|M_FLIPH ;mug octrl
.long #p2name,ratttxt ;start name,att text
.long index2 ;report choice to
.word 0c7h,0cch ;cursor/select sounds
#plt_b .word 0,0,hiplate_z ;X,Y,Z
.long CRUTPLT_B ;IMG
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
.word CLSNEUT|TYPNEUT ;OID
.long 0,0 ;XVEL, YVEL
#plt_r .word 0,0,hiplate_z+1 ;X,Y,Z
.long CRUTPLT_R ;IMG
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
.word CLSNEUT|TYPNEUT ;OID
.long 0,0 ;XVEL, YVEL
#hi_b .word 0,0,hilite_z ;X,Y,Z
.long CRUTHI_B ;IMG
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
.word CLSNEUT|TYPNEUT ;OID
.long 0,0 ;XVEL, YVEL
#hi_r .word 0,0,hilite_z+1 ;X,Y,Z
.long CRUTHI_R ;IMG
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
.word CLSNEUT|TYPNEUT ;OID
.long 0,0 ;XVEL, YVEL
#p1name .word >51,184,name_z
.long WF_INSERT
.word DMAWNZ|M_3D|M_SCRNREL
.word CLSNEUT|TYPNEUT
.long 0,0
#p2name .word >142,184,name_z
.long WF_INSERT
.word DMAWNZ|M_3D|M_SCRNREL
.word CLSNEUT|TYPNEUT
.long 0,0
latttxt .word 0+18,189,atttxt_z ;X, Y, Z
.long ATT_TXT ;IMG
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
.word CLSNEUT|TYPNEUT ;OID
.long 0,0 ;XVEL, YVEL
ratttxt .word 400-18-124,189,atttxt_z ;X, Y, Z
.long ATT_TXT ;IMG
.word DMAWNZ|M_3D|M_SCRNREL ;CTRL
.word CLSNEUT|TYPNEUT ;OID
.long 0,0 ;XVEL, YVEL
;Mugshot stuff
wrestler_mugs
.long BHARTMUG
.long RAZORMUG
.long UNDERMUG
.long YOKOMUG
.long MICHAELMUG
.long BAMBAMMUG
.long DOINKMUG
.long 0
.long LUGERMUG
wrestler_mugs2
.long BHARTMUG
.long RAZORMUG
.long UNDERMUG
.long YOKOMUG
.long MICHAELMUG
.long BAMBAMMUG
.long DOINKMUG
; .long ADAMMUG
.long LUGERMUG
BHARTMUG
.long BHMUG_A,BHMUG_B,BHMUG_C,BHMUG_D
.long BHMUG_E,BHMUG_F,BHMUG_G,BHMUG_H,0
RAZORMUG
.long RRMUG_A,RRMUG_B,RRMUG_C,RRMUG_D
.long RRMUG_E,RRMUG_F,RRMUG_G,RRMUG_H,0
UNDERMUG
.long UNMUG_A,UNMUG_B,UNMUG_C,UNMUG_D
.long UNMUG_E,UNMUG_F,UNMUG_G,UNMUG_H,0
YOKOMUG
.long YKMUG_A,YKMUG_B,YKMUG_C,YKMUG_D
.long YKMUG_E,YKMUG_F,YKMUG_G,YKMUG_H,0
MICHAELMUG
.long SMMUG_A,SMMUG_B,SMMUG_C,SMMUG_D
.long SMMUG_E,SMMUG_F,SMMUG_G,SMMUG_H,0
BAMBAMMUG
.long BMMUG_A,BMMUG_B,BMMUG_C,BMMUG_D
.long BMMUG_E,BMMUG_F,BMMUG_G,BMMUG_H,0
DOINKMUG
.long DKMUG_A,DKMUG_B,DKMUG_C,DKMUG_D
.long DKMUG_E,DKMUG_F,DKMUG_G,DKMUG_H,0
LUGERMUG
.long LXMUG_A,LXMUG_B,LXMUG_C,LXMUG_D
.long LXMUG_E,LXMUG_F,LXMUG_G,LXMUG_H,0
name_tbl
.long NAM_BRT,NAM_RZR,NAM_UND,NAM_YOK
.long NAM_SHN2,NAM_BAM2,NAM_DNK,0,NAM_LEX
#*****************************************************************************
* Player select clock - sets time_out when it runs out of time
*
SUBR select_clock
;reg use
; a8 - current pstatus
; a9 - time remaining
select_time equ TSEC*15
#reset
movi select_time,a9
move @PSTATUS,a8
#waitloop
SLEEPK 1
move @PSTATUS,a14
cmp a14,a8
jrne #reset ;new buyin. reset
dsj a9,#waitloop
;If other player is still thinking about buying in or is
;still entering his initials, then go to #reset
move @OLD_PSTATUS,a0
jrnz #reset
movk 1,a14
move a14,@time_out
DIE
clock_digits
;When player select time gets down to 5 seconds, display it...
;a10=select_clock *PROC
movi [0cbh,0],a0 ;x pos
movi [232,0],a1 ;y pos
movi FNT9_5,a2 ;* image
movi 104+200,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi FNT9WHT_P,b0
calla BEGINOBJP
movk 4,a11
#loop0 callr obj_off
#loop SLEEPK 1
move @time_out,a0
janz KILL_THIS_DIGIT
move @OLD_PSTATUS,a0
jrnz #loop0
move *a10(PA9),a0
srl 6,a0
cmp a0,a11
jrz #loop
cmpi 6,a0
jrge #loop0
;New digit time
move a0,a11
sll 5,a0
addi digits_tbl,a0
move *a0,a0,L ;* image
move *a8(OCTRL),a1 ;DMA flags
calla change_image
callr obj_on
move a11,a14
callr setup_clock_sound
jruc #loop
KILL_THIS_DIGIT
callr obj_off
DIE
digits_tbl
.long FNT9_0,FNT9_1,FNT9_2,FNT9_3,FNT9_4
.long FNT9_5,FNT9_6,FNT9_7,FNT9_8,FNT9_9
#*****************************************************************************
* One player ladder of progression
*
SUBR pregame_show
;This will be the ladder type screen, showing the 1 player
;game progression. Chooses the CPU opponent.
;Show 1 player game ladder of progression
;Scroll horizontally to the next challenger
.if DEBUG
move @skip_select,a0
jrz #noskp
RETP
#noskp
.endif
move @PSTATUS,a0
cmpi 3,a0
jrnz #oneplyrgm
.ref question_type
.if RR_AWARD = 1
move @royal_rumble,a14
jrnz #last_was_royal
.endif
movk 1,a14
move a14,@question_type
JSRP ask_belt_question
.if RR_AWARD = 1
jruc #type_set
#last_was_royal
clr a14
move a14,@royal_rumble
#type_set
.endif
JSRP CLOSE_PROGRESS_SCREEN
RETP
;0 (Bret)
;1 (Razor)
;2 (Taker)
;3 (Yoko)
;4 (Shawn)
;5 (Bam Bam)
;6 (Doink)
;7 spare
;8 (Lex)
#oneplyrgm
.ref belt_ask
.ref ask_belt_question
move @belt_ask,a14,W
jrz #belt_is_set
clr a14
move a14,@question_type
JSRP ask_belt_question
calla INIT_LADDER_TABLE
clr a8
move a8,@belt_ask
#belt_is_set
; movk 15,a8
; movk 4,a9
movk 10,a8
movk 2,a9
JSRP CLOSE_SCREEN_LINE
calla SPECIAL_WIPEOUT
JAUC PUT_UP_PROGRESS
;AVOID_PREGAME
; MOVE @CURRENT_LADDER,A10,L
; CALLA NEXT_IN_LADDER
; CALLA NUM_OF_OPPS
; JSRP CLOSE_PROGRESS_SCREEN
; RETP
;Can we remove this?
; .ref osgemd_ascii
;#ln1_setup
; JAM_STR osgemd_ascii,8,0,200,80,BLUE,0
;
;#ln2_setup
; JAM_STR osgemd_ascii,8,0,200,110,BLUE,0
;
;#str_text
; .string "SINGLE PLAYER GAME",0
;#str_text2
; .string "LADDER OF PROGRESSION",0
; .even
;
;#ladder_mod
; .long slateBMOD ;wrestler select map
; .word 0,0
; .long 0
#*****************************************************************************
*
* INPUT: a8 = * object
*-----------------------------------------------------------------------------
SUBRP obj_on
move *a8(OYPOS),a0
andni 400h,a0
move a0,*a8(OYPOS)
rets
#*****************************************************************************
*
* INPUT: a8 = * object
*-----------------------------------------------------------------------------
SUBRP obj_off
move *a8(OYPOS),a0
ori 400h,a0
move a0,*a8(OYPOS)
rets
******************************************************************************
buyin_text
movk ADJFREPL,a0 ;Are we in free play?
calla GET_ADJ
jrz #not_freeply
;Print free play
movi #ln0_setup,a2
move a10,a10
jrz #ok2c
movi #ln0_setupb,a2
#ok2c calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text0,a4
calla print_string_C2
;Print centered "PLEASE CONTINUE" message
movi #ln1_setup,a2
move a10,a10
jrz #ok
movi #ln1_setupb,a2
#ok calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text,a4
calla print_string_C2
movi #ln2_setup,a2
move a10,a10
jrz #ok4
movi #ln2_setupb,a2
calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text2,a4
calla print_string_C2
rets
#not_freeply
;Print how many credits to start
PUSH a8
movk ADJCCONT,a0
calla GET_ADJ ;GET NUMBER NEEDED
move a0,a3
cmpi 10,a0
jrlt #max
movk 9,a0
#max
sll 5,a0
addi digits_tbl,a0
move *a0,a2,L ;* image
movi [050,0],a0 ;x pos
cmpi 1,a3
jrnz #not1
movi [054,0],a0 ;x pos
#not1 move a10,a10
jrz #zp1
movi [0122h,0],a0 ;x pos
cmpi 1,a3
jrnz #zp1
movi [0126h,0],a0 ;x pos
#zp1
movi [CREDIT_LINE_YPOS,0],a1 ;y pos
movi 104+200,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
movi CLSNEUT|TYPTEXT|SUBOVRHED,a5
add a10,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi FNT9YEL_P,b0
calla BEGINOBJP
PULL a8
movi #ln3_setup,a2
move a10,a10
jrz #ok2
movi #ln3_setupb,a2
#ok2 calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text3,a4
movk ADJCCONT,a0
calla GET_ADJ ;GET NUMBER NEEDED
cmpi 1,a0
jrnz #not1b
movi #str_text3b,a4
#not1b
calla print_string_C2
movi #ln4_setup,a2
move a10,a10
jrz #ok2B
movi #ln4_setupb,a2
#ok2B calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text4,a4
calla print_string_C2
;Print "challenger needed" message
movi #ln1_setupx,a2
move a10,a10
jrz #ok3
movi #ln1_setupxb,a2
#ok3 calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text,a4
calla print_string_C2
movi #ln2_setupx,a2
move a10,a10
jrz #ok4
movi #ln2_setupxb,a2
#ok4 calla setup_message
movi CLSNEUT|TYPTEXT|SUBOVRHED,a0
add a10,a0
move a0,@mess_objid
movi #str_text2,a4
calla print_string_C2
rets
.if 1
#ln0_setup
JAM_STR font9_ascii,8,0,81,120,FNT9YEL_P,0
#ln0_setupb
JAM_STR font9_ascii,8,0,321,120,FNT9YEL_P,0
#ln1_setup
JAM_STR font9_ascii,8,0,81,80,FNT9WHT_P,0
#ln1_setupb
JAM_STR font9_ascii,8,0,321,80,FNT9WHT_P,0
#ln2_setup
JAM_STR font9_ascii,8,0,81,95,FNT9WHT_P,0
#ln2_setupb
JAM_STR font9_ascii,8,0,321,95,FNT9WHT_P,0
#ln1_setupx
JAM_STR font9_ascii,8,0,81,60,FNT9WHT_P,0
#ln1_setupxb
JAM_STR font9_ascii,8,0,321,60,FNT9WHT_P,0
#ln2_setupx
JAM_STR font9_ascii,8,0,81,75,FNT9WHT_P,0
#ln2_setupxb
JAM_STR font9_ascii,8,0,321,75,FNT9WHT_P,0
#ln3_setup
JAM_STR font9_ascii,8,0,81,110,FNT9YEL_P,0
#ln3_setupb
JAM_STR font9_ascii,8,0,321,110,FNT9YEL_P,0
#ln4_setup
JAM_STR font9_ascii,8,0,81,125,FNT9YEL_P,0
#ln4_setupb
JAM_STR font9_ascii,8,0,321,125,FNT9YEL_P,0
.else
#ln0_setup ; FREE PLAY
JAM_STR font9_ascii,8,0,81,120,FNT9YEL_P,0
#ln0_setupb
JAM_STR font9_ascii,8,0,321,120,FNT9YEL_P,0
#ln1_setup ; PLEASE
JAM_STR font9_ascii,8,0,81,80,FNT9WHT_P,0
#ln1_setupb
JAM_STR font9_ascii,8,0,321,80,FNT9WHT_P,0
#ln2_setup ; DIGIT
JAM_STR font9_ascii,8,0,81,95,FNT9WHT_P,0
#ln2_setupb
JAM_STR font9_ascii,8,0,321,95,FNT9WHT_P,0
#ln1_setupx ; PLEASE
JAM_STR font9_ascii,8,0,81,PLEASE_YPOS,FNT9WHT_P,0
#ln1_setupxb
JAM_STR font9_ascii,8,0,321,PLEASE_YPOS,FNT9WHT_P,0
#ln2_setupx ; CONTINUE
JAM_STR font9_ascii,8,0,81,CONTINUE_YPOS,FNT9WHT_P,0
#ln2_setupxb
JAM_STR font9_ascii,8,0,321,CONTINUE_YPOS,FNT9WHT_P,0
#ln3_setup ; CREDITS
JAM_STR font9_ascii,8,0,81,CREDIT_LINE_YPOS,FNT9YEL_P,0
#ln3_setupb
JAM_STR font9_ascii,8,0,321,CREDIT_LINE_YPOS,FNT9YEL_P,0
#ln4_setup ; TO CONTINUE
JAM_STR font9_ascii,8,0,81,TO_CONTINUE_YPOS,FNT9YEL_P,0
#ln4_setupb
JAM_STR font9_ascii,8,0,321,TO_CONTINUE_YPOS,FNT9YEL_P,0
.endif
#str_text
.string "PLEASE",0
#str_text0
.string "FREE PLAY",0
#str_text2
.string "CONTINUE!",0
#str_text3
.string " CREDITS",0
#str_text3b
.string " CREDIT",0
#str_text4
.string "TO CONTINUE",0
.even
******************************************************************************
.ref AUD1
.ref GET_CREDITS
.ref get_start_down
.ref get_but_val_cur
#cont_timer .equ 9
#resets_allowed .equ 25 ;People whack on button to reset
SUBRP buyin_counter
move @rr_loss,a0
jrz not_rr1
move @cursor_procs,a0
inc a0
move a0,@cursor_procs
not_rr1
move a10,*a13(PDATA+16) ;0 or 1
movi AUD_CONTOFF,a0 ;increment the offered audit
calla AUD1
movi #resets_allowed,a7
jruc #loop_start
#coin_loop_reset
movi #resets_allowed,a7
#loop_reset
calla DELOBJA8
#loop_start
calla GET_CREDITS
move a0,a6
PUSH a6,a7
movi [080,0],a0 ;x pos
move *a13(PDATA+16),a10
move a10,a10
jrz #p1
movi [0320,0],a0 ;x pos
#p1
movi [TIMER_YPOS,0],a1 ;y pos
movi FNT9_9,a2 ;* image
movi 104+200,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
movi CLSNEUT|TYPTEXT|SUBOVRHED,a5
add a10,a5
clr a6 ;x vel
clr a7 ;y vel
movi FNT9WHT_P,b0
calla BEGINOBJP
PULL a6,a7
move @PSTATUS,a9
movi TSEC*2,a10
movi #cont_timer,a11
#loop
PUSHP a6,a7
SLEEPK 1
PULLP a6,a7
;Buyin check
move @PSTATUS,a14
move *a13(PDATA+16),a0
btst a0,a14
jrne #buyin
;More credits check
calla GET_CREDITS
cmp a0,a6
jrne #coin_loop_reset
;Start button check
move a7,a7
jrz #skip_start_check
;Any player who hits his start will reset buyin timer!
move *a13(PDATA+16),a0
calla get_start_down
move a0,a0
jrnz #start_hit
move *a13(PDATA+16),a0
xori 1,a0
calla get_start_down
move a0,a0
jrnz #start_hit
#skip_start_check
;Regular button check
;Make these button presses player specific!
move *a13(PDATA+16),a0
calla get_but_val_down
move a0,a0
jrnz #new_button_press
move *a13(PDATA+16),a0
calla get_but_val_cur
move a0,a0
jrnz #old_button_press
;No buttons down
dsj a10,#loop
#sec_elapsed
;A second has elapsed.
dec a11
jrz #timeout
movi TSEC*2,a10
move a11,a14
X32 a14
addi digits_tbl,a14
move *a14,a0,L
calla civanic
move a11,a14
callr setup_clock_sound
jruc #loop
setup_clock_sound
; x16 a14
; addi which_tick_tock,a14
; move *a14,a0
; CREATE0 do_next_tick
; movi 0B7H,a0
movi 0AH,a0
calla triple_sound
rets
;do_next_tick
; SLEEP 12
; MOVI 0B8H,A0
; CALLA triple_sound
; DIE
;which_tick_tock
; .word 0b7h,0b8h,0b7h,0b8h
; .word 0b7h,0b8h,0b7h,0b8h
; .word 0b7h,0b8h,0b7h,0b8h
#new_button_press
;New press. skip a digit
clr a10
jruc #sec_elapsed
#old_button_press
;Button being held. Run clock at triple rate
subk 20,a10
jrp #loop
jruc #sec_elapsed
#start_hit
;A PSTATUS-active player has hit a start button.
dec a7
jruc #loop_reset
#buyin
;Someone has bought in.
;ALREADY DONE ELSE WHERE
; movi AUD_CONTTAKN,a0 ;inc the conts taken audit
; calla AUD1
move @rr_loss,a14
jrz #no_rr_loss
move *a13(PDATA+16),a14
addk 1,a14
not a14
move @OLD_PSTATUS,a0
and a14,a0
move @cursor_procs,a14
dec a14
move a14,@cursor_procs
move a14,a14
jrnz #no_cp
move a14,@active_flag
#no_cp clr a14
move a14,@rr_loss ;don't care about this anymore
jruc #ok2_1
#no_rr_loss
clr a0 ; ORG
#ok2_1
move a0,@OLD_PSTATUS
move a0,@blow_out
DIE
#timeout
;Time ran out!
;If the other player has not bought in, then goto game over
;If the other player is active, and has already chosen his fighter, then
;immediately go into the match
;If he hasn't chosen his fighter, replot the text messages to now read
;Challenger needed, Insert x coins to start (The player blew his opportunity
;to continue the game at the potentially lower price!)
;
move @rr_loss,a14
jrz #no_rr_loss1
move *a13(PDATA+16),a14
addk 1,a14
not a14
move @OLD_PSTATUS,a0
and a14,a0
move @cursor_procs,a14
dec a14
move a14,@cursor_procs
jruc #ok1
#no_rr_loss1
clr a0 ;ORG
#ok1
move a0,@OLD_PSTATUS
move @rr_loss,a0
jrz #do_end
move a14,a14
jrz #do_end
clr a0
jruc #set_it
#do_end
movk 1,a0
#set_it
move a0,@blow_out
DIE
auto_str
JAM_STR font9_ascii,10,0,200,19,FNT9WHT_P,print_string_C2
.string "AUTO INITIALS",0
.even
******************************************************************************
.end