6706 lines
129 KiB
NASM
6706 lines
129 KiB
NASM
|
**************************************************************
|
|||
|
*
|
|||
|
* Software: Jamie Rivett, Mark Turmell, Jason Skiles
|
|||
|
* Initiated: 12/7/93
|
|||
|
*
|
|||
|
* Modified:
|
|||
|
*
|
|||
|
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
|
|||
|
*
|
|||
|
**************************************************************
|
|||
|
|
|||
|
.file "wrestle.asm"
|
|||
|
.title "wrestling game program"
|
|||
|
.width 132
|
|||
|
.option b,d,l,t
|
|||
|
.mnolist
|
|||
|
|
|||
|
|
|||
|
.include "macros.h"
|
|||
|
.include "mproc.equ" ;Mproc equates
|
|||
|
.include "display.equ" ;Display proc equates
|
|||
|
.include "gsp.equ" ;Gsp asm equates
|
|||
|
.include "sys.equ"
|
|||
|
.include "wwfsec.equ"
|
|||
|
.include "game.equ"
|
|||
|
.include "audit.equ"
|
|||
|
.include "plyr.equ"
|
|||
|
.include "anim.equ"
|
|||
|
.include "sound.h"
|
|||
|
.include "ring.equ"
|
|||
|
.include "sound.equ"
|
|||
|
.include "damage.equ"
|
|||
|
|
|||
|
.include "newfont.tbl"
|
|||
|
.include "imgtbl.glo"
|
|||
|
.include "fontsimg.glo"
|
|||
|
.include "bgndtbl.glo"
|
|||
|
.include "miscimg.glo"
|
|||
|
|
|||
|
; .if DEBUG
|
|||
|
; .include "dirdebug.tbl"
|
|||
|
;
|
|||
|
;ARROWS:
|
|||
|
; .word 4
|
|||
|
; .word 00H,015H,07FFFH,02B5H
|
|||
|
; .endif
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
|
|||
|
SCRT_DEBUG equ 0
|
|||
|
DIR_DEBUG equ 0
|
|||
|
COL_DEBUG equ 1
|
|||
|
|
|||
|
.else
|
|||
|
|
|||
|
SCRT_DEBUG equ 0
|
|||
|
DIR_DEBUG equ 0
|
|||
|
COL_DEBUG equ 0
|
|||
|
|
|||
|
.endif
|
|||
|
|
|||
|
******************************************************************************
|
|||
|
* EXTERNAL REFERENCES
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
.ref instant_death
|
|||
|
.endif
|
|||
|
|
|||
|
.ref ADD_VOICE,ARE_WE_IN_RING,AUD,AUD1,BAKMODS,BGND_UD1
|
|||
|
.ref CLEAR_SPEECH_REPEAT,CREATE_TEXT_LINE,CR_CONTP,CR_STRTP
|
|||
|
.ref CURRENT_LADDER,D2ST2B03,DAM_MULT,DBV,DIAG,DONE_HOWARD
|
|||
|
.ref DO_CROWD_CHEER,FIND_AND_KILL_ENDLESS,GAME_BEATEN
|
|||
|
.ref GET_ADJ,GET_AUD,combo_audit_done,FINAL_PTR
|
|||
|
.ref INIT_LADDER_TABLE,INIT_SKIRTS,INIT_TAB,IRQSKYE,KILL_AUD
|
|||
|
.ref LCOIN,MATCH_TIMERS,NUM_OPPS,OPEN_PROGRESS_SCREEN
|
|||
|
.ref POWERCMOS,POWERTST,P_CONT,P_START,RCOIN,READ_DIP
|
|||
|
.ref RESETUP_PROGRESS,SERVICE,SET_LOWER_VOL,SHIFT_BARS_IN_Z
|
|||
|
.ref SLAM_SW,SORT_OUT_WRESTLER_NUM,SPECIAL_WIPEOUT,STORE_AUDIT
|
|||
|
.ref THIS_GAME_IS_BEATEN,VOLBTN_PRESS,WALK_SOUND,do_game_over
|
|||
|
.ref WDOGRAM,rewire_monitor,XCOIN,DUMRETS,WHICH_SCREEN
|
|||
|
.ref ZFLIP_POS_VAR,CREATE_TIMEOUT,CCOIN,CHANGE_SKIRTS,CKDIAG
|
|||
|
.ref set_volume,KILL_ALL_CHANNELS,RESET_VOICE_QUEUE
|
|||
|
.ref FINAL_BATTLE_LINEUP,RNDRNG0,change_wrestler,match_timer
|
|||
|
.ref animate_wrestler,are_we_waiting_f,attract_mode
|
|||
|
.ref bam_ani_init,bret_ani_init,change_anim1,change_anim1a
|
|||
|
.ref change_anim2,check_collisions,ck_climb_in_bot,keep_onscreen
|
|||
|
.ref ck_climb_in_side,ck_climb_in_top,ck_climb_out_bot
|
|||
|
.ref ck_climb_out_side,ck_climb_out_top
|
|||
|
.ref crowd_anim,dirqtimer,dma_meter,doink_ani_init,buyin_select
|
|||
|
.ref dpageflip,drone_main,entered_inits,getup_meter
|
|||
|
.ref index1,index2,init_all,init_life_data,init_special_objlist
|
|||
|
.ref lex_ani_init,meters,move_bam,move_bret,move_doink,move_lex
|
|||
|
.ref move_razor,move_shawn,move_taker,move_yoko,adjust_health
|
|||
|
.ref overlap_collision,pal_getf,pin_speed_in_case,pregame_show
|
|||
|
.ref print_string_C2,process_dispatch,razor_ani_init,choose_pal
|
|||
|
.ref read_switches,rope,rope_command,select_screen,init_smoves
|
|||
|
.ref set_collision_boxes,set_images,setup_message
|
|||
|
.ref shawn_ani_init,snd_update,square_root,taker_ani_init
|
|||
|
.ref triple_sound,wgsf24_ascii,wres_get_but_val_down
|
|||
|
.ref wres_get_stick_val_down,wres_get_stick_val_up
|
|||
|
.ref wrestler_audits,yoko_ani_init,mess_objid,pal_clean
|
|||
|
.ref wrestler_veladd,announce_rnd_winner,scroll_world
|
|||
|
.ref drone_change_back,is_final_match,audit_ud_flag
|
|||
|
.ref ditch_getup_meter,message_flag,init_rnd_life_data
|
|||
|
.ref p1rnd_award,p2rnd_award,p1mtch_award,p2mtch_award
|
|||
|
.ref p1ws_award,p2ws_award,rst_awards,rst_winstreak_awards
|
|||
|
.ref PERFECT_WINS,MUSIC_HAP,THIS_GAME_TIME,WINS_OBJ
|
|||
|
.ref arm_winstreak_award,reset_dufus_msgs,clear_icon_total
|
|||
|
.ref MESSAGE_FLAGS,FLASH_FLAG,royal_rumble,choose_buddies
|
|||
|
.ref do_show_options,show_options,IKIL1C,is_a14_behind
|
|||
|
.ref maybe_do_flashes,COMBO_FLASH_FLAG,loser_snd
|
|||
|
.ref in_finish_move,buddy_mode_on,buddy_mode_checked
|
|||
|
.ref copy_rom_string,concat_rom_string,setup_message
|
|||
|
.ref copy_string,dec_to_asc,concat_string,message_buffer
|
|||
|
.ref osgmd8_ascii,get_all_buttons_cur,_serial_number,_man_date
|
|||
|
.ref InitPIC,RemapIO,SecFuncCheck
|
|||
|
.ref rr_loss,postgame_audits
|
|||
|
.ref wrestler_counter
|
|||
|
.ref is_8_on_1,bncoff_gate,fall_back_tbl
|
|||
|
.ref show_wrestler_end_story,do_fireworks
|
|||
|
.ref p1pins,p2pins,finish_completed
|
|||
|
|
|||
|
|
|||
|
******************************************************************************
|
|||
|
* SYMBOLS DEFINED IN THIS FILE
|
|||
|
|
|||
|
|
|||
|
.def obj_look,ani_init,mainlp,PCMOSRET,ring_mod
|
|||
|
|
|||
|
BSSX _coin_addr,32
|
|||
|
BSSX _switch_addr,32
|
|||
|
BSSX _switch2_addr,32
|
|||
|
BSSX _watchdog_addr,32
|
|||
|
BSSX _dipswitch_addr,32
|
|||
|
BSSX _sound_addr,32
|
|||
|
BSSX _soundirq_addr,32
|
|||
|
BSSX _coin_counter_addr,32
|
|||
|
|
|||
|
;uninitialized ram definitions
|
|||
|
BSSX no_pin_check,16
|
|||
|
BSSX belt_ask ,16
|
|||
|
BSSX belt_type ,16
|
|||
|
|
|||
|
BSSX PSTATUS ,16 ;Player in game bits (0-3)
|
|||
|
BSSX OLD_PSTATUS ,16 ;Previous games PSTATUS
|
|||
|
BSSX PSTARTS ,16 ;Not documented. Pbltltlt.
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
BSSX SLDEBUG ,16 ;Shawn's debug
|
|||
|
BSSX slowmotion ,16 ;!0=Frames of delay for slow motion
|
|||
|
.endif
|
|||
|
|
|||
|
BSSX slowmo ,16 ;!0=Frames of delay for slow motion
|
|||
|
|
|||
|
;I changed PCNT to a 32-bit value instead of 16 'cuz I'm tired of
|
|||
|
; coding checks for the wraparound case, which happens every ten
|
|||
|
; minutes or so. Since it's always treated as an unsigned value
|
|||
|
; anyway, it's perfectly safe to continue using it as a word. - JS
|
|||
|
.even
|
|||
|
BSSX PCNT ,32 ;Main loop cnt
|
|||
|
|
|||
|
BSSX swstack_p ,32 ;*Stack position
|
|||
|
BSSX swstackbot ,16*64 ;Bottom of stack
|
|||
|
BSSX swstacktop ,0 ;Top of stack
|
|||
|
|
|||
|
BSSX COLRTEMP ,16*16 ;RAM COPY OF CYCLING COLORS
|
|||
|
|
|||
|
BSSX GAMSTATE ,16 ;Game state: See game.equ
|
|||
|
|
|||
|
BSSX HALT ,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE)
|
|||
|
BSSX NO_START ,16 ;FLAG 0=OKAY, 1=NOT RIGHT NOW.
|
|||
|
|
|||
|
BSSX WSPEED ,16
|
|||
|
BSSX WFLG ,16 ;0=NOT ON, 1=YES IT IS ON
|
|||
|
.bss WNDWFLG ,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW
|
|||
|
.even
|
|||
|
BSSX OBJPTR ,32 ;PNTR FOR WINDOW OBJECT
|
|||
|
|
|||
|
|
|||
|
.bss PALTMP ,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
|
|||
|
|
|||
|
BSSX match_cnt, 16
|
|||
|
|
|||
|
BSSX debug_collis, 16
|
|||
|
|
|||
|
.even
|
|||
|
BSSX DIAG0, 32
|
|||
|
BSSX DIAG1, 32
|
|||
|
|
|||
|
BSSX process_ptrs, 32*NUM_WRES ;long * number wrestlers
|
|||
|
p2_process .equ process_ptrs+32
|
|||
|
.def p2_process
|
|||
|
|
|||
|
.bss wres0_objs, 32*MAX_PIECES
|
|||
|
.bss wres1_objs, 32*MAX_PIECES
|
|||
|
.bss wres2_objs, 32*MAX_PIECES
|
|||
|
.bss wres3_objs, 32*MAX_PIECES
|
|||
|
.bss wres4_objs, 32*MAX_PIECES
|
|||
|
.bss wres5_objs, 32*MAX_PIECES
|
|||
|
.bss wres6_objs, 32*MAX_PIECES
|
|||
|
.bss wres7_objs, 32*MAX_PIECES
|
|||
|
|
|||
|
BSSX round_tickcount,16
|
|||
|
|
|||
|
|
|||
|
BSSX wrest_joystat, 32*16*NUM_WRES ;16 bit joyval: 16 bit count
|
|||
|
|
|||
|
.bss fudge_x, 32 ;wrestler_x[-20h]
|
|||
|
BSSX wrestler_x, 32*NUM_WRES ;long * number wrestlers
|
|||
|
.bss fudge_y, 32 ;wrestler_y[-20h]
|
|||
|
BSSX wrestler_y, 32*NUM_WRES ;long * "
|
|||
|
.bss fudge_z, 32 ;wrestler_z[-20h]
|
|||
|
BSSX wrestler_z, 32*NUM_WRES ;long * "
|
|||
|
|
|||
|
;This is the game clock at the top of the screen. It runs at various
|
|||
|
; speeds in the different modes, and can be adjusted by the operator.
|
|||
|
; It's not any kind of real time clock and shouldn't be used for
|
|||
|
; ANYTHING except displaying those two digits.
|
|||
|
BSSX match_time, 16*3 ;frac, 1's, 10's
|
|||
|
|
|||
|
BSSX match_over, 16 ;0=not over, !0=over
|
|||
|
|
|||
|
;This used to be incremented on the fly. Bogus, since we lose bog
|
|||
|
; frames that way and end up with an artificially low time. Instead,
|
|||
|
; compute this based on current PCNT and match_start_time at the
|
|||
|
; end of the match.
|
|||
|
BSSX match_realtime, 16 ;actual seconds elapsed
|
|||
|
|
|||
|
BSSX match_winner, 16 ;just like PSTATUS
|
|||
|
|
|||
|
BSSX fight_debug, 16
|
|||
|
|
|||
|
BSSX p1winstreak, 16 ;player 1 winning streak
|
|||
|
BSSX p2winstreak, 16 ;player 2 winning streak
|
|||
|
BSSX p1winstreakd, 16 ;player 1 vs drones
|
|||
|
BSSX p2winstreakd, 16 ;player 2 vs drones
|
|||
|
|
|||
|
;copy pXwinstreak to pXoldwinstreak immediately after any battle
|
|||
|
; ends, then clear pXwinstreak.
|
|||
|
BSSX p1oldwinstreak, 16 ;player 1 dead winning streak
|
|||
|
BSSX p2oldwinstreak, 16 ;player 2 dead winning streak
|
|||
|
|
|||
|
BSSX current_round, 16 ;current round in match (1+)
|
|||
|
BSSX p1rounds, 16 ;player 1 rounds won
|
|||
|
BSSX p2rounds, 16 ;player 2 rounds won
|
|||
|
|
|||
|
;keep these in order and adjacent
|
|||
|
.even
|
|||
|
BSSX front_rproc, 32 ;front ropes proc
|
|||
|
BSSX back_rproc, 32 ;back ropes proc
|
|||
|
BSSX left_rproc, 32 ;left ropes proc
|
|||
|
BSSX right_rproc, 32 ;right ropes proc
|
|||
|
|
|||
|
BSSX total_matches, 16 ;matches since attract mode
|
|||
|
BSSX no_debris, 16 ;Don't allow debris - it bogs
|
|||
|
BSSX reduce_bog, 16
|
|||
|
BSSX allow_offscrn,16 ;Allow players offscrn on toss outs
|
|||
|
|
|||
|
.bss bgnd_cntr,16
|
|||
|
BSSX any_hits,16
|
|||
|
BSSX robo_icon_trigger,16
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
BSSX stay_down, 16 ;flag - don't dec GETUP_TIME
|
|||
|
.endif
|
|||
|
|
|||
|
;these three data are only for use in pin times. They don't count
|
|||
|
; time not spent actually fighting, and so we can't use them for
|
|||
|
; the game time audit.
|
|||
|
BSSX round_start_time,32 ;PCNT at start of round
|
|||
|
BSSX round_end_time,32 ;PCNT at end of round
|
|||
|
|
|||
|
;Set this at the beginning of a match, and subtract it from PCNT
|
|||
|
; at the end of the match. THIS is the clock we use for the game
|
|||
|
; time audits. It won't lose bog frames, and it isn't tied to that
|
|||
|
; silly game clock.
|
|||
|
BSSX match_start_time,32 ;PCNT at start of match
|
|||
|
.text
|
|||
|
|
|||
|
.bss plyr_dmg_given,2*16
|
|||
|
BSSX wrestler_count,16
|
|||
|
BSSX wrestler_count_proc,32
|
|||
|
BSSX temp_music,16
|
|||
|
|
|||
|
BSSX annc_rnd_winner_done,16
|
|||
|
|
|||
|
vln_right_rope_r
|
|||
|
.WORD RING_TOP_RIGHT,RING_TOP,RING_BOT_RIGHT,RING_BOT
|
|||
|
.WORD RING_DEPTH,RING_RIGHT_WIDTH
|
|||
|
vln_left_rope_r
|
|||
|
.WORD RING_TOP_LEFT,RING_TOP,RING_BOT_LEFT,RING_BOT
|
|||
|
.WORD RING_DEPTH,RING_LEFT_WIDTH
|
|||
|
vln_right_matedge_r
|
|||
|
.WORD MAT_TOP_RIGHT,MAT_TOP,MAT_BOT_RIGHT,MAT_BOT
|
|||
|
.WORD MAT_DEPTH,MAT_RIGHT_WIDTH
|
|||
|
vln_left_matedge_r
|
|||
|
.WORD MAT_TOP_LEFT,MAT_TOP,MAT_BOT_LEFT,MAT_BOT
|
|||
|
.WORD MAT_DEPTH,MAT_LEFT_WIDTH
|
|||
|
vln_right_matedge2_r
|
|||
|
.WORD MAT2_TOP_RIGHT,MAT2_TOP,MAT2_BOT_RIGHT,MAT2_BOT
|
|||
|
.WORD MAT2_DEPTH,MAT2_RIGHT_WIDTH
|
|||
|
vln_left_matedge2_r
|
|||
|
.WORD MAT2_TOP_LEFT,MAT2_TOP,MAT2_BOT_LEFT,MAT2_BOT
|
|||
|
.WORD MAT2_DEPTH,MAT2_LEFT_WIDTH
|
|||
|
vln_right_fence_r
|
|||
|
.WORD ARENA_TOP_RIGHT,ARENA_TOP,ARENA_BOT_RIGHT,ARENA_BOT
|
|||
|
.WORD ARENA_DEPTH,ARENA_RIGHT_WIDTH
|
|||
|
vln_left_fence_r
|
|||
|
.WORD ARENA_TOP_LEFT,ARENA_TOP,ARENA_BOT_LEFT,ARENA_BOT
|
|||
|
.WORD ARENA_DEPTH,ARENA_LEFT_WIDTH
|
|||
|
|
|||
|
bssx vln_right_rope,((RING_DEPTH+10)*16)+64
|
|||
|
bssx vln_left_rope,((RING_DEPTH+10)*16)+64
|
|||
|
bssx vln_right_matedge,((MAT_DEPTH+10)*16)+64
|
|||
|
bssx vln_left_matedge,((MAT_DEPTH+10)*16)+64
|
|||
|
bssx vln_right_matedge2,((MAT2_DEPTH+10)*16)+64
|
|||
|
bssx vln_left_matedge2,((MAT2_DEPTH+10)*16)+64
|
|||
|
bssx vln_right_fence,((ARENA_DEPTH+10)*16)+64
|
|||
|
bssx vln_left_fence,((ARENA_DEPTH+10)*16)+64
|
|||
|
|
|||
|
.even
|
|||
|
box_matedge
|
|||
|
.long vln_left_matedge
|
|||
|
.long vln_right_matedge
|
|||
|
|
|||
|
box_matedge2
|
|||
|
.long vln_left_matedge2
|
|||
|
.long vln_right_matedge2
|
|||
|
|
|||
|
|
|||
|
****************************************************************
|
|||
|
* Reset entry point
|
|||
|
|
|||
|
SUBR init_prog
|
|||
|
|
|||
|
.if 0
|
|||
|
dint
|
|||
|
setf 16,1,0 ;Field0 = Word sign extend
|
|||
|
setf 32,0,1 ;Field1 = Long word
|
|||
|
movi STCKST,sp ;Top of stack
|
|||
|
|
|||
|
calla InitPIC
|
|||
|
|
|||
|
; .if DEBUG
|
|||
|
; move a0,@>1e00000 ;Clr FPGA rom protect
|
|||
|
; .endif
|
|||
|
|
|||
|
;>Manual sound board reset
|
|||
|
; Moved to PU DIAGS
|
|||
|
; movi 0fe00h,a0 ;Hit reset bit
|
|||
|
; move a0,@SOUND
|
|||
|
; movi 100,a0 ;Wait for it to catch
|
|||
|
; dsj a0,$
|
|||
|
; movi 0ff00h,a0 ;Let it go
|
|||
|
; move a0,@SOUND
|
|||
|
|
|||
|
move @WDOGRAM,a0,L
|
|||
|
cmpi WDOGNUM,a0
|
|||
|
jrne initp50 ;Powerup?
|
|||
|
|
|||
|
move @dirqtimer,a0
|
|||
|
cmpi 400,a0
|
|||
|
jrhs #lockup ;Main loop died?
|
|||
|
|
|||
|
|
|||
|
.if TUNIT
|
|||
|
move @TALKPORT,a0 ;Check if watchdog was real
|
|||
|
btst B_WDOG,a0 ;Bit should be low if dog fired
|
|||
|
jrnz initp50 ;No watchdog?
|
|||
|
.endif
|
|||
|
|
|||
|
movk AUD_LOCKUP,a0 ;watchdog
|
|||
|
calla AUD1
|
|||
|
jruc #cont
|
|||
|
|
|||
|
#lockup
|
|||
|
|
|||
|
movi AUD_LOCKUP,a0 ;main loop lockup
|
|||
|
calla AUD1
|
|||
|
|
|||
|
#cont
|
|||
|
.if DEBUG
|
|||
|
.else
|
|||
|
CALLERR 11,0 ;Watch dog
|
|||
|
.endif
|
|||
|
|
|||
|
|
|||
|
movk AUDSTAT,a0
|
|||
|
calla GET_AUD ;0=AMode, 1=Game
|
|||
|
move a1,a1
|
|||
|
jrz WARMSET ;Attract mode glitch?
|
|||
|
|
|||
|
initp50
|
|||
|
calla READ_DIP ;skip if UJ2 bit 6 set
|
|||
|
btst 6,a0
|
|||
|
jrnz #skip_powerst
|
|||
|
jauc POWERTST ;board test etc...
|
|||
|
#skip_powerst
|
|||
|
|
|||
|
.else
|
|||
|
dint ; Interrupts OFF
|
|||
|
setf 16,1,0 ; word sign extend
|
|||
|
setf 32,1,1 ; long word sign extend
|
|||
|
movi STCKST,sp ; Setup the stack pointer
|
|||
|
|
|||
|
clr a0 ; initial mode for VMUX chip
|
|||
|
move a0,@VMUX_CONTROL,W ; initialize VMUX chip
|
|||
|
|
|||
|
movi 00030h,a0 ; hit sound reset bit
|
|||
|
move a0,@COIN_COUNTERS ; this is where reset bit is
|
|||
|
movi 100,a0 ; wait for it to catch
|
|||
|
dsjs a0,$
|
|||
|
movi 00020h,a0 ; let it go
|
|||
|
move a0,@COIN_COUNTERS
|
|||
|
|
|||
|
|
|||
|
move @SOUNDIRQ,a0 ; read watchdog status
|
|||
|
btst 8,a0 ; Is this reset from a watchdog ?
|
|||
|
jrnz initp50 ; br = no
|
|||
|
|
|||
|
#lockup
|
|||
|
|
|||
|
movk AUD_LOCKUP,a0 ; watchdog audit
|
|||
|
calla AUD1
|
|||
|
|
|||
|
;04/01/95 - NOTE: It may look a little dumb to have two calls to InitPIC
|
|||
|
;here instead of one above before the read for the watchdog status and it may
|
|||
|
;be tempting to move the InitPIC call to before the watchdog status read BUT
|
|||
|
;don't do it!!! The watchdog status MUST be read BEFORE the PIC is initialized
|
|||
|
;or the status of the watchdog will be reset.
|
|||
|
|
|||
|
initp50
|
|||
|
calla InitPIC ; Initialize the PIC and the I/O system
|
|||
|
move a0,@WATCHDOG ; Kill the dog fer yucks
|
|||
|
calla READ_DIP ; Read the dipswitches
|
|||
|
btst 6,a0 ; Is the power test bypass switch on?
|
|||
|
jrnz #skip_powerst ; br = yes
|
|||
|
jauc POWERTST ; Go off and run the power up tests
|
|||
|
#skip_powerst
|
|||
|
calla InitPIC ; Reinitialize the PIC and I/O system
|
|||
|
.endif
|
|||
|
|
|||
|
|
|||
|
******************************************************************************
|
|||
|
|
|||
|
SUBR WARMSET
|
|||
|
|
|||
|
dint
|
|||
|
setf 16,1,0 ;Field0 = Word sign extend
|
|||
|
setf 32,0,1 ;Field1 = Long word
|
|||
|
movi STCKST,sp ;Top of stack
|
|||
|
|
|||
|
calla InitPIC
|
|||
|
|
|||
|
;This takes all day to run. leave it out until we ship.
|
|||
|
.if DEBUG
|
|||
|
.else
|
|||
|
jauc POWERCMOS
|
|||
|
.endif
|
|||
|
PCMOSRET
|
|||
|
|
|||
|
calla init_all ;Initialize hardware
|
|||
|
; These are stored in these reggies to protect them
|
|||
|
move b5,@_serial_number,L
|
|||
|
move b6,@_man_date,L
|
|||
|
calla SecFuncCheck ;Check to make sure security functions
|
|||
|
;have not been mucked with
|
|||
|
calla INIT_TAB ;Reset todays high score table
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
clr a14
|
|||
|
move a14,@fight_debug
|
|||
|
move @_soundirq_addr,a14,L
|
|||
|
move *a14,a14
|
|||
|
btst 8,a14
|
|||
|
jrnz #no_dog
|
|||
|
LOCKUP
|
|||
|
#no_dog
|
|||
|
.endif
|
|||
|
|
|||
|
calla CKDIAG
|
|||
|
jrz main_go ;No diag switches closed?
|
|||
|
|
|||
|
CREATE DIAG_PID,DIAG ;Fire off the diag process
|
|||
|
jruc mainlp
|
|||
|
main_go
|
|||
|
CREATE AMODE_PID,attract_mode ;Start the attract mode
|
|||
|
|
|||
|
;fall through
|
|||
|
|
|||
|
********************************
|
|||
|
* Main loop
|
|||
|
|
|||
|
mainlp
|
|||
|
calla process_dispatch
|
|||
|
|
|||
|
move a13,a13
|
|||
|
jrz mainpok
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
LOCKUP
|
|||
|
eint
|
|||
|
.else
|
|||
|
CALLERR 10,0
|
|||
|
.endif
|
|||
|
|
|||
|
mainpok
|
|||
|
|
|||
|
move @RAND,a1,L ;>Randomize
|
|||
|
rl a1,a1
|
|||
|
move @HCOUNT,a14
|
|||
|
rl a14,a1
|
|||
|
add sp,a1
|
|||
|
move a1,@RAND,L
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
move @dma_meter,a14
|
|||
|
jrz #no_dmaline
|
|||
|
.ref draw_dma_meter
|
|||
|
calla draw_dma_meter
|
|||
|
#no_dmaline
|
|||
|
.endif
|
|||
|
|
|||
|
|
|||
|
;isn't there a less obvious place
|
|||
|
;that we can remap the IO ???
|
|||
|
; btst 5,a1
|
|||
|
; jrz _no_remap
|
|||
|
; calla RemapIO
|
|||
|
;_no_remap
|
|||
|
|
|||
|
callr switch_unstack
|
|||
|
calla snd_update ;Update the sound calls
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
calla cputime_calcfree
|
|||
|
.endif
|
|||
|
|
|||
|
;update all 32 bits of PCNT
|
|||
|
move @PCNT,a0,L
|
|||
|
addk 1,a0
|
|||
|
move a0,@PCNT,L
|
|||
|
|
|||
|
jruc mainlp
|
|||
|
|
|||
|
|
|||
|
#***************************************************************
|
|||
|
* Unstack switch queue
|
|||
|
|
|||
|
|
|||
|
SUBRP switch_unstack
|
|||
|
|
|||
|
|
|||
|
#lp move @swstack_p,a3,L
|
|||
|
cmpi swstacktop,a3 ;Stack at start?
|
|||
|
jreq #x ;Empty?
|
|||
|
move @FREE,a0,L
|
|||
|
jrz #x ;No processes left?
|
|||
|
|
|||
|
move *a3+,a0 ;Get entry
|
|||
|
move a3,@swstack_p,L ;Update stack
|
|||
|
sll 32-5,a0 ;Max switch # 31
|
|||
|
srl 32-5-4,a0 ;*16
|
|||
|
move a0,a2
|
|||
|
add a0,a2
|
|||
|
add a0,a2 ;*3
|
|||
|
addi switch_t,a2
|
|||
|
move *a2+,a1
|
|||
|
jrz #lp ;No PID?
|
|||
|
move *a2+,a7,L ;*Code
|
|||
|
movi ACTIVE,a13 ;*Proc list
|
|||
|
calla GETPRC
|
|||
|
jruc #lp
|
|||
|
|
|||
|
#x rets
|
|||
|
|
|||
|
|
|||
|
switch_t ;(Process ID or 0, *Routine) ;Put in audit??
|
|||
|
|
|||
|
|
|||
|
.if TUNIT
|
|||
|
WL 0,0 ;S0
|
|||
|
WL 0,0 ;S1
|
|||
|
WL 0,0 ;S2
|
|||
|
WL 0,0 ;S3
|
|||
|
WL 0,0 ;S4
|
|||
|
WL 0,0 ;S5
|
|||
|
WL 0,0 ;S6
|
|||
|
WL 0,0 ;S7
|
|||
|
WL 0,0 ;S8
|
|||
|
WL 0,0 ;S9
|
|||
|
WL 0,0 ;S10
|
|||
|
WL 0,0 ;S11
|
|||
|
WL 0,0 ;S12
|
|||
|
WL 0,0 ;S13
|
|||
|
WL 0,0 ;S14
|
|||
|
WL 0,0 ;S15
|
|||
|
|
|||
|
WL LC_PID,LCOIN ;S16 - LEFT COIN (1)
|
|||
|
WL RC_PID,RCOIN ;S17 - RIGHT COIN (2)
|
|||
|
WL PSWPID,plyr_strtb1 ;S18 - START 1
|
|||
|
WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT
|
|||
|
WL DIAG_PID,DIAG ;S20 - TEST
|
|||
|
WL PSWPID,plyr_strtb2 ;S21 - START 2
|
|||
|
WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT
|
|||
|
WL CC_PID,CCOIN ;S23 - CENTER COIN (3)
|
|||
|
WL CC_PID,XCOIN ;S24 - COIN 4
|
|||
|
WL 0,0 ;S25 - START 3
|
|||
|
WL 0,0 ;S26 - START 4
|
|||
|
WL VOLBTN_PID,VOLBTN_PRESS ;S27 - VOLUME DOWN
|
|||
|
WL VOLBTN_PID,VOLBTN_PRESS ;S28 - VOLUME UP
|
|||
|
WL 0,0 ;S29
|
|||
|
WL 0,0 ;S30
|
|||
|
WL CC_PID,DBV ;S31
|
|||
|
|
|||
|
.else
|
|||
|
|
|||
|
WL PSWPID,plyr_strtb4 ;S7 IO20 - START 4
|
|||
|
WL 0,0 ;S1
|
|||
|
WL 0,0 ;S2
|
|||
|
WL 0,0 ;S3
|
|||
|
WL 0,0 ;S4
|
|||
|
WL 0,0 ;S5
|
|||
|
WL 0,0 ;S6
|
|||
|
WL PSWPID,plyr_strtb3 ;S7 - START 3
|
|||
|
WL 0,0 ;S8
|
|||
|
WL 0,0 ;S9
|
|||
|
WL 0,0 ;S10
|
|||
|
WL 0,0 ;S11
|
|||
|
WL 0,0 ;S12
|
|||
|
WL 0,0 ;S13
|
|||
|
WL 0,0 ;S14
|
|||
|
WL CC_PID,XCOIN ;S15 - COIN 4
|
|||
|
|
|||
|
WL LC_PID,LCOIN ;S16 - LEFT COIN (1)
|
|||
|
WL RC_PID,RCOIN ;S17 - RIGHT COIN (2)
|
|||
|
WL PSWPID,plyr_strtb1 ;S18 - START 1
|
|||
|
WL SLAM_PID,SLAM_SW ;S19 - SLAM TILT
|
|||
|
WL DIAG_PID,DIAG ;S20 - TEST
|
|||
|
WL PSWPID,plyr_strtb2 ;S21 - START 2
|
|||
|
WL DIAG_PID,SERVICE ;S22 - SERVICE CREDIT
|
|||
|
WL CC_PID,CCOIN ;S23 - CENTER COIN (3)
|
|||
|
WL 0,0 ;S24
|
|||
|
WL 0,0 ;S25
|
|||
|
WL 0,0 ;S26
|
|||
|
WL 0,0 ;S27
|
|||
|
WL 0,0 ;S28
|
|||
|
WL 0,0 ;S29
|
|||
|
WL 0,0 ;S30 - Snd IRQ
|
|||
|
WL 0,0 ;S31
|
|||
|
.endif
|
|||
|
|
|||
|
are_we_waiting_for_inits
|
|||
|
move a8,a0
|
|||
|
addi HI_INPUT_PID,a0
|
|||
|
clr a1
|
|||
|
not a1
|
|||
|
jauc EXISTP
|
|||
|
|
|||
|
#***************************************************************
|
|||
|
* plyr_strtbx - Process player start button (Process)
|
|||
|
|
|||
|
SUBR plyr_strtb1
|
|||
|
clr a8 ;A8=Player #
|
|||
|
jruc #go
|
|||
|
|
|||
|
SUBR plyr_strtb2
|
|||
|
movk 1,a8
|
|||
|
|
|||
|
#go
|
|||
|
|
|||
|
move @GAMSTATE,a0
|
|||
|
jrn #die ;In diagnostics?
|
|||
|
|
|||
|
cmpi INPARTY,a0
|
|||
|
jreq #die ;don't interrupt the win sequence
|
|||
|
|
|||
|
move @PSTATUS,a14
|
|||
|
btst a8,a14
|
|||
|
jrnz #die ;Player already started?
|
|||
|
|
|||
|
;New start. kill the player's score and win count
|
|||
|
|
|||
|
PUSH a0
|
|||
|
MOVI process_ptrs,A2
|
|||
|
movi p1winstreak,a0
|
|||
|
movi p1winstreakd,a4
|
|||
|
movi entered_inits,a1
|
|||
|
movi MATCH_TIMERS,a3
|
|||
|
movi p1ws_award,a14
|
|||
|
move a8,a8
|
|||
|
jrz #rstp1scor
|
|||
|
MOVI process_ptrs+020H,A2
|
|||
|
movi p2winstreak,a0
|
|||
|
movi p2winstreakd,a4
|
|||
|
movi entered_inits+030h,a1
|
|||
|
movi MATCH_TIMERS+020H,a3
|
|||
|
movi p2ws_award,a14
|
|||
|
#rstp1scor
|
|||
|
calla rst_winstreak_awards ;reset player winstreak awards
|
|||
|
PUSH a0
|
|||
|
clr a0
|
|||
|
move a8,a8
|
|||
|
jrz #do_dmsg_rst
|
|||
|
movk 1,a0
|
|||
|
#do_dmsg_rst
|
|||
|
calla reset_dufus_msgs
|
|||
|
move a8,a0
|
|||
|
calla clear_icon_total
|
|||
|
move a0,a8
|
|||
|
PULL a0
|
|||
|
; calla dufus_msgs_on
|
|||
|
clr a14
|
|||
|
; move a14,@belt_ask
|
|||
|
move a14,*a0,W ;wins
|
|||
|
MOVE A14,*A1,L ;entered_inits
|
|||
|
MOVE A14,*A2,L ;process_ptrs
|
|||
|
MOVE A14,*A3,L ;MATCH_TIMERS
|
|||
|
|
|||
|
move *a4,a0
|
|||
|
jrn #a4ok
|
|||
|
move a14,*a4,W ;wins vs drones
|
|||
|
#a4ok
|
|||
|
|
|||
|
PULL a0
|
|||
|
|
|||
|
move @OLD_PSTATUS,a14
|
|||
|
btst a8,a14
|
|||
|
jrz #reg ;Player on buyin screen?
|
|||
|
;On the buyin screen.
|
|||
|
cmpi INSELECT,a0
|
|||
|
jreq #start_from_waitcont
|
|||
|
LOCKUP
|
|||
|
|
|||
|
#reg
|
|||
|
|
|||
|
calla CR_STRTP ;not a continue. die on insuff $$
|
|||
|
jalo #die
|
|||
|
|
|||
|
move @GAMSTATE,a0
|
|||
|
cmpi INAMODE,a0
|
|||
|
jreq #start_from_amode ;New start from amode?
|
|||
|
|
|||
|
cmpi INGAMEOVER,a0
|
|||
|
jreq #start_from_gameover ;just like attract mode, really
|
|||
|
|
|||
|
cmpi INSELECT,a0
|
|||
|
jreq #start_from_select
|
|||
|
|
|||
|
cmpi INPREGAME,a0
|
|||
|
jreq #start_from_pregame
|
|||
|
|
|||
|
cmpi INPREGAME2,a0
|
|||
|
jreq #start_from_midgame
|
|||
|
|
|||
|
cmpi INGAME,a0
|
|||
|
jreq #start_from_midgame
|
|||
|
|
|||
|
LOCKUP
|
|||
|
|
|||
|
jruc #die ;cases we forgot...
|
|||
|
|
|||
|
#start_from_midgame
|
|||
|
|
|||
|
movi AUD_TOTSTARTS,a0 ;inc total starts audit
|
|||
|
calla AUD1
|
|||
|
|
|||
|
calla P_START ;eat the creds
|
|||
|
|
|||
|
CREATE NO_PID,game_interrupt ;create the game proc
|
|||
|
|
|||
|
jruc #set_pstatus_and_die
|
|||
|
|
|||
|
#start_from_waitcont
|
|||
|
|
|||
|
callr are_we_waiting_for_inits
|
|||
|
jrnz #die
|
|||
|
|
|||
|
calla CR_CONTP ;enuff creds?
|
|||
|
jalo #die
|
|||
|
calla P_CONT ;eat the creds
|
|||
|
|
|||
|
movi AUD_CONTTAKN,a0 ;inc continues taken audit
|
|||
|
calla AUD1
|
|||
|
|
|||
|
|
|||
|
jruc #set_pstatus_and_die ;waitcont watches for PSTATUS
|
|||
|
; changes, so we don't need to
|
|||
|
|
|||
|
#start_from_amode
|
|||
|
|
|||
|
clr a0
|
|||
|
|
|||
|
move a0,@are_we_waiting_f
|
|||
|
move a0,@OLD_PSTATUS
|
|||
|
CALLA INIT_LADDER_TABLE
|
|||
|
|
|||
|
#start_from_gameover
|
|||
|
movk 25,a0
|
|||
|
move a0,@robo_icon_trigger
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@no_pin_check
|
|||
|
move a0,@belt_ask
|
|||
|
|
|||
|
movi AUD_PRESTARTS,a0 ;inc attract mode starts audit
|
|||
|
calla AUD1
|
|||
|
|
|||
|
movi AUD_TOTSTARTS,a0 ;inc total starts audit
|
|||
|
calla AUD1
|
|||
|
|
|||
|
calla P_START ;eat the creds
|
|||
|
|
|||
|
;Reset the volume levels here
|
|||
|
calla KILL_ALL_CHANNELS
|
|||
|
calla RESET_VOICE_QUEUE
|
|||
|
|
|||
|
movi ADJVOLUME,a0
|
|||
|
calla GET_ADJ
|
|||
|
BADCHK a0,0,255,28 ;reg, lo, hi, val if bad
|
|||
|
calla set_volume
|
|||
|
|
|||
|
;If any button is pressed at the same time as the start button,
|
|||
|
;then skip all select stuff. Otherwise, game acts as it will on location
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,@match_cnt
|
|||
|
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
move a0,@skip_select
|
|||
|
move a0,@fight_debug
|
|||
|
|
|||
|
.ref get_all_buttons_cur2
|
|||
|
calla get_all_buttons_cur2
|
|||
|
jrz #nobutn
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@skip_select
|
|||
|
move a0,@fight_debug
|
|||
|
|
|||
|
.ref get_all_sticks_cur2
|
|||
|
calla get_all_sticks_cur2
|
|||
|
jrz #nobutn
|
|||
|
|
|||
|
movi -1,a0
|
|||
|
move a0,@skip_select
|
|||
|
|
|||
|
#nobutn
|
|||
|
.endif
|
|||
|
|
|||
|
|
|||
|
CREATE NO_PID,game_loop ;create the game proc
|
|||
|
jruc #set_pstatus_and_die
|
|||
|
|
|||
|
|
|||
|
#start_from_select
|
|||
|
callr are_we_waiting_for_inits
|
|||
|
jrnz #die
|
|||
|
|
|||
|
movi AUD_TOTSTARTS,a0 ;creds have already been checked,
|
|||
|
calla AUD1 ; so we know we have enough.
|
|||
|
calla P_START
|
|||
|
jruc #set_pstatus_and_die
|
|||
|
|
|||
|
|
|||
|
#start_from_pregame
|
|||
|
movi AUD_TOTSTARTS,a0 ;total starts
|
|||
|
calla AUD1
|
|||
|
calla P_START ;eat creds
|
|||
|
CREATE NO_PID,game_loop ;make a new game loop. This will
|
|||
|
|
|||
|
clr a3
|
|||
|
calla SNDSND
|
|||
|
|
|||
|
calla KILL_ALL_CHANNELS
|
|||
|
calla RESET_VOICE_QUEUE
|
|||
|
|
|||
|
movk 11,a3 ;Little rap ditty
|
|||
|
calla SNDSND
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,@are_we_waiting_f
|
|||
|
jruc #set_pstatus_and_die ;kill the old one and drop back
|
|||
|
;into the select screen.
|
|||
|
|
|||
|
#set_pstatus_and_die
|
|||
|
movk 1,a0 ;set the player bit in PSTATUS
|
|||
|
sll a8,a0
|
|||
|
move @PSTATUS,a14
|
|||
|
or a0,a14
|
|||
|
move a14,@PSTATUS
|
|||
|
MOVE @PSTARTS,A14
|
|||
|
or a0,a14
|
|||
|
move a14,@PSTARTS
|
|||
|
CLR A0
|
|||
|
MOVE A0,@THIS_GAME_TIME
|
|||
|
movi 49h,a0
|
|||
|
calla triple_sound
|
|||
|
|
|||
|
clr a0
|
|||
|
MOVE A0,@IRQSKYE
|
|||
|
|
|||
|
movi AUD_WINSTREAK,A0
|
|||
|
calla KILL_AUD
|
|||
|
movi AUD_PINSPEED,A0
|
|||
|
calla KILL_AUD
|
|||
|
movi AUD_BEATEN,A0
|
|||
|
calla KILL_AUD
|
|||
|
|
|||
|
#die DIE
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* game loop
|
|||
|
*
|
|||
|
|
|||
|
STRUCTPD
|
|||
|
LONG BLINK_PROC
|
|||
|
|
|||
|
SUBRP game_interrupt
|
|||
|
|
|||
|
;Someone has bought in during gameplay of a one player game!
|
|||
|
;Print challenger comes message
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@HALT
|
|||
|
|
|||
|
;If a player buys in during a one player game. We must decrement pxcpu_ladder
|
|||
|
;because we haven't defeated that cpu opponent yet!
|
|||
|
|
|||
|
;...but if the player has already lost, go ahead and dec.
|
|||
|
MOVE @match_winner,a0
|
|||
|
jrz #decldr
|
|||
|
|
|||
|
;someone has won--figure out if it's our player. We can't look at
|
|||
|
; PSTATUS because the other player has now bought in and it's gonna
|
|||
|
; be 3. Instead, look at the process_ptrs. There'll be a non-zero
|
|||
|
; value one of the first two, and that's our player.
|
|||
|
move @process_ptrs,a14,L
|
|||
|
jrz #op2
|
|||
|
#op1 ;p1 is the human. test bit 0 of match_winner
|
|||
|
btst 0,a0
|
|||
|
jrnz #nodecldr
|
|||
|
|
|||
|
;p1 lost. kill his PSTATUS bit.
|
|||
|
movi 2,a14
|
|||
|
move a14,@PSTATUS
|
|||
|
|
|||
|
jruc #decldr
|
|||
|
#op2 ;p2 is the human.
|
|||
|
btst 1,a0
|
|||
|
jrnz #nodecldr
|
|||
|
|
|||
|
;p2 lost. kill his PSTATUS bit.
|
|||
|
movi 1,a14
|
|||
|
move a14,@PSTATUS
|
|||
|
|
|||
|
#decldr MOVE @CURRENT_LADDER,A0,L
|
|||
|
SUBI 020H,A0
|
|||
|
MOVE A0,@CURRENT_LADDER,L
|
|||
|
#nodecldr
|
|||
|
|
|||
|
;If match/rnd winner anouncement is on screen, kill it
|
|||
|
movi ANNC_PID,a0
|
|||
|
clr a1
|
|||
|
not a1
|
|||
|
calla KILALL
|
|||
|
|
|||
|
movi CYCPID,a0
|
|||
|
clr a1
|
|||
|
not a1
|
|||
|
calla KILALL
|
|||
|
|
|||
|
movi CLSNEUT|TYPTEXT|SUBTXT,a0
|
|||
|
calla obj_del1c ;delete text/plates
|
|||
|
|
|||
|
movi CLSNEUT|TYPTEXT|SUBMES1,a0
|
|||
|
calla obj_del1c ;delete text/plates
|
|||
|
|
|||
|
#nope
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
calla pal_clean
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
movi ACTIVE,a3,L
|
|||
|
|
|||
|
#lp move *a3,a3,L ;Get next
|
|||
|
jrz #x ;End?
|
|||
|
move *a3(PWAKE),a0,L
|
|||
|
move *a3(PTIME),a14 ;Add sleep
|
|||
|
addi 3*60,a14
|
|||
|
move a14,*a3(PTIME)
|
|||
|
jruc #lp
|
|||
|
#x
|
|||
|
|
|||
|
CREATE SET_IMAGES_PID,DO_SET_IMAGES
|
|||
|
.ref fade_down_half
|
|||
|
movi #no_fade,a10
|
|||
|
CREATE FADE_PID,fade_down_half
|
|||
|
|
|||
|
SLEEP 120
|
|||
|
|
|||
|
calla KILL_ALL_CHANNELS
|
|||
|
calla RESET_VOICE_QUEUE
|
|||
|
|
|||
|
movi ADJVOLUME,a0
|
|||
|
calla GET_ADJ
|
|||
|
BADCHK a0,0,255,28 ;reg, lo, hi, val if bad
|
|||
|
calla set_volume
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@no_pin_check
|
|||
|
movk 11,a3 ;Little rap ditty
|
|||
|
calla SNDSND
|
|||
|
|
|||
|
|
|||
|
SUBRP game_loop
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
|
|||
|
movk 3,a0 ;2 humans
|
|||
|
.ref skip_select
|
|||
|
move @skip_select,a14
|
|||
|
jrz #noskp
|
|||
|
jrp #nodrn
|
|||
|
movk 2,a0 ;1 human 1 drone
|
|||
|
#nodrn
|
|||
|
move a0,@PSTATUS
|
|||
|
#noskp
|
|||
|
.endif
|
|||
|
|
|||
|
; .if DEBUG
|
|||
|
; ;don't allow this out in the field yet.
|
|||
|
; JSRP robo_check
|
|||
|
; .endif
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@NUM_OPPS
|
|||
|
|
|||
|
JSRP select_screen
|
|||
|
clr a0
|
|||
|
move a0,@no_pin_check
|
|||
|
|
|||
|
do_pregame
|
|||
|
|
|||
|
;clear match_winner
|
|||
|
clr a14
|
|||
|
move a14,@match_winner
|
|||
|
|
|||
|
; .ref robo_check
|
|||
|
;
|
|||
|
; JSRP robo_check ; RETURNS ONLY
|
|||
|
movk INPREGAME,a14 ;set GAMSTATE
|
|||
|
move a14,@GAMSTATE
|
|||
|
movi PREGAME_PID,a14 ;set our PID
|
|||
|
move a14,*a13(PROCID)
|
|||
|
|
|||
|
move @match_cnt,a0
|
|||
|
inc a0
|
|||
|
move a0,@match_cnt
|
|||
|
|
|||
|
move @PSTATUS,A0
|
|||
|
CMPI 3,A0
|
|||
|
JREQ NOT_FINISHED_GAME
|
|||
|
|
|||
|
calla is_final_match
|
|||
|
jrc finished_game
|
|||
|
|
|||
|
NOT_FINISHED_GAME
|
|||
|
movk 1,a14
|
|||
|
move a14,@do_show_options
|
|||
|
JSRP pregame_show
|
|||
|
|
|||
|
#game
|
|||
|
movi INGAME,a14 ;set GAMSTATE
|
|||
|
move a14,@GAMSTATE
|
|||
|
movi GAME_PID,a14 ;set our PID
|
|||
|
move a14,*a13(PROCID)
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,@p1rounds
|
|||
|
move a0,@p2rounds
|
|||
|
move a0,@in_finish_move
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@current_round
|
|||
|
|
|||
|
;set match_start_time
|
|||
|
move @PCNT,a14,L
|
|||
|
move a14,@match_start_time,L
|
|||
|
|
|||
|
;do the match
|
|||
|
JSRP start_match
|
|||
|
|
|||
|
;inc the TOTAL GAMES audit
|
|||
|
movi AUD_TOTALGAMES,A0
|
|||
|
CALLA AUD1
|
|||
|
|
|||
|
;The only time we return from start_match is when the match is over
|
|||
|
;and the game must goto:
|
|||
|
|
|||
|
;1. Buy-in screen for 1 or 2 player games
|
|||
|
;2. Ladder screen for the next matchup
|
|||
|
;3. Finale screens
|
|||
|
|
|||
|
;clear out howard speech flag so he can say it again on
|
|||
|
; new select screen.
|
|||
|
CLR A0
|
|||
|
MOVE A0,@DONE_HOWARD
|
|||
|
|
|||
|
;set delay before allowing player to select a wrestler
|
|||
|
movi 60,a0
|
|||
|
move a0,@are_we_waiting_f
|
|||
|
|
|||
|
;If that was a royal rumble, branch right now. The following code
|
|||
|
; assumes that PLYRNUMs match PLYR_SIDEs for human players.
|
|||
|
move @royal_rumble,a14
|
|||
|
jrnz #finished_rumble
|
|||
|
|
|||
|
;Did a human player lose?
|
|||
|
move @PSTATUS,a0
|
|||
|
move @match_winner,a1
|
|||
|
andn a1,a0
|
|||
|
jrnz #go_buyin
|
|||
|
|
|||
|
;This player will keep on playing.
|
|||
|
;Display ladder of progreesion which shows his next opponent.
|
|||
|
|
|||
|
move @match_winner,a10
|
|||
|
dec a10
|
|||
|
JSRP pin_speed_in_case
|
|||
|
jruc do_pregame
|
|||
|
|
|||
|
#go_buyin
|
|||
|
;Display 2 player buyin screen.
|
|||
|
;Turn on appropriate messages for each player
|
|||
|
;One guy lost, check if he achieved a high score. (Most wins)
|
|||
|
;If so, allow him to enter initials just on his panel.
|
|||
|
|
|||
|
;if the loser had a win streak, do a random sound call.
|
|||
|
calla loser_snd
|
|||
|
|
|||
|
;save old PSTATUS
|
|||
|
move @PSTATUS,a0
|
|||
|
move a0,@OLD_PSTATUS
|
|||
|
|
|||
|
;did a human win? Check by ANDing match_winner with PSTATUS.
|
|||
|
move @PSTATUS,a0
|
|||
|
move @match_winner,a1
|
|||
|
and a1,a0
|
|||
|
jrnz #human_won
|
|||
|
|
|||
|
;The cpu won
|
|||
|
clr a0
|
|||
|
move a0,@match_winner
|
|||
|
|
|||
|
;decrement CURRENT_LADDER, because NEXT_IN_LADDER automatically
|
|||
|
; increments it.
|
|||
|
move @CURRENT_LADDER,A0,L
|
|||
|
subi 20h,a0
|
|||
|
move a0,@CURRENT_LADDER,L
|
|||
|
|
|||
|
#human_won
|
|||
|
;use match_winner as our new PSTATUS.
|
|||
|
move @match_winner,a0
|
|||
|
move a0,@PSTATUS
|
|||
|
|
|||
|
calla is_final_match
|
|||
|
jrc finished_game
|
|||
|
|
|||
|
JSRP buyin_select
|
|||
|
|
|||
|
;Clear the loser's wincount
|
|||
|
movi p1winstreak,a1
|
|||
|
move @match_winner,a0
|
|||
|
|
|||
|
cmpi 1,a0
|
|||
|
jrnz #notp1
|
|||
|
movi p2winstreak,a1
|
|||
|
|
|||
|
#notp1 clr a14
|
|||
|
move a14,*a1
|
|||
|
|
|||
|
jruc do_pregame
|
|||
|
|
|||
|
****
|
|||
|
|
|||
|
#finished_rumble
|
|||
|
|
|||
|
;save old PSTATUS
|
|||
|
; move @PSTATUS,a14
|
|||
|
; move a14,@OLD_PSTATUS
|
|||
|
|
|||
|
;...no, DON'T save the old PSTATUS. For whatever reason, the
|
|||
|
;buyin/select stuff won't work with a PSTATUS of 0 and an
|
|||
|
;OLD_PSTATUS of 3. Evidently two people losing is too traumatic
|
|||
|
;an event for this rickety code to deal with. So we just pretend.
|
|||
|
;Maybe we fix this before we ship, maybe we don't. It works.
|
|||
|
|
|||
|
;create a set_images process to keep us animating while this
|
|||
|
; stuff is going on.
|
|||
|
CREATE SET_IMAGES_PID,DO_SET_IMAGES
|
|||
|
PUSHP a0 ;store set_images proc address
|
|||
|
JSRP show_most_damage
|
|||
|
|
|||
|
movk 1,a14
|
|||
|
move a14,@OLD_PSTATUS
|
|||
|
|
|||
|
;did the humans win?
|
|||
|
move @p1winstreak,a0
|
|||
|
clr a14
|
|||
|
move a14,@p1winstreak
|
|||
|
move a14,@p2winstreak
|
|||
|
move a14,@p1oldwinstreak
|
|||
|
move a14,@p2oldwinstreak
|
|||
|
TEST a0
|
|||
|
jrz #rr_cpuwon
|
|||
|
|
|||
|
;create a set_images process to keep us animating while this
|
|||
|
; stuff is going on.
|
|||
|
|
|||
|
;set GAMSTATE to INPARTY--disallows buyins
|
|||
|
movk INPARTY,a14
|
|||
|
move a14,@GAMSTATE
|
|||
|
|
|||
|
JSRP do_fireworks
|
|||
|
|
|||
|
PULLP a0 ;restore set_images proc address
|
|||
|
calla KILL
|
|||
|
|
|||
|
;inc the 'human wins in rumble' audit
|
|||
|
movi AUD_RRWINS,a0
|
|||
|
calla AUD1
|
|||
|
|
|||
|
JSRP GAME_BEATEN
|
|||
|
|
|||
|
.if RR_AWARD = 1
|
|||
|
|
|||
|
;zero entered_inits
|
|||
|
clr a14
|
|||
|
move a14,@entered_inits,L
|
|||
|
move a14,@entered_inits+20h,L
|
|||
|
move a14,@entered_inits+40h,L
|
|||
|
|
|||
|
jruc do_pregame
|
|||
|
.endif
|
|||
|
|
|||
|
#rr_cpuwon
|
|||
|
|
|||
|
clr a14
|
|||
|
move a14,@PSTATUS
|
|||
|
movk 3,a14
|
|||
|
move a14,@OLD_PSTATUS
|
|||
|
move a14,@rr_loss
|
|||
|
JSRP buyin_select
|
|||
|
|
|||
|
;clear royal_rumble
|
|||
|
clr a14
|
|||
|
move a14,@rr_loss
|
|||
|
move a14,@royal_rumble
|
|||
|
|
|||
|
move @PSTATUS,a14
|
|||
|
jrnz do_pregame
|
|||
|
|
|||
|
;nobody bought in. drop to game over
|
|||
|
jauc do_game_over
|
|||
|
****
|
|||
|
|
|||
|
finished_game
|
|||
|
;player has won the entire game.
|
|||
|
|
|||
|
;set GAMSTATE to INPARTY--disallows buyins
|
|||
|
movk INPARTY,a14
|
|||
|
move a14,@GAMSTATE
|
|||
|
|
|||
|
;Audit total time for a 1 credit game
|
|||
|
MOVI AUD_CREDLEN,A0
|
|||
|
MOVE @THIS_GAME_TIME,A1
|
|||
|
CALLA AUD
|
|||
|
MOVI AUD_CREDLENNUM,A0
|
|||
|
CALLA AUD1
|
|||
|
CLR A0
|
|||
|
MOVE A0,@THIS_GAME_TIME
|
|||
|
MOVE A0,@PSTARTS
|
|||
|
|
|||
|
|
|||
|
;create a set_images process to keep us animating while this
|
|||
|
; stuff is going on.
|
|||
|
CREATE SET_IMAGES_PID,DO_SET_IMAGES
|
|||
|
PUSHP a0
|
|||
|
JSRP do_fireworks
|
|||
|
PULLP a0
|
|||
|
calla KILL
|
|||
|
calla is_8_on_1
|
|||
|
jrnc #no_stories
|
|||
|
JSRP show_wrestler_end_story
|
|||
|
#no_stories
|
|||
|
JSRP GAME_BEATEN
|
|||
|
JSRP CREATE_TEXT_LINE
|
|||
|
JAUC THIS_GAME_IS_BEATEN
|
|||
|
|
|||
|
#buyin_mod
|
|||
|
.long wwfselbkBMOD
|
|||
|
.word -40,0
|
|||
|
.long 0
|
|||
|
|
|||
|
#no_fade
|
|||
|
.long WGSF_Y_P,scorep,0
|
|||
|
LN1b_setup
|
|||
|
JAM_STR wgsf24_ascii,12,0,200,77,WGSF_Y_P,0
|
|||
|
LN2b_setup
|
|||
|
JAM_STR wgsf24_ascii,6,0,200,120,WGSF_Y_P,0
|
|||
|
#str_game
|
|||
|
.byte "CHALLENGER",0
|
|||
|
#str_over
|
|||
|
.byte "FOUND!",0
|
|||
|
.even
|
|||
|
|
|||
|
|
|||
|
pprompt
|
|||
|
.string "PLAYER ",0
|
|||
|
.even
|
|||
|
ydid_prompt
|
|||
|
.string " INFLICTED",0
|
|||
|
.even
|
|||
|
pct_damage
|
|||
|
.string "% OF THE TOTAL DAMAGE!!!",0
|
|||
|
.even
|
|||
|
pprompt_setup
|
|||
|
.ref osgemd_ascii
|
|||
|
; JAM_STR osgmd8_ascii,10,0,200,140,SGMD8YEL,print_string_C2
|
|||
|
JAM_STR osgemd_ascii,10,0,200,140,BLUE,print_string_C2
|
|||
|
.even
|
|||
|
pct_damage_setup
|
|||
|
; JAM_STR osgmd8_ascii,10,0,200,155,SGMD8YEL,print_string_C2
|
|||
|
JAM_STR osgemd_ascii,10,0,200,163,BLUE,print_string_C2
|
|||
|
.even
|
|||
|
.bss dmg_ram,16*64
|
|||
|
|
|||
|
#*************************************************************************
|
|||
|
*
|
|||
|
SUBRP show_most_damage
|
|||
|
PUSHP a0,a1,a2,a4
|
|||
|
PUSHP a8,a9,a10,a11
|
|||
|
|
|||
|
clr a11 ; Clear out plyr damage totals
|
|||
|
clr a1 ; Clear total damage done
|
|||
|
move a11,@plyr_dmg_given,L
|
|||
|
|
|||
|
movi process_ptrs,a8 ; Get process pointers
|
|||
|
#find_damage_lp
|
|||
|
move *a8+,a9,L ; Get player process pointer
|
|||
|
jrz #find_done ; are we done ? - br = yes
|
|||
|
move *a9(PLYR_TYPE),a10 ; Get the player type
|
|||
|
jrnz #find_damage_lp ; Is this a drone - br = yes
|
|||
|
move *a9(DAMAGE_GIVEN),a11 ; Get damage this player did
|
|||
|
add a11,a1 ; Total the damage
|
|||
|
move *a9(PLYRNUM),a10 ; Which player is this
|
|||
|
sll 4,a10 ; Point to temp storage for this player
|
|||
|
addi plyr_dmg_given,a10
|
|||
|
move a11,*a10 ; Store his damage
|
|||
|
jruc #find_damage_lp ; Keep going
|
|||
|
#find_done
|
|||
|
movk 1,a11 ; Set player 1
|
|||
|
move @plyr_dmg_given,a8 ; Get player 1 damage
|
|||
|
move @plyr_dmg_given+10h,a9 ; Get player 2 damage
|
|||
|
cmp a8,a9 ; Player 1 did more damage ?
|
|||
|
jrlt #p1_most ; br = yes
|
|||
|
movk 2,a11 ; Set player 2
|
|||
|
move a9,a8 ; Set damage done
|
|||
|
#p1_most
|
|||
|
move a8,a9 ; Set up for conversion to %
|
|||
|
movi 100,a10 ; Mult damage done by 100
|
|||
|
mpyu a10,a9
|
|||
|
divu a1,a9 ; Divide by total damage done
|
|||
|
|
|||
|
movi pprompt_setup,a2 ; Show which player did most damage
|
|||
|
calla setup_message
|
|||
|
movi CLSDEAD,a4
|
|||
|
move a4,@mess_objid
|
|||
|
move a11,a0
|
|||
|
movk 2,a1
|
|||
|
calla dec_to_asc
|
|||
|
movi pprompt,a4
|
|||
|
calla copy_rom_string
|
|||
|
calla concat_string
|
|||
|
movi ydid_prompt,a4
|
|||
|
calla concat_rom_string
|
|||
|
movi message_buffer,a4
|
|||
|
calla print_string_C2
|
|||
|
|
|||
|
movi pct_damage_setup,a2 ; Show how much damage he/she did
|
|||
|
calla setup_message
|
|||
|
movi CLSDEAD,a4
|
|||
|
move a4,@mess_objid
|
|||
|
move a9,a0
|
|||
|
movi 100,a1
|
|||
|
calla dec_to_asc
|
|||
|
calla copy_string
|
|||
|
movi pct_damage,a4
|
|||
|
calla concat_rom_string
|
|||
|
movi message_buffer,a4
|
|||
|
calla print_string_C2
|
|||
|
.ref hscore_colcyc
|
|||
|
|
|||
|
calla hscore_colcyc
|
|||
|
move a0,a8
|
|||
|
SLEEP TSEC ; Show for 1 second minimum
|
|||
|
|
|||
|
movi TSEC*2,a9 ; Allow upto 2 more seconds
|
|||
|
#wait_lp
|
|||
|
SLEEPK 1
|
|||
|
calla get_all_buttons_cur
|
|||
|
jrnz #sd_exit
|
|||
|
dsjs a9,#wait_lp
|
|||
|
#sd_exit
|
|||
|
move a8,a0
|
|||
|
calla KILL
|
|||
|
PULLP a8,a9,a10,a11
|
|||
|
PULLP a0,a1,a2,a4
|
|||
|
RETP
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
;Copy pXwinstreaks to pXoldwinstreaks, then
|
|||
|
;increment winner's winstreak and clear loser's.
|
|||
|
|
|||
|
SUBR increment_wincount
|
|||
|
|
|||
|
;save old streaks
|
|||
|
move @p1winstreak,a14
|
|||
|
move a14,@p1oldwinstreak
|
|||
|
move @p2winstreak,a14
|
|||
|
move a14,@p2oldwinstreak
|
|||
|
|
|||
|
move @match_winner,a0
|
|||
|
move @PSTATUS,a14
|
|||
|
and a14,a0
|
|||
|
|
|||
|
;inc/clear p1winstreak
|
|||
|
move @p1winstreak,a1
|
|||
|
inc a1
|
|||
|
btst 0,a0
|
|||
|
jrnz #p1ok
|
|||
|
clr a1
|
|||
|
|
|||
|
#p1ok PUSHP a2
|
|||
|
clr a2
|
|||
|
calla arm_winstreak_award
|
|||
|
PULLP a2
|
|||
|
|
|||
|
move a1,@p1winstreak
|
|||
|
move a1,a1
|
|||
|
jrnz #no_clr_p1_ws_awards
|
|||
|
movi p1ws_award,a14
|
|||
|
calla rst_winstreak_awards
|
|||
|
#no_clr_p1_ws_awards
|
|||
|
|
|||
|
; ;inc/clear p1winstreakd (clear if lost, inc if won vs drones)
|
|||
|
; btst 0,a0
|
|||
|
; jrz #clrp1d ;clr if we lost
|
|||
|
; move @p1winstreakd,a1
|
|||
|
; move @PSTATUS,a14
|
|||
|
; btst 1,a14
|
|||
|
; jrz #incp1d ;inc if vs drone
|
|||
|
; jruc #p1dset ;else no increment
|
|||
|
;
|
|||
|
;#incp1d inc a1
|
|||
|
; jruc #p1dset
|
|||
|
;#clrp1d clr a1
|
|||
|
;#p1dset move a1,@p1winstreakd
|
|||
|
|
|||
|
;inc/clear p2winstreak
|
|||
|
move @p2winstreak,a1
|
|||
|
inc a1
|
|||
|
btst 1,a0
|
|||
|
jrnz #p2ok
|
|||
|
clr a1
|
|||
|
#p2ok PUSHP a2
|
|||
|
movk 1,a2
|
|||
|
calla arm_winstreak_award
|
|||
|
PULLP a2
|
|||
|
move a1,@p2winstreak
|
|||
|
move a1,a1
|
|||
|
jrnz #no_clr_p2_ws_awards
|
|||
|
movi p2ws_award,a14
|
|||
|
calla rst_winstreak_awards
|
|||
|
#no_clr_p2_ws_awards
|
|||
|
|
|||
|
; ;inc/clear p2winstreakd (clear if lost, inc if won vs drones or
|
|||
|
; ; value < 2.
|
|||
|
; btst 1,a0
|
|||
|
; jrz #clrp2d ;clr if we lost
|
|||
|
; move @p2winstreakd,a1
|
|||
|
; move @PSTATUS,a14
|
|||
|
; btst 0,a14
|
|||
|
; jrz #incp2d ;inc if vs drone
|
|||
|
; jruc #p2dset ;else no increment
|
|||
|
;
|
|||
|
;#incp2d inc a1
|
|||
|
; jruc #p2dset
|
|||
|
;#clrp2d clr a1
|
|||
|
;#p2dset move a1,@p2winstreakd
|
|||
|
|
|||
|
;adjust p1&p2winstreakd. three possibilities:
|
|||
|
; 1. 2p match. do nothing
|
|||
|
; 2. 1p match, player wins. inc his winstreak.
|
|||
|
; 3. 1p match, player loses. set both winstreaks to -1, unless
|
|||
|
; they're already negative, in which case we dec both.
|
|||
|
|
|||
|
move @PSTATUS,a14
|
|||
|
cmpi 3,a14
|
|||
|
jreq #do_nothing
|
|||
|
|
|||
|
move @match_winner,a0
|
|||
|
cmp a0,a14
|
|||
|
jrne #dec_both
|
|||
|
; jruc #inc_one
|
|||
|
|
|||
|
#inc_one
|
|||
|
dec a0
|
|||
|
X16 a0
|
|||
|
addi p1winstreakd,a0
|
|||
|
move *a0,a14
|
|||
|
jrnn #ib_ok
|
|||
|
clr a14
|
|||
|
#ib_ok inc a14
|
|||
|
move a14,*a0
|
|||
|
jruc #do_nothing
|
|||
|
|
|||
|
#dec_both
|
|||
|
move @p1winstreakd,a14
|
|||
|
jrn #db_ok
|
|||
|
clr a14
|
|||
|
#db_ok dec a14
|
|||
|
move a14,@p1winstreakd
|
|||
|
move a14,@p2winstreakd
|
|||
|
; jruc #do_nothing
|
|||
|
|
|||
|
#do_nothing
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* This is the master fight process. It's created once, and it doesn't end
|
|||
|
* until the entire match is over. Between rounds, it's just suspended--
|
|||
|
* it doesn't actually die and get re-created.
|
|||
|
*
|
|||
|
|
|||
|
SUBR start_match
|
|||
|
|
|||
|
;skip some of this if we're in attract mode
|
|||
|
move @PSTATUS,a14
|
|||
|
jrz #amode_battle
|
|||
|
|
|||
|
move @total_matches,a14,W
|
|||
|
inc a14
|
|||
|
move a14,@total_matches,W
|
|||
|
CALLA SPECIAL_WIPEOUT
|
|||
|
clr a14 ; Clear out stuff for finishing moves
|
|||
|
move a14,@p1pins
|
|||
|
move a14,@p2pins
|
|||
|
move a14,@finish_completed
|
|||
|
|
|||
|
movi p1mtch_award,a14 ; Reset the per match awards
|
|||
|
calla rst_awards
|
|||
|
movi p1rnd_award,a14 ; Reset the per round awards
|
|||
|
calla rst_awards
|
|||
|
|
|||
|
#amode_battle
|
|||
|
|
|||
|
calla pal_clean
|
|||
|
|
|||
|
**** ;routine display initialization
|
|||
|
movk 1,a0
|
|||
|
move a0,@dpageflip
|
|||
|
move a0,@HALT
|
|||
|
|
|||
|
**** ;position the scroller
|
|||
|
callr init_scroller
|
|||
|
|
|||
|
**** ;If this is the final match, initialize FINAL_PTR. We can't do
|
|||
|
; it in NEXT_IN_LADDER because if we're speeding through the
|
|||
|
; rounds, that can happen while wrestler processes from the
|
|||
|
; previous round are still active and DEAD, so they gobble up
|
|||
|
; the first three slots and we end up with a 1v5 match.
|
|||
|
calla is_final_match
|
|||
|
jrnc #do_zf
|
|||
|
movi FINAL_BATTLE_LINEUP+24,a14
|
|||
|
move a14,@FINAL_PTR,L
|
|||
|
|
|||
|
**** ;World Y-position at which power bars toggle in z
|
|||
|
#do_zf movi ZFLIP_POS,a0
|
|||
|
move a0,@ZFLIP_POS_VAR,L
|
|||
|
|
|||
|
**** ;set up the ring.
|
|||
|
movi ring_mod,a0
|
|||
|
move a0,@BAKMODS,L
|
|||
|
calla BGND_UD1
|
|||
|
|
|||
|
**** ;init message_flag - clears 'already done' bits for move names
|
|||
|
clr a0
|
|||
|
move a0,@message_flag,L
|
|||
|
move a0,@MESSAGE_FLAGS,L ;clear which side has a message out
|
|||
|
MOVE A0,@FLASH_FLAG ;clear out the 'doing flashes' flag
|
|||
|
MOVE A0,@COMBO_FLASH_FLAG,L ;clear out combo flashing message
|
|||
|
|
|||
|
**** ;kill off any perpetual yells that might be going on.
|
|||
|
CALLA FIND_AND_KILL_ENDLESS
|
|||
|
|
|||
|
**** ;create misc stuff like crowd, clocks, a wipe, and some debug stuff.
|
|||
|
CREATE CROWD_PID,crowd_anim
|
|||
|
CREATE TIMER_PID,match_timer
|
|||
|
CREATE ZSHIFT_PID,SHIFT_BARS_IN_Z
|
|||
|
CREATE FLASH_PID,maybe_do_flashes
|
|||
|
clr a14
|
|||
|
move a14,@wrestler_count_proc,L
|
|||
|
move @royal_rumble,a14
|
|||
|
jrnz #create_wcounter
|
|||
|
calla is_8_on_1
|
|||
|
jrnc #no_wcounter
|
|||
|
#create_wcounter
|
|||
|
CREATE WCOUNT_PID,wrestler_counter
|
|||
|
move a0,@wrestler_count_proc,L
|
|||
|
#no_wcounter
|
|||
|
|
|||
|
.if DIR_DEBUG
|
|||
|
CREATE DIR_DEBUG_PID,dir_debug
|
|||
|
.endif
|
|||
|
|
|||
|
.if SCRT_DEBUG
|
|||
|
CREATE SCRT_DEBUG_PID,scrt_debug
|
|||
|
.endif
|
|||
|
|
|||
|
**** ;create ropes
|
|||
|
|
|||
|
movi ROPE_FRONT,a11
|
|||
|
CREATE ROPE_PID,rope
|
|||
|
move a0,@front_rproc,L
|
|||
|
|
|||
|
movi ROPE_BACK,a11
|
|||
|
CREATE ROPE_PID,rope
|
|||
|
move a0,@back_rproc,L
|
|||
|
|
|||
|
movi ROPE_LEFT,a11
|
|||
|
CREATE ROPE_PID,rope
|
|||
|
move a0,@left_rproc,L
|
|||
|
|
|||
|
movi ROPE_RIGHT,a11
|
|||
|
CREATE ROPE_PID,rope
|
|||
|
move a0,@right_rproc,L
|
|||
|
|
|||
|
**** ;initialize various other crap
|
|||
|
clr a0
|
|||
|
move a0,@match_winner
|
|||
|
MOVE A0,@DAM_MULT
|
|||
|
MOVE A0,@combo_audit_done
|
|||
|
move a0,@no_debris
|
|||
|
move a0,@any_hits
|
|||
|
MOVE A0,@PERFECT_WINS
|
|||
|
MOVE A0,@MUSIC_HAP
|
|||
|
MOVE A0,@WINS_OBJ,L
|
|||
|
MOVE A0,@WINS_OBJ+20H,L
|
|||
|
MOVE A0,@WINS_OBJ+40H,L
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
move a0,@instant_death
|
|||
|
.endif
|
|||
|
|
|||
|
**** ;increment the battles started audit
|
|||
|
movi AUD_VSHUMS,a0
|
|||
|
move @PSTATUS,a14
|
|||
|
JRZ NO_BATLES_AT_ALL
|
|||
|
cmpi 03h,a14
|
|||
|
jreq #aud_vshumf
|
|||
|
movi AUD_VSCPUS,a0
|
|||
|
#aud_vshumf
|
|||
|
calla AUD1
|
|||
|
NO_BATLES_AT_ALL
|
|||
|
|
|||
|
;clear out the process_ptrs data
|
|||
|
callr CLEAR_PROCESSES
|
|||
|
|
|||
|
**** ;initialize the life and combo bars.
|
|||
|
calla init_life_data
|
|||
|
|
|||
|
**** ;create wrestler processes
|
|||
|
|
|||
|
;figure out if it's a 0-, 1-, or 2-player game, and branch.
|
|||
|
MOVE @PSTATUS,A0
|
|||
|
jrz #0plyr
|
|||
|
CMPI 3,A0
|
|||
|
JREQ #2plyr
|
|||
|
|
|||
|
#1plyr ;1-player game
|
|||
|
|
|||
|
;create player process
|
|||
|
movi PSIDE_PLYR1,a9 ;side on
|
|||
|
clr a10 ;plyrnum
|
|||
|
move @index1,a11 ;wrestlernum
|
|||
|
|
|||
|
btst 0,A0
|
|||
|
jrnz #set
|
|||
|
|
|||
|
movi PSIDE_PLYR2,a9 ;side on
|
|||
|
movk 1,a10 ;plyrnum
|
|||
|
move @index2,a11 ;wrestlernum
|
|||
|
|
|||
|
#set movi PTYPE_PLAYER,a8 ;player type
|
|||
|
SCREATE WMAIN_PID,wrestler_main
|
|||
|
callr set_process_ptr2
|
|||
|
CREATE GETUP_PID,getup_meter
|
|||
|
|
|||
|
|
|||
|
#ndrone ;create the drone processes
|
|||
|
;get the lineup for the coming battle
|
|||
|
MOVE @CURRENT_LADDER,A4,L
|
|||
|
MOVE *A4,A4,L ;battle lineup
|
|||
|
|
|||
|
;drone PLYRNUM's start at 2
|
|||
|
MOVK 2,A10
|
|||
|
move @NUM_OPPS,a3
|
|||
|
|
|||
|
#nxtdrn CALLA SORT_OUT_WRESTLER_NUM
|
|||
|
|
|||
|
*jakeeee if you want a specific wrestler, put his number in A11 here !
|
|||
|
|
|||
|
movi PTYPE_DRONE,a8 ;player type
|
|||
|
|
|||
|
;set PLYR_SIDE for ENEMY drones--All these drones are bad guys.
|
|||
|
;In a 2v2 match, we can't use this code.
|
|||
|
movi PSIDE_PLYR2,a9
|
|||
|
move @PSTATUS,a14
|
|||
|
btst 0,a14 ;plyr 1 human?
|
|||
|
jrnz #pside_set
|
|||
|
movi PSIDE_PLYR1,a9
|
|||
|
#pside_set
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
move @skip_select,a0
|
|||
|
jrge #skp
|
|||
|
movk 6,a11 ;make him a doink
|
|||
|
#skp
|
|||
|
.endif
|
|||
|
|
|||
|
SCREATE WMAIN_PID,wrestler_main
|
|||
|
callr set_process_ptr2
|
|||
|
CREATE GETUP_PID,getup_meter
|
|||
|
SRL 8,A4 ;shift battle lineup
|
|||
|
INC A10 ;inc PLYRNUM
|
|||
|
dsj a3,#nxtdrn
|
|||
|
|
|||
|
JRUC #wrestlers_created
|
|||
|
|
|||
|
*****
|
|||
|
|
|||
|
#0plyr ;0-player (attract mode) game
|
|||
|
movi PTYPE_DRONE,a8 ;player type
|
|||
|
movi PSIDE_PLYR1,a9 ;side on
|
|||
|
movk 2,a10 ;wres num
|
|||
|
move @index1,a11 ;wrestler
|
|||
|
SCREATE WMAIN_PID,wrestler_main ;player 1
|
|||
|
callr set_process_ptr2
|
|||
|
CREATE GETUP_PID,getup_meter
|
|||
|
|
|||
|
move @CURRENT_LADDER,a4,L
|
|||
|
move *a4,a4,L
|
|||
|
move @NUM_OPPS,a3
|
|||
|
movi PTYPE_DRONE,a8
|
|||
|
movi PSIDE_PLYR2,a9
|
|||
|
#nxt calla SORT_OUT_WRESTLER_NUM
|
|||
|
srl 8,a4 ;shift battle lineup
|
|||
|
inc a10 ;inc PLYRNUM
|
|||
|
SCREATE WMAIN_PID,wrestler_main
|
|||
|
callr set_process_ptr2
|
|||
|
CREATE GETUP_PID,getup_meter
|
|||
|
#ngup dsj a3,#nxt
|
|||
|
|
|||
|
jruc #wrestlers_created
|
|||
|
|
|||
|
*****
|
|||
|
|
|||
|
#2plyr ;2-player game
|
|||
|
|
|||
|
movi PTYPE_PLAYER,a8 ;player type
|
|||
|
move @PSTATUS,a0
|
|||
|
btst 0,a0
|
|||
|
jrnz #ok
|
|||
|
movi PTYPE_DRONE,a8 ;player type
|
|||
|
#ok movi PSIDE_PLYR1,a9 ;side on
|
|||
|
clr a10 ;wres num
|
|||
|
move @index1,a11 ;wrestler
|
|||
|
SCREATE WMAIN_PID,wrestler_main ;player 1
|
|||
|
callr set_process_ptr2
|
|||
|
CREATE GETUP_PID,getup_meter
|
|||
|
|
|||
|
movi PTYPE_PLAYER,a8 ;player type
|
|||
|
move @PSTATUS,a0
|
|||
|
btst 1,a0
|
|||
|
jrnz #ok1
|
|||
|
movi PTYPE_DRONE,a8 ;player type
|
|||
|
#ok1 movi PSIDE_PLYR2,a9 ;side on
|
|||
|
|
|||
|
;if we're in royal rumble mode, second guy is on first team
|
|||
|
move @royal_rumble,a14
|
|||
|
sub a14,a9
|
|||
|
|
|||
|
movk 1,a10 ;wres num
|
|||
|
move @index2,a11 ;wrestler
|
|||
|
SCREATE WMAIN_PID,wrestler_main ;player 2
|
|||
|
callr set_process_ptr2
|
|||
|
CREATE GETUP_PID,getup_meter
|
|||
|
|
|||
|
;set the 'too late now to choose buddy mode' flag
|
|||
|
movk 1,a14
|
|||
|
move a14,@buddy_mode_checked
|
|||
|
|
|||
|
;If they selected buddy mode, add a pair of drones.
|
|||
|
;WE HAVE TO COMPUTE buddy_mode_on OURSELVES, because
|
|||
|
; the code that normally does that kind of thing hasn't
|
|||
|
; gone off yet.
|
|||
|
.ref p1powerup_request
|
|||
|
.ref p2powerup_request
|
|||
|
move @p1powerup_request,a8,L
|
|||
|
move @p2powerup_request,a9,L
|
|||
|
and a9,a8
|
|||
|
andi BUDDY_MODE,a8
|
|||
|
move a8,@buddy_mode_on
|
|||
|
jrz #no_buddies
|
|||
|
|
|||
|
calla choose_buddies
|
|||
|
PUSH a0,a1 ;store the two wrestlernums
|
|||
|
|
|||
|
movk PTYPE_DRONE,a8
|
|||
|
movi PSIDE_PLYR1,a9
|
|||
|
movk 2,a10
|
|||
|
PULL a11 ;get the first buddy
|
|||
|
SCREATE WMAIN_PID,wrestler_main
|
|||
|
callr set_process_ptr2
|
|||
|
|
|||
|
movk PTYPE_DRONE,a8
|
|||
|
movk PSIDE_PLYR2,a9
|
|||
|
movk 3,a10
|
|||
|
PULL a11 ;get the second buddy
|
|||
|
SCREATE WMAIN_PID,wrestler_main
|
|||
|
callr set_process_ptr2
|
|||
|
|
|||
|
jruc #wrestlers_created
|
|||
|
|
|||
|
#no_buddies
|
|||
|
|
|||
|
;if we're in royal rumble mode, create the starting bad guys.
|
|||
|
move @royal_rumble,a14
|
|||
|
jrz #wrestlers_created
|
|||
|
|
|||
|
;you never hit the progress screen in royal_rumble mode, so we've
|
|||
|
; got to set up some stuff by hand.
|
|||
|
|
|||
|
.ref get_royal_lineup
|
|||
|
|
|||
|
calla get_royal_lineup
|
|||
|
movi FINAL_BATTLE_LINEUP,a0
|
|||
|
move *a0,a1,L
|
|||
|
andi 0000FFFFh,a1
|
|||
|
ori 02000000h,a1
|
|||
|
|
|||
|
move @CURRENT_LADDER,a14,L
|
|||
|
move a1,*a14,L
|
|||
|
movk 2,a14
|
|||
|
move a14,@NUM_OPPS
|
|||
|
|
|||
|
;set FINAL_PTR to the next guy to fight.
|
|||
|
addi 2*8,a0
|
|||
|
move a0,@FINAL_PTR,L
|
|||
|
|
|||
|
jruc #ndrone
|
|||
|
|
|||
|
#wrestlers_created
|
|||
|
|
|||
|
**** ;create the rewire monitor - this has to be done AFTER all the
|
|||
|
; set_process_ptr2's have been called
|
|||
|
CREATE REWIRE_PID,rewire_monitor
|
|||
|
|
|||
|
;play the battle music
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
movi 40,a3
|
|||
|
move @skip_select,a14
|
|||
|
jrnz #marked_snd
|
|||
|
.endif
|
|||
|
|
|||
|
movk 16,a3
|
|||
|
move @royal_rumble,a14
|
|||
|
jrnz music_selected
|
|||
|
calla is_8_on_1
|
|||
|
jrc music_selected
|
|||
|
movk 25,a3
|
|||
|
move @hcount,a14
|
|||
|
srl 1,a14
|
|||
|
jrnc music_selected
|
|||
|
movk 15,a3
|
|||
|
music_selected
|
|||
|
move a3,@temp_music
|
|||
|
|
|||
|
calla SNDSND
|
|||
|
|
|||
|
#marked_snd
|
|||
|
|
|||
|
;SET CROWD VOLUME TO 100% OF MASTER VOLUME
|
|||
|
MOVI 55ABH+5,A3
|
|||
|
CALLA SNDSND
|
|||
|
MOVI 0FF00H,A3
|
|||
|
CALLA SNDSND
|
|||
|
;and the crowd
|
|||
|
movi 2065,a3
|
|||
|
calla SNDSND
|
|||
|
|
|||
|
CALLA CLEAR_SPEECH_REPEAT
|
|||
|
|
|||
|
callr init_joystat
|
|||
|
callr init_joy_dtime
|
|||
|
|
|||
|
callr init_reduce_bog
|
|||
|
|
|||
|
calla init_special_objlist
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,@match_over
|
|||
|
|
|||
|
CALLA RESETUP_PROGRESS
|
|||
|
calla INIT_SKIRTS
|
|||
|
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
calla BGND_UD1
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
; CREATE SKIRT_PID,CHANGE_SKIRTS
|
|||
|
|
|||
|
;if this is the first match after attract mode, cue vince.
|
|||
|
move @total_matches,a14
|
|||
|
dec a14
|
|||
|
jrnz #no_vince_intro
|
|||
|
CREATE SKIRT_PID,CHANGE_SKIRTS
|
|||
|
move @PSTATUS,A0
|
|||
|
CMPI 3,A0
|
|||
|
JRNE #no_vince_intro
|
|||
|
|
|||
|
movi 0E0h,a0
|
|||
|
calla ADD_VOICE
|
|||
|
MOVI 01FAH,A0
|
|||
|
calla ADD_VOICE
|
|||
|
JRUC INTRO_DONE
|
|||
|
|
|||
|
#no_vince_intro
|
|||
|
MOVK 5,A0
|
|||
|
CALLA RNDRNG0
|
|||
|
JRNZ INTRO_DONE
|
|||
|
MOVI THIS_IS_FOR_THE_MARBLES,A0
|
|||
|
CALLA ADD_VOICE
|
|||
|
INTRO_DONE
|
|||
|
|
|||
|
calla BGND_UD1
|
|||
|
SLEEPK 2
|
|||
|
calla BGND_UD1
|
|||
|
|
|||
|
clr a8 ;left meter for player 0
|
|||
|
movk 1,a9 ;right meter for player 1
|
|||
|
move @PSTATUS,a0
|
|||
|
jrz drone_pointers
|
|||
|
|
|||
|
move @royal_rumble,a14
|
|||
|
jrnz #rumble_pointers
|
|||
|
|
|||
|
cmpi 3,a0
|
|||
|
jreq meter_pointers_set
|
|||
|
|
|||
|
movk 2,a9
|
|||
|
srl 1,a0
|
|||
|
jrz meter_pointers_set
|
|||
|
movk 1,a9
|
|||
|
movk 2,a8
|
|||
|
jruc meter_pointers_set
|
|||
|
|
|||
|
#rumble_pointers
|
|||
|
movk 2,a9
|
|||
|
jruc meter_pointers_set
|
|||
|
|
|||
|
drone_pointers
|
|||
|
movk 2,a8
|
|||
|
movk 3,a9
|
|||
|
meter_pointers_set
|
|||
|
CREATE METER_PID,meters ;life/turbo/names
|
|||
|
|
|||
|
movk 1,a0
|
|||
|
move a0,@DISPLAYON
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,@IRQSKYE
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
;FIX THAT DAM ANNOYING START UP DMA GLITCH !!!!!!!
|
|||
|
move @skip_select,a0
|
|||
|
JRNZ DONT_OPEN_ANYTHING
|
|||
|
.endif
|
|||
|
|
|||
|
CREATE SET_IMAGES_PID,DO_SET_IMAGES
|
|||
|
|
|||
|
PUSHP A0
|
|||
|
movk 18,a8 ;20
|
|||
|
movk 4,a9 ;6
|
|||
|
JSRP OPEN_PROGRESS_SCREEN
|
|||
|
; movi PU_CHECK_PID,a0
|
|||
|
; calla IKIL1C
|
|||
|
PULLP A0
|
|||
|
|
|||
|
CALLA KILL
|
|||
|
DONT_OPEN_ANYTHING
|
|||
|
MOVI DUMRETS,A0
|
|||
|
MOVE A0,@WHICH_SCREEN,L
|
|||
|
|
|||
|
clr a1
|
|||
|
callr get_process_ptr
|
|||
|
; clr a14
|
|||
|
;Don't allow meters for the first x seconds of round
|
|||
|
movi 10*60,a14
|
|||
|
move a14,*a0(DELAY_METER)
|
|||
|
|
|||
|
movk 1,a1
|
|||
|
callr get_process_ptr
|
|||
|
;Don't allow meters for the first x seconds of round
|
|||
|
movi 14*60,a14
|
|||
|
move a14,*a0(DELAY_METER)
|
|||
|
|
|||
|
;initialize the bgnd_cntr
|
|||
|
movk 1,a14
|
|||
|
move a14,@bgnd_cntr
|
|||
|
|
|||
|
;initialize annc_rnd_winner_done
|
|||
|
clr a14
|
|||
|
move a14,@annc_rnd_winner_done
|
|||
|
|
|||
|
; CREATE0 show_options
|
|||
|
|
|||
|
#loop calla check_collisions
|
|||
|
callr final_confine
|
|||
|
calla set_images
|
|||
|
|
|||
|
;BGND_UD1 every eight ticks.
|
|||
|
move @bgnd_cntr,a2
|
|||
|
dsjs a2,#no_bg
|
|||
|
|
|||
|
;time to do it - but if there's a AUDIT_UD_PID process going, wait
|
|||
|
; until it dies. This could lead to a delay of up to three ticks.
|
|||
|
inc a2 ;...so that if we skip, we try next tick.
|
|||
|
|
|||
|
;check this flag instead of using the extremely slow EXISTP
|
|||
|
move @audit_ud_flag,a14
|
|||
|
jrnz #no_bg
|
|||
|
|
|||
|
calla BGND_UD1
|
|||
|
movk 8,a2
|
|||
|
#no_bg move a2,@bgnd_cntr
|
|||
|
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
calla read_switches
|
|||
|
|
|||
|
move @match_over,a0
|
|||
|
jrz #not_over
|
|||
|
|
|||
|
calla postgame_audits
|
|||
|
|
|||
|
RETP
|
|||
|
|
|||
|
#not_over
|
|||
|
|
|||
|
calla scroll_world
|
|||
|
|
|||
|
move @round_tickcount,a0
|
|||
|
inc a0
|
|||
|
move a0,@round_tickcount
|
|||
|
|
|||
|
move @match_time,a0,L ;10's & 1's
|
|||
|
jrnz #loop
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
;if we're in fight_debug mode, roll the clock around
|
|||
|
move @fight_debug,a14
|
|||
|
jrnz #wraparound
|
|||
|
.endif
|
|||
|
|
|||
|
;if we're in attract mode, roll the clock around
|
|||
|
move @PSTATUS,a14
|
|||
|
jrnz #norm
|
|||
|
|
|||
|
#wraparound
|
|||
|
movi 00090009h,a14
|
|||
|
move a14,@match_time,L
|
|||
|
jruc #not_over
|
|||
|
|
|||
|
#norm
|
|||
|
movk 1,a0
|
|||
|
move a0,@HALT
|
|||
|
|
|||
|
|
|||
|
;Timer on the round expired
|
|||
|
|
|||
|
clr a1
|
|||
|
callr get_process_ptr
|
|||
|
|
|||
|
move a1,*a0(OBJ_XVEL),L
|
|||
|
move a1,*a0(OBJ_YVEL),L
|
|||
|
move a1,*a0(OBJ_ZVEL),L
|
|||
|
movi -1,a1
|
|||
|
move a1,@MATCH_TIMERS,L
|
|||
|
|
|||
|
movk 1,a1
|
|||
|
callr get_process_ptr
|
|||
|
|
|||
|
clr a1
|
|||
|
move a1,*a0(OBJ_XVEL),L
|
|||
|
move a1,*a0(OBJ_YVEL),L
|
|||
|
move a1,*a0(OBJ_ZVEL),L
|
|||
|
movi -1,a1
|
|||
|
move a1,@MATCH_TIMERS+32,L
|
|||
|
|
|||
|
calla DO_CROWD_CHEER
|
|||
|
|
|||
|
CREATE CYCPID,CREATE_TIMEOUT
|
|||
|
|
|||
|
movi 55,a9
|
|||
|
#wait SLEEPK 1
|
|||
|
PUSH a9,a11
|
|||
|
calla set_images ;Make shadows shift...
|
|||
|
PULL a9,a11
|
|||
|
dsjs a9,#wait
|
|||
|
|
|||
|
CREATE ANNC_PID,announce_rnd_winner
|
|||
|
.if DEBUG
|
|||
|
move a13,*a0(PDATA),L ;#CREATOR (pdata)
|
|||
|
movi $,a14
|
|||
|
move a14,*a0(PDATA+20h),L ;#ORIGIN
|
|||
|
.endif
|
|||
|
|
|||
|
movk 28,a9
|
|||
|
#wait1 SLEEPK 1
|
|||
|
PUSH a9,a11
|
|||
|
calla set_images ;Make shadows shift...
|
|||
|
PULL a9,a11
|
|||
|
dsjs a9,#wait1
|
|||
|
|
|||
|
; move a11,a0
|
|||
|
; calla KILL
|
|||
|
|
|||
|
movi CLSNEUT|TYPTEXT|SUBMES1,a0
|
|||
|
calla obj_del1c ;delete text/plates
|
|||
|
|
|||
|
#wait2 SLEEPK 1
|
|||
|
calla set_images ;Make shadows shift...
|
|||
|
; move @HALT,a0
|
|||
|
movi ANNC_PID,a0
|
|||
|
clr a1
|
|||
|
not a1
|
|||
|
calla EXISTP
|
|||
|
jrnz #wait2
|
|||
|
|
|||
|
move @p1rounds,a0
|
|||
|
cmpi 2,a0
|
|||
|
jrz #end
|
|||
|
move @p2rounds,a0
|
|||
|
cmpi 2,a0
|
|||
|
jrnz #not_end
|
|||
|
|
|||
|
#end
|
|||
|
;Match is over.
|
|||
|
move a0,@match_over
|
|||
|
|
|||
|
;Move match winning players match awards to winning players winstread awards,
|
|||
|
;annunciate match awards for winning player, then clear get out
|
|||
|
|
|||
|
#not_end
|
|||
|
jruc #loop
|
|||
|
|
|||
|
**********
|
|||
|
;Is this duplicated effort? Jason, look into this...
|
|||
|
SUBR DO_SET_IMAGES
|
|||
|
CALLA set_images
|
|||
|
SLOOP 1,DO_SET_IMAGES
|
|||
|
|
|||
|
**********
|
|||
|
|
|||
|
SUBR CLEAR_PROCESSES
|
|||
|
|
|||
|
clr a0
|
|||
|
movi wres0_objs,a1
|
|||
|
movi NUM_WRES*MAX_PIECES,a2
|
|||
|
#clr_lp
|
|||
|
move a0,*a1+,L
|
|||
|
dsj a2,#clr_lp
|
|||
|
|
|||
|
movi process_ptrs,a1
|
|||
|
movi NUM_WRES,a2
|
|||
|
#clr_ptr
|
|||
|
move a0,*a1+,L
|
|||
|
dsj a2,#clr_ptr
|
|||
|
rets
|
|||
|
|
|||
|
ring_mod
|
|||
|
.long ringBMOD ;wrestling ring
|
|||
|
.word 105,-450 ;x,y
|
|||
|
.long 0
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
* can probably get rid of this crap once scroller is finished
|
|||
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|||
|
|
|||
|
SUBRP update_positions
|
|||
|
|
|||
|
move *a13(PLYRNUM),a0
|
|||
|
X32 a0
|
|||
|
|
|||
|
move a0,a1
|
|||
|
addi wrestler_x,a1
|
|||
|
move *a13(OBJ_XPOS),a14,L
|
|||
|
move a14,*a1,L
|
|||
|
|
|||
|
move a0,a1
|
|||
|
addi wrestler_y,a1
|
|||
|
;;;; move *a13(OBJ_YPOS),a14,L
|
|||
|
move *a13(GROUND_Y),a14
|
|||
|
sll 16,a14
|
|||
|
|
|||
|
jrnn #ok
|
|||
|
|
|||
|
clr a14
|
|||
|
#ok move a14,*a1,L
|
|||
|
|
|||
|
move a0,a1
|
|||
|
addi wrestler_z,a1
|
|||
|
move *a13(OBJ_ZPOS),a14,L
|
|||
|
move a14,*a1,L
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* a8 = player type (PLAYER, DRONE, REFEREE)
|
|||
|
* a9 = player side (PLYR1, PLYR2, NONE)
|
|||
|
* a10 = player number
|
|||
|
* a11 = wrestler number
|
|||
|
|
|||
|
|
|||
|
SUBRP wrestler_main
|
|||
|
|
|||
|
move a8,*a13(PLYR_TYPE)
|
|||
|
move a9,*a13(PLYR_SIDE)
|
|||
|
move a10,*a13(PLYRNUM)
|
|||
|
move a11,*a13(WRESTLERNUM)
|
|||
|
|
|||
|
MOVE A10,A0
|
|||
|
CMPI 2,A0
|
|||
|
JRGE NO_POINT_ITS_A_DRONE
|
|||
|
CLR A1
|
|||
|
SLL 5,A0
|
|||
|
ADDI MATCH_TIMERS,A0
|
|||
|
MOVE A1,*A0,L
|
|||
|
NO_POINT_ITS_A_DRONE
|
|||
|
|
|||
|
movi 112,a0
|
|||
|
move a0,*a13(OBJ_PRIORITY)
|
|||
|
|
|||
|
callr reset_start
|
|||
|
|
|||
|
calla choose_pal ;sets b0
|
|||
|
clr a1 ;y pos
|
|||
|
movi D2ST2B03,a2 ;* image
|
|||
|
movi 110,a3 ;z pos
|
|||
|
movi DMAWNZ|M_3D,a4 ;DMA flags
|
|||
|
move a4,*a13(OBJ_CONTROL)
|
|||
|
movi CLSPLYR | TYPPLYR,a5 ;object ID
|
|||
|
clr a6 ;x vel
|
|||
|
clr a7 ;y vel
|
|||
|
|
|||
|
movk MAX_PIECES,a9
|
|||
|
#nxt_obj
|
|||
|
PUSH b0
|
|||
|
calla BEGINOBJP
|
|||
|
PULL b0
|
|||
|
move a8,-*a10,L
|
|||
|
dsj a9,#nxt_obj
|
|||
|
|
|||
|
calla BEGINOBJP
|
|||
|
move a8,*a13(ATTIMG_IMG),L
|
|||
|
clr a0
|
|||
|
move a0,*a13(ATTIMG_CUR_FRAME),L
|
|||
|
move a0,*a13(ATTIMG_LAST_FRAME),L
|
|||
|
move a0,*a13(GETUP_TIME)
|
|||
|
move a0,*a13(COMBO_COUNT)
|
|||
|
move a0,*a13(COMBO_START)
|
|||
|
move a0,*a13(OUTSIDE_ALONE)
|
|||
|
move a0,*a13(SPECIAL_MOVE_ADDR),L
|
|||
|
|
|||
|
move a0,*a13(LAST_HIT_TIME),L
|
|||
|
move a0,*a13(LAST_FLING_ATTEMPT),L
|
|||
|
move a0,*a13(HIT_GATE_TIME),L
|
|||
|
move a0,*a13(LAST_HEADHOLD),L
|
|||
|
move a0,*a13(LAST_FLING),L
|
|||
|
move a0,*a13(LAST_SPUNCH),L
|
|||
|
move a0,*a13(LAST_SKICK),L
|
|||
|
move a0,*a13(CONSECUTIVE_HITS)
|
|||
|
move a0,*a13(LAST_DAMAGE),L
|
|||
|
move a0,*a13(DAMAGE_GIVEN)
|
|||
|
movi 8*60,a0
|
|||
|
move a0,*a13(DELAY_METER)
|
|||
|
|
|||
|
move *a8(OPAL),a0
|
|||
|
move a0,*a13(OBJ_PAL)
|
|||
|
move a0,*a13(MY_PAL)
|
|||
|
|
|||
|
movi shadow_p,a0
|
|||
|
calla pal_getf
|
|||
|
move *a13(OBJ_BASE),a8,L
|
|||
|
move *a8,a8,L ;1st object
|
|||
|
move a0,*a8(OPAL) ;set palette for shadow
|
|||
|
|
|||
|
movi MAT_Y,a0
|
|||
|
move a0,*a13(GROUND_Y)
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(ATTACK_TIME)
|
|||
|
move a0,*a13(INRING)
|
|||
|
MOVE A0,*A13(COMBO_START)
|
|||
|
MOVE A0,*A13(COMBO_COUNT)
|
|||
|
|
|||
|
move a0,*a13(OBJ_XVEL),L
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
move a0,*a13(OBJ_ZVEL),L
|
|||
|
move a0,*a13(SHADTRAIL_PROC),L
|
|||
|
move a0,*a13(I_WILL_DIE)
|
|||
|
move a0,*a13(STATUS_FLAGS),L
|
|||
|
|
|||
|
move a0,*a13(BUT_VAL_CUR)
|
|||
|
move a0,*a13(BUT_VAL_DOWN)
|
|||
|
move a0,*a13(BUT_VAL_UP)
|
|||
|
move a0,*a13(STICK_VAL_CUR)
|
|||
|
move a0,*a13(STICK_VAL_DOWN)
|
|||
|
move a0,*a13(STICK_VAL_UP)
|
|||
|
move a0,*a13(STICK_REL_CUR)
|
|||
|
move a0,*a13(STICK_REL_NEW)
|
|||
|
|
|||
|
|
|||
|
; calla clear_damage_log
|
|||
|
callr ani_init ;start default animation
|
|||
|
|
|||
|
move @PCNT,a14
|
|||
|
move a14,*a13(FOOT_PCNT),W ;init foot timer
|
|||
|
|
|||
|
.if COL_DEBUG
|
|||
|
move a13,a10
|
|||
|
CREATE CDEBUG_PID,collis_debug
|
|||
|
move a13,a10
|
|||
|
CREATE CDEBUG_PID,collis_debug2
|
|||
|
.endif
|
|||
|
|
|||
|
calla init_smoves
|
|||
|
calla set_collision_boxes
|
|||
|
|
|||
|
.ref drone_calcskill
|
|||
|
calla drone_calcskill
|
|||
|
|
|||
|
;#wait MOVE @VCOUNT,a0
|
|||
|
; andi 7,a0
|
|||
|
; jrnz #wait
|
|||
|
; TINTON
|
|||
|
; move @VCOUNT,a0
|
|||
|
; PUSH a0
|
|||
|
|
|||
|
|
|||
|
; move @VCOUNT,a0
|
|||
|
; PULL a1
|
|||
|
; sub a1,a0
|
|||
|
; TINTOFF
|
|||
|
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
callr calc_closest
|
|||
|
|
|||
|
#loop
|
|||
|
;-----> calla animate_wrestler
|
|||
|
|
|||
|
calla ARE_WE_IN_RING
|
|||
|
|
|||
|
calla set_collision_boxes
|
|||
|
|
|||
|
callr confine_wrestler
|
|||
|
callr confine_wrestler_fix2
|
|||
|
|
|||
|
callr update_newfacing
|
|||
|
|
|||
|
callr update_positions ;used by scroller (temp!)
|
|||
|
|
|||
|
move *a13(PLYR_TYPE),a0
|
|||
|
jrz #hmn ;Human?
|
|||
|
move *a13(STATUS_FLAGS),a14
|
|||
|
btst B_ZOMBIE,a14
|
|||
|
jrnz #zmb ;Zombie?
|
|||
|
calla drone_main
|
|||
|
#zmb
|
|||
|
#hmn
|
|||
|
|
|||
|
; TINTOFF
|
|||
|
movk 1,a0
|
|||
|
move *a13(STATUS_FLAGS),a14
|
|||
|
btst B_KOD,a14
|
|||
|
jrz #slp
|
|||
|
movi >7fff,a0
|
|||
|
#slp SLEEPR a0
|
|||
|
; TINTON
|
|||
|
|
|||
|
MOVE *A13(RISK),A0
|
|||
|
JRZ NO_DECREMENT
|
|||
|
DEC A0
|
|||
|
MOVE A0,*A13(RISK)
|
|||
|
|
|||
|
andi 7fffh,a0
|
|||
|
jrnz NO_DECREMENT
|
|||
|
;Turn off taunt high risk move bonus
|
|||
|
move a0,*a13(RISK)
|
|||
|
|
|||
|
NO_DECREMENT
|
|||
|
|
|||
|
callr update_joystat
|
|||
|
callr count_button_presses
|
|||
|
|
|||
|
calla keep_onscreen
|
|||
|
|
|||
|
calla wrestler_veladd ;<-------
|
|||
|
callr wrestler_friction ;<-------
|
|||
|
|
|||
|
calla animate_wrestler ;<-------
|
|||
|
calla set_collision_boxes ;<-------
|
|||
|
|
|||
|
callr confine_wrestler ;<--- temp fix!
|
|||
|
callr confine_wrestler_fix1
|
|||
|
|
|||
|
callr calc_closest2
|
|||
|
|
|||
|
callr move_wrestler
|
|||
|
|
|||
|
;----> calla wrestler_veladd
|
|||
|
;----> callr wrestler_friction
|
|||
|
|
|||
|
callr update_links
|
|||
|
|
|||
|
calla set_collision_boxes
|
|||
|
calla overlap_collision
|
|||
|
|
|||
|
|
|||
|
move *a13(ANIMODE),a0
|
|||
|
btst MODE_KEEPATTACHED_BIT,a0
|
|||
|
jrz #no_attach
|
|||
|
callr master_keep_attached
|
|||
|
#no_attach
|
|||
|
|
|||
|
|
|||
|
move *a13(ANIMODE),a0
|
|||
|
btst MODE_NOAUTOFLIP_BIT,a0
|
|||
|
jrnz #no_flip
|
|||
|
move a13,a0
|
|||
|
callr set_wrestler_xflip
|
|||
|
#no_flip
|
|||
|
|
|||
|
callr update_joy_dtime
|
|||
|
|
|||
|
; move *a13(BURNOUT_COUNT),a0
|
|||
|
; jrz #skp
|
|||
|
; dec a0
|
|||
|
; move a0,*a13(BURNOUT_COUNT)
|
|||
|
;#skp
|
|||
|
;This is for delaying the reading of buttons just after regaining
|
|||
|
;control from being flung. This will stop inadvertant moves from happening
|
|||
|
;while the player is still whacking on his buttons
|
|||
|
|
|||
|
move *a13(DELAY_BUTNS),a0
|
|||
|
jrz #skp2
|
|||
|
dec a0
|
|||
|
move a0,*a13(DELAY_BUTNS)
|
|||
|
#skp2
|
|||
|
;This is for delaying collisions when a player gets up
|
|||
|
|
|||
|
move *a13(SAFE_TIME),a0
|
|||
|
jrz #skp3
|
|||
|
dec a0
|
|||
|
move a0,*a13(SAFE_TIME)
|
|||
|
#skp3
|
|||
|
;This is for delaying the reappearance of a getup meter
|
|||
|
|
|||
|
move *a13(DELAY_METER),a0
|
|||
|
jrz #skp4
|
|||
|
dec a0
|
|||
|
move a0,*a13(DELAY_METER)
|
|||
|
#skp4
|
|||
|
;This is for disallowing movement by wrestler
|
|||
|
|
|||
|
move *a13(IMMOBILIZE_TIME),a0
|
|||
|
jrz #skp5
|
|||
|
dec a0
|
|||
|
move a0,*a13(IMMOBILIZE_TIME)
|
|||
|
#skp5
|
|||
|
;This is for walking fast powerup
|
|||
|
|
|||
|
move *a13(WALK_FAST),a0
|
|||
|
jrz #skp6
|
|||
|
jrn #skp6
|
|||
|
dec a0
|
|||
|
move a0,*a13(WALK_FAST)
|
|||
|
#skp6
|
|||
|
move *a13(GETUP_TIME),a0
|
|||
|
jrz #loop
|
|||
|
|
|||
|
move @match_time,a14,L
|
|||
|
jrnz #notend
|
|||
|
;Match timer ran out...
|
|||
|
clr a0
|
|||
|
move a0,*a13(GETUP_TIME)
|
|||
|
jruc #loop
|
|||
|
#notend
|
|||
|
move *a13(DELAY_METER),a14
|
|||
|
jrz #reg
|
|||
|
;Don't want to allow getup time to be set this close to last time!
|
|||
|
;allow the meter to come right back if stay_down is set
|
|||
|
.if DEBUG
|
|||
|
move @stay_down,a14
|
|||
|
jrnz #reg
|
|||
|
.endif
|
|||
|
clr a0
|
|||
|
move a0,*a13(GETUP_TIME)
|
|||
|
jrz #loop
|
|||
|
#reg
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
;If stay_down flag is set, don't decrement
|
|||
|
move @stay_down,a14
|
|||
|
jrz #dec
|
|||
|
inc a0
|
|||
|
#dec
|
|||
|
.endif
|
|||
|
dec a0
|
|||
|
|
|||
|
move a0,*a13(GETUP_TIME)
|
|||
|
jrz #clr_dizzy
|
|||
|
|
|||
|
#skip
|
|||
|
|
|||
|
;NOTE:
|
|||
|
;Drones will have to fill up their meter
|
|||
|
;at a faster pace!
|
|||
|
|
|||
|
;Allow players to whack buttons to speed
|
|||
|
;up their recovery from getup_time.
|
|||
|
;Remember, the wrestler's meter doesn't have to be visible for him
|
|||
|
;to still have a getup time set!
|
|||
|
;As long as getup_time has a value, he is stuck.
|
|||
|
|
|||
|
;get data on this and last ticks
|
|||
|
move a13,a0
|
|||
|
calla wres_get_but_val_down
|
|||
|
move a0,a2
|
|||
|
move a13,a0
|
|||
|
calla wres_get_stick_val_down
|
|||
|
or a2,a0
|
|||
|
move *a13(STATUS_FLAGS),a1
|
|||
|
|
|||
|
move a1,a14
|
|||
|
andni M_PRESS_LAST,a14
|
|||
|
TEST a0
|
|||
|
jrz #set_flag
|
|||
|
ori M_PRESS_LAST,a14
|
|||
|
#set_flag
|
|||
|
move a14,*a13(STATUS_FLAGS)
|
|||
|
|
|||
|
TEST a0
|
|||
|
jrnz #deduct_three
|
|||
|
BTST B_PRESS_LAST,a1
|
|||
|
jrz #loop
|
|||
|
|
|||
|
#deduct_three
|
|||
|
move *a13(GETUP_TIME),a14
|
|||
|
subk 3,a14
|
|||
|
jrnn #ok
|
|||
|
clr a14
|
|||
|
#ok
|
|||
|
move a14,*a13(GETUP_TIME)
|
|||
|
jrp #loop
|
|||
|
|
|||
|
|
|||
|
#clr_dizzy
|
|||
|
clr a0
|
|||
|
move a0,*a13(PLYR_DIZZY)
|
|||
|
move a0,*a13(STARS_FLAG) ;Gets rid of them...
|
|||
|
|
|||
|
;Delay button reads
|
|||
|
movi 40,a0
|
|||
|
move a0,*a13(DELAY_BUTNS)
|
|||
|
|
|||
|
jruc #loop
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR reset_for_round
|
|||
|
|
|||
|
;Reset world and both wrestlers for the start
|
|||
|
;of a new round - Called from lifebar.
|
|||
|
|
|||
|
PUSH a13
|
|||
|
|
|||
|
clr a1
|
|||
|
#lp0 PUSH a1
|
|||
|
callr reset_wrestle
|
|||
|
PULL a1
|
|||
|
inc a1
|
|||
|
cmpi NUM_WRES,a1
|
|||
|
jrlt #lp0
|
|||
|
|
|||
|
PULL a13
|
|||
|
|
|||
|
move @current_round,a0
|
|||
|
inc a0
|
|||
|
move a0,@current_round
|
|||
|
|
|||
|
;reset life data
|
|||
|
calla init_rnd_life_data
|
|||
|
|
|||
|
;reset special move processes
|
|||
|
callr reset_smoves
|
|||
|
|
|||
|
;reset match_time
|
|||
|
movk 9,a0
|
|||
|
move a0,@match_time ;10's
|
|||
|
movk 9,a0
|
|||
|
move a0,@match_time+10h ;1's
|
|||
|
clr a0
|
|||
|
move a0,@match_time+20h ;fractional
|
|||
|
|
|||
|
;reset various other crap
|
|||
|
clr a0
|
|||
|
move a0,@any_hits
|
|||
|
|
|||
|
callr init_reduce_bog
|
|||
|
|
|||
|
nobody_home
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
reset_wrestle
|
|||
|
callr get_process_ptr
|
|||
|
move a0,a13
|
|||
|
jrz nobody_home
|
|||
|
|
|||
|
calla drone_change_back
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(PLYR_DIZZY_CNT)
|
|||
|
;Don't allow meters for the first x seconds of round
|
|||
|
movi 14*60,a0
|
|||
|
move a0,*a13(DELAY_METER)
|
|||
|
|
|||
|
move *a13(PLYRNUM),a10
|
|||
|
|
|||
|
reset_start
|
|||
|
|
|||
|
;choose starting position - our index into the #teamX_starts table
|
|||
|
; is the number of teammates with PLYRNUM's lower than ours. (0-2)
|
|||
|
move *a13(PLYR_SIDE),a0
|
|||
|
movi process_ptrs,a1
|
|||
|
clr a2
|
|||
|
|
|||
|
#loop0 move *a1+,a14,L
|
|||
|
jrz #loop0 ;skip inactive
|
|||
|
cmp a13,a14
|
|||
|
jreq #set0 ;hit self -> we're done
|
|||
|
move *a14(PLYR_SIDE),a14
|
|||
|
cmp a14,a0
|
|||
|
jrne #loop0
|
|||
|
inc a2 ;lower PSTATUS, same PLYR_SIDE, so inc index
|
|||
|
jruc #loop0
|
|||
|
|
|||
|
#set0 ;a2 is index.
|
|||
|
X64 a2
|
|||
|
movi #team1_starts,a9
|
|||
|
TEST a0 ;team == 0?
|
|||
|
jrz #add
|
|||
|
movi #team2_starts,a9
|
|||
|
#add add a2,a9
|
|||
|
|
|||
|
move *a9+,a0
|
|||
|
sll 16,a0 ;x val
|
|||
|
move a0,*a13(OBJ_XPOS),L
|
|||
|
move *a9+,a0
|
|||
|
sll 16,a0 ;z val
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(OBJ_YPOS),L
|
|||
|
|
|||
|
movi MAT_Y,a0
|
|||
|
move a0,*a13(GROUND_Y)
|
|||
|
|
|||
|
;From veladd
|
|||
|
move *a13(GROUND_Y),a2
|
|||
|
sll 16,a2
|
|||
|
move *a13(OBJ_YPOS),a0,L
|
|||
|
sub a2,a0 ;- GROUND_Y
|
|||
|
move *a13(OBJ_YVEL),a1,L
|
|||
|
add a1,a0
|
|||
|
jrnn #yok
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
#yok
|
|||
|
add a2,a0 ;+ GROUND_Y
|
|||
|
move a0,*a13(OBJ_YPOS),L
|
|||
|
|
|||
|
move a10,a0
|
|||
|
X32 a0
|
|||
|
addi obj_look,a0
|
|||
|
move *a0,a0,L ;* start of objects
|
|||
|
move a0,*a13(OBJ_BASE),L
|
|||
|
move a0,a10
|
|||
|
addi 32*MAX_PIECES,a10 ;start at end to reverse priorities
|
|||
|
|
|||
|
move *a9+,a0
|
|||
|
move a0,*a13(NEW_FACING_DIR)
|
|||
|
move a0,*a13(FACING_DIR)
|
|||
|
|
|||
|
clr a0 ;x pos
|
|||
|
move a0,*a13(PLYRMODE)
|
|||
|
move a0,*a13(PLYR_DIZZY)
|
|||
|
move a0,*a13(ANIMODE)
|
|||
|
move a0,*a13(ANIMODE2)
|
|||
|
|
|||
|
; movi MAT_Y,a0
|
|||
|
; move a0,*a13(GROUND_Y)
|
|||
|
|
|||
|
clr a0
|
|||
|
; move a0,*a13(BURNOUT_COUNT)
|
|||
|
move a0,*a13(INRING)
|
|||
|
|
|||
|
move a0,*a13(OBJ_XVEL),L
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
move a0,*a13(OBJ_ZVEL),L
|
|||
|
|
|||
|
; calla clear_damage_log
|
|||
|
callr ani_init ;start default animation
|
|||
|
|
|||
|
move @PCNT,a14
|
|||
|
move a14,*a13(FOOT_PCNT),W ;init foot timer
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
;X,Z,face_dir,unused for team 0
|
|||
|
#team1_starts
|
|||
|
.word RING_X_CENTER-85,1127+93,9,0 ;first player on team
|
|||
|
.word RING_X_CENTER-150,1127+170,9,0 ;second
|
|||
|
.word RING_X_CENTER-20,1127+16,10,0 ;third
|
|||
|
|
|||
|
;X,Z,face_dir,unused for team 1
|
|||
|
#team2_starts
|
|||
|
.word RING_X_CENTER+85,1103+93,6,0 ;first player on team
|
|||
|
.word RING_X_CENTER+150,1103+170,5,0 ;second
|
|||
|
.word RING_X_CENTER+20,1103+16,6,0 ;third
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR reset_for_round2
|
|||
|
|
|||
|
PUSH a13
|
|||
|
|
|||
|
clr a14
|
|||
|
move a14,@annc_rnd_winner_done
|
|||
|
|
|||
|
;un-canned for NUM_WRES wrestlers
|
|||
|
|
|||
|
clr a1
|
|||
|
#lp1 PUSH a1
|
|||
|
callr reset_wrestle2
|
|||
|
PULL a1
|
|||
|
inc a1
|
|||
|
cmpi NUM_WRES,a1
|
|||
|
jrlt #lp1
|
|||
|
|
|||
|
PULL a13
|
|||
|
rets
|
|||
|
|
|||
|
reset_wrestle2
|
|||
|
callr get_process_ptr
|
|||
|
move a0,a13
|
|||
|
jrz nobody_home
|
|||
|
|
|||
|
calla drone_change_back
|
|||
|
|
|||
|
movk 30,a0
|
|||
|
move a0,*a13(IMMOBILIZE_TIME)
|
|||
|
|
|||
|
;Re-initialize these variables between rounds
|
|||
|
clr a0
|
|||
|
move a0,*a13(PLYR_DIZZY_CNT)
|
|||
|
move a0,*a13(GETUP_TIME)
|
|||
|
move a0,*a13(AUTO_PIN_CNTDOWN)
|
|||
|
move a0,*a13(SPECIAL_MOVE_ADDR),L
|
|||
|
move a0,*a13(LAST_HIT_TIME),L
|
|||
|
move a0,*a13(LAST_FLING_ATTEMPT),L
|
|||
|
move a0,*a13(HIT_GATE_TIME),L
|
|||
|
move a0,*a13(LAST_HEADHOLD),L
|
|||
|
move a0,*a13(LAST_SPUNCH),L
|
|||
|
move a0,*a13(LAST_SKICK),L
|
|||
|
move a0,*a13(CONSECUTIVE_HITS)
|
|||
|
move a0,*a13(LAST_FLING),L
|
|||
|
move a0,*a13(LAST_HIPTOSS),L
|
|||
|
move a0,*a13(LAST_DAMAGE),L
|
|||
|
|
|||
|
;clear STATUS_FLAGS, except for bits in SF_RESET_MASK,
|
|||
|
; which should be preserved between rounds.
|
|||
|
move *a13(STATUS_FLAGS),a14,L
|
|||
|
andi SF_RESET_MASK,a14
|
|||
|
move a14,*a13(STATUS_FLAGS),L
|
|||
|
|
|||
|
;set PTIME to 1, just in case they were KO'd last round.
|
|||
|
movk 1,a14
|
|||
|
move a14,*a13(PTIME)
|
|||
|
|
|||
|
move *a13(PLYRNUM),a10
|
|||
|
|
|||
|
reset_start2
|
|||
|
callr calc_closest
|
|||
|
calla set_collision_boxes
|
|||
|
callr confine_wrestler
|
|||
|
callr update_positions ;used by scroller (temp!)
|
|||
|
callr update_joystat
|
|||
|
callr count_button_presses
|
|||
|
calla wrestler_veladd ;<-------
|
|||
|
callr wrestler_friction ;<-------
|
|||
|
calla set_collision_boxes ;<-------
|
|||
|
callr confine_wrestler ;<--- temp fix!
|
|||
|
callr calc_closest
|
|||
|
callr move_wrestler
|
|||
|
callr ani_init
|
|||
|
callr update_links
|
|||
|
calla set_collision_boxes
|
|||
|
calla overlap_collision
|
|||
|
|
|||
|
move a13,a0
|
|||
|
callr set_wrestler_xflip
|
|||
|
callr update_joy_dtime
|
|||
|
calla drone_calcskill
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* wrestler object blocks
|
|||
|
|
|||
|
obj_look
|
|||
|
.long wres0_objs ;0
|
|||
|
.long wres1_objs ;1
|
|||
|
.long wres2_objs ;2
|
|||
|
.long wres3_objs ;3
|
|||
|
.long wres4_objs ;4
|
|||
|
.long wres5_objs ;5
|
|||
|
.long wres6_objs ;6
|
|||
|
.long wres7_objs ;7
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* initializes animations for each wrestler
|
|||
|
*
|
|||
|
* a13 = * wrestler process
|
|||
|
|
|||
|
SUBR ani_init
|
|||
|
|
|||
|
|
|||
|
movi 100h,a0
|
|||
|
move a0,*a13(ANI_SPEED) ;normal speed animations
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(I_WILL_DIE)
|
|||
|
.ref hyper_speed_on
|
|||
|
|
|||
|
move @hyper_speed_on,a14
|
|||
|
move a14,*a13(WALK_FAST)
|
|||
|
; move a0,*a13(WALK_FAST)
|
|||
|
|
|||
|
move a0,*a13(ATTIMG_CUR_FRAME),L
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a0
|
|||
|
X32 a0
|
|||
|
addi #init_addr,a0
|
|||
|
move *a0,a0,L
|
|||
|
call a0
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#init_addr
|
|||
|
.long bret_ani_init ;0 Bret Hart
|
|||
|
.long razor_ani_init ;1 Razor Ramon
|
|||
|
.long taker_ani_init ;2 Undertaker
|
|||
|
.long yoko_ani_init ;3 Yokozuna
|
|||
|
.long shawn_ani_init ;4 Shawn Michaels
|
|||
|
.long bam_ani_init ;5 Bam Bam
|
|||
|
.long doink_ani_init ;6 Doink
|
|||
|
.long doink_ani_init ;7 spare
|
|||
|
.long lex_ani_init ;8 Lex Luger
|
|||
|
.long 0 ;9 Referee
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* a13 = ptr to process
|
|||
|
* a1 = player/drone number 0-?
|
|||
|
|
|||
|
;old version - used by PROGRESS.ASM
|
|||
|
|
|||
|
SUBR set_process_ptr
|
|||
|
|
|||
|
PUSH a1
|
|||
|
X32 a1
|
|||
|
addi process_ptrs,a1
|
|||
|
move a13,*a1,L
|
|||
|
PULL a1
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* a0 = ptr to process
|
|||
|
* a9 = side (0 or 1)
|
|||
|
* a10 = player/drone number 0-?
|
|||
|
* a11 = WRESTLERNUM
|
|||
|
|
|||
|
;new version - used here in WRESTLE.ASM because the new pal selector routine
|
|||
|
; requires that process_ptrs are all set up before any of the wrestler
|
|||
|
; processes actually wake up. set_process_ptr2 is called by the code that
|
|||
|
; creates wrestler_main procs, not by wrestler_main itself.
|
|||
|
|
|||
|
;it also sets PLYRNUM and WRESTLERNUM, 'cuz the pal thing needs those
|
|||
|
; too. What a pain, eh? (And now PLYR_SIDE, too)
|
|||
|
|
|||
|
SUBRP set_process_ptr2
|
|||
|
|
|||
|
PUSH a10
|
|||
|
X32 a10
|
|||
|
addi process_ptrs,a10
|
|||
|
move a0,*a10,L
|
|||
|
PULL a10
|
|||
|
|
|||
|
move a9,*a0(PLYR_SIDE)
|
|||
|
move a10,*a0(PLYRNUM)
|
|||
|
move a11,*a0(WRESTLERNUM)
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* a1 = player/drone number 0-?
|
|||
|
* returns ptr in a0
|
|||
|
|
|||
|
SUBR get_process_ptr
|
|||
|
|
|||
|
PUSH a1
|
|||
|
X32 a1
|
|||
|
addi process_ptrs,a1
|
|||
|
move *a1,a0,L
|
|||
|
PULL a1
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* a13 = * to wrestler process
|
|||
|
*
|
|||
|
* breaks links if both wrestlers not attached to each other
|
|||
|
*
|
|||
|
|
|||
|
SUBRP update_links
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a1,L ;proc attached to
|
|||
|
jrz #exit ;not attached
|
|||
|
move *a1(ATTACH_PROC),a0,L
|
|||
|
cmp a0,a13 ;pointing to each other?
|
|||
|
jreq #exit ;ok
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(ATTACH_PROC),L
|
|||
|
#exit rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
|
|||
|
SUBRP update_newfacing
|
|||
|
|
|||
|
|
|||
|
callr get_opp_process ;closest opponent process
|
|||
|
move a0,a10
|
|||
|
|
|||
|
movi MOVE_RIGHT,a0
|
|||
|
move *a13(OBJ_XPOS),a2,L
|
|||
|
move *a10(OBJ_XPOS),a3,L
|
|||
|
cmp a2,a3 ;a3-a2
|
|||
|
jrgt #right
|
|||
|
movi MOVE_LEFT,a0
|
|||
|
|
|||
|
#right movi MOVE_DOWN,a1
|
|||
|
move *a13(OBJ_ZPOS),a2,L
|
|||
|
move *a10(OBJ_ZPOS),a3,L
|
|||
|
cmp a2,a3 ;a3-a2
|
|||
|
jrgt #down
|
|||
|
movi MOVE_UP,a1
|
|||
|
|
|||
|
#down or a1,a0
|
|||
|
move a0,*a13(NEW_FACING_DIR)
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* sets x-flip based on facing direction
|
|||
|
*
|
|||
|
* a0 = * wrestler process
|
|||
|
|
|||
|
|
|||
|
SUBR set_wrestler_xflip
|
|||
|
|
|||
|
move *a0(FACING_DIR),a14
|
|||
|
btst PLAYER_RIGHT_BIT,a14
|
|||
|
jrnz #right
|
|||
|
|
|||
|
move *a0(OBJ_CONTROL),a14
|
|||
|
ori M_FLIPH,a14
|
|||
|
move a14,*a0(OBJ_CONTROL)
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#right move *a0(OBJ_CONTROL),a14
|
|||
|
andni M_FLIPH,a14
|
|||
|
move a14,*a0(OBJ_CONTROL)
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* confines wrestler in/out of ring
|
|||
|
* and sets CAN_MOVE_DIR bits
|
|||
|
*
|
|||
|
|
|||
|
SUBRP confine_wrestler
|
|||
|
|
|||
|
clr a7 ;can move in all directions
|
|||
|
|
|||
|
move *a13(ANIMODE),a0
|
|||
|
btst MODE_NOCONFINE_BIT,a0
|
|||
|
jrnz #no_confine
|
|||
|
|
|||
|
move *a13(PLYRMODE),a0
|
|||
|
cmpi MODE_ATTACHED,a0
|
|||
|
jreq #no_confine
|
|||
|
|
|||
|
move *a13(INRING),a0
|
|||
|
jrnz #outring
|
|||
|
|
|||
|
;We're inside the ring
|
|||
|
;Check against the top ropes.
|
|||
|
movi RING_TOP,a0
|
|||
|
move *a13(OBJ_ZPOSINT),a5
|
|||
|
cmp a0,a5 ;zpos - top
|
|||
|
jrgt #zu_ok
|
|||
|
jreq #no_u
|
|||
|
|
|||
|
;set Z to top of ring
|
|||
|
move a0,*a13(Z_BOUND)
|
|||
|
sll 16,a0
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
|
|||
|
;climb out if allowed
|
|||
|
calla ck_climb_out_top
|
|||
|
|
|||
|
#no_u ;just inside - don't adjust, but don't go any further.
|
|||
|
ori MOVE_UP,a7 ;can't move up
|
|||
|
jruc #check_x
|
|||
|
|
|||
|
#zu_ok ;Check aginst bottom ropes
|
|||
|
movi RING_BOT,a0 ;zpos - bot
|
|||
|
cmp a0,a5
|
|||
|
jrlt #zd_ok
|
|||
|
jreq #no_d
|
|||
|
|
|||
|
;set Z to bottom of ring
|
|||
|
move a0,*a13(Z_BOUND)
|
|||
|
sll 16,a0
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
|
|||
|
;climb out if allowed
|
|||
|
calla ck_climb_out_bot
|
|||
|
|
|||
|
#no_d ;just inside - don't adjust, but don't go any further.
|
|||
|
ori MOVE_DOWN,a7 ;can't move down
|
|||
|
jruc #check_x
|
|||
|
|
|||
|
#zd_ok ;no z problems. zero Z_BOUND
|
|||
|
clr a14
|
|||
|
move a14,*a13(Z_BOUND)
|
|||
|
|
|||
|
#check_x
|
|||
|
;Check left edge of collision box against left rope
|
|||
|
move *a13(OBJ_COLLX1),a5
|
|||
|
|
|||
|
;first see if we're even in the ballpark.
|
|||
|
movi vln_left_rope,a6
|
|||
|
move *a6,a0 ;x1
|
|||
|
cmp a0,a5 ;xpos - x2
|
|||
|
jrgt #xl_ok
|
|||
|
|
|||
|
;close enough for a more careful check...
|
|||
|
callr calc_line_x
|
|||
|
cmp a0,a5 ;xpos - a0
|
|||
|
jrgt #xl_ok
|
|||
|
jreq #no_l
|
|||
|
|
|||
|
|
|||
|
;we're past the left rope. see if we're attached
|
|||
|
move *a13(ATTACH_PROC),a14,L
|
|||
|
jrz #not
|
|||
|
|
|||
|
;I'm attached, which means both me and my opponent are gonna get
|
|||
|
; moved. Figure the right amount, apply it to both of us, then
|
|||
|
; wobble the ropes and bounce both of us away.
|
|||
|
|
|||
|
;a0 is rope X, a5 is left edge of our collbox. Move us and our
|
|||
|
; opponent right (a0 - a5) pixels.
|
|||
|
sub a5,a0
|
|||
|
move *a13(OBJ_XPOSINT),a14
|
|||
|
add a0,a14
|
|||
|
move a14,*a13(OBJ_XPOSINT)
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a5,L
|
|||
|
move *a5(OBJ_XPOSINT),a14
|
|||
|
add a0,a14
|
|||
|
move a14,*a5(OBJ_XPOSINT)
|
|||
|
|
|||
|
;If either I or my opponent has a nonzero X velocity other than
|
|||
|
; 40000h, give us both Xvel 40000h, Yvel 30000h.
|
|||
|
|
|||
|
;Skip the velocity crap if I'm on the ground.
|
|||
|
move *a13(GROUND_Y),a0
|
|||
|
move *a13(OBJ_YPOSINT),a1
|
|||
|
cmp a0,a1
|
|||
|
jreq #no_l
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a14,L
|
|||
|
jrz #lr_check_opp
|
|||
|
cmpi [4,0],a14
|
|||
|
jrne #lr_check_opp
|
|||
|
jruc #lr_set_vels
|
|||
|
|
|||
|
#lr_check_opp
|
|||
|
move *a5(OBJ_XVEL),a14,L
|
|||
|
jrz #no_l
|
|||
|
cmpi [4,0],a14
|
|||
|
jrne #lr_set_vels
|
|||
|
jruc #no_l
|
|||
|
|
|||
|
#lr_set_vels
|
|||
|
;X vel
|
|||
|
movi [4,0],a14
|
|||
|
move a14,*a13(OBJ_XVEL),L
|
|||
|
move a14,*a5(OBJ_XVEL),L
|
|||
|
|
|||
|
;Y vel
|
|||
|
;Wait! Don't muck with the Y vels if they're already above 30000h.
|
|||
|
move *a13(OBJ_YVEL),a14,L
|
|||
|
cmpi 30000h,a14
|
|||
|
jrgt #nyv1
|
|||
|
move *a5(OBJ_YVEL),a14,L
|
|||
|
cmpi 30000h,a14
|
|||
|
jrgt #nyv1
|
|||
|
movi [3,0],a14
|
|||
|
move a14,*a13(OBJ_YVEL),L
|
|||
|
move a14,*a5(OBJ_YVEL),L
|
|||
|
|
|||
|
#nyv1 ;...and wobble the ropes
|
|||
|
PUSH a0,a5
|
|||
|
movi ROPE_LEFT,a0
|
|||
|
movk 1,a2
|
|||
|
movi ROPE_BOUNCEIO,a1
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movi 3ch,a0
|
|||
|
calla triple_sound
|
|||
|
|
|||
|
PULL a0,a5
|
|||
|
|
|||
|
jruc #no_l
|
|||
|
|
|||
|
#not
|
|||
|
;we're not attached
|
|||
|
;line me up flush against the left rope
|
|||
|
move *a13(OBJ_XPOSINT),a14
|
|||
|
sub a5,a14
|
|||
|
add a14,a0
|
|||
|
move a0,*a13(X_BOUND)
|
|||
|
sll 16,a0
|
|||
|
move a0,*a13(OBJ_XPOS),L
|
|||
|
|
|||
|
move *a13(INRING),a0
|
|||
|
jrnz #no_l ;Am outside.
|
|||
|
;climb out the side if allowed
|
|||
|
calla ck_climb_out_side
|
|||
|
|
|||
|
;Has hit left rope
|
|||
|
;Wobble ropes and bounce off of them upon first hit.
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
jrnz #no_l
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a0,L
|
|||
|
jrz #no_l
|
|||
|
|
|||
|
;Skip the velocity crap if I'm on the ground.
|
|||
|
move *a13(GROUND_Y),a0
|
|||
|
move *a13(OBJ_YPOSINT),a1
|
|||
|
cmp a0,a1
|
|||
|
jreq #no_l
|
|||
|
|
|||
|
;We also should check YPOS also. Ropes shouldn't wobble if
|
|||
|
;not hit.
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a0,L
|
|||
|
movi [3,0001],a7
|
|||
|
move a7,*a13(OBJ_XVEL),L
|
|||
|
andi >ffff,a0
|
|||
|
cmpi 1,a0
|
|||
|
jrz #no_l
|
|||
|
|
|||
|
;This is the first time we have collided with ropes.
|
|||
|
;Wobble them.
|
|||
|
|
|||
|
movi ROPE_LEFT,a0
|
|||
|
movk 1,a2
|
|||
|
movi ROPE_BOUNCEIO,a1
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movi 3ch,a0
|
|||
|
calla triple_sound
|
|||
|
|
|||
|
#no_l
|
|||
|
ori MOVE_LEFT,a7 ;can't move left
|
|||
|
jruc #done
|
|||
|
|
|||
|
#xl_ok
|
|||
|
;Check right edge of collision box against right ropes
|
|||
|
move *a13(OBJ_COLLX2),a5
|
|||
|
|
|||
|
;first see if we're even in the ballpark.
|
|||
|
movi vln_right_rope,a6
|
|||
|
move *a6,a0 ;x1
|
|||
|
cmp a0,a5 ;xpos - x1
|
|||
|
jrlt #xr_ok
|
|||
|
|
|||
|
;close enough for a more careful check...
|
|||
|
callr calc_line_x
|
|||
|
cmp a0,a5 ;xpos - a0
|
|||
|
jrlt #xr_ok
|
|||
|
jreq #no_r
|
|||
|
|
|||
|
|
|||
|
;we're past the right rope. see if we're attached
|
|||
|
move *a13(ATTACH_PROC),a14,L
|
|||
|
jrz #not2
|
|||
|
|
|||
|
;I'm attached, which means both me and my opponent are gonna get
|
|||
|
; moved. Figure the right amount, apply it to both of us, then
|
|||
|
; wobble the ropes and bounce both of us away.
|
|||
|
|
|||
|
;a0 is rope X, a5 is right edge of our collbox. Move us and our
|
|||
|
; opponent left (a5 - a0) pixels.
|
|||
|
sub a0,a5
|
|||
|
move *a13(OBJ_XPOSINT),a14
|
|||
|
sub a5,a14
|
|||
|
move a14,*a13(OBJ_XPOSINT)
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a0,L
|
|||
|
move *a0(OBJ_XPOSINT),a14
|
|||
|
sub a5,a14
|
|||
|
move a14,*a0(OBJ_XPOSINT)
|
|||
|
|
|||
|
;If either I or my opponent has a nonzero X velocity other than
|
|||
|
; -40000h, give us both Xvel -40000h, Yvel 30000h.
|
|||
|
|
|||
|
;Skip the velocity crap if I'm on the ground.
|
|||
|
move *a13(GROUND_Y),a0
|
|||
|
move *a13(OBJ_YPOSINT),a1
|
|||
|
cmp a0,a1
|
|||
|
jreq #no_r
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a14,L
|
|||
|
jrz #rr_check_opp
|
|||
|
cmpi [-4,0],a14
|
|||
|
jrne #rr_check_opp
|
|||
|
jruc #rr_set_vels
|
|||
|
|
|||
|
#rr_check_opp
|
|||
|
move *a13(ATTACH_PROC),a5,L
|
|||
|
move *a5(OBJ_XVEL),a14,L
|
|||
|
jrz #no_r
|
|||
|
cmpi [-4,0],a14
|
|||
|
jrne #rr_set_vels
|
|||
|
jruc #no_r
|
|||
|
|
|||
|
#rr_set_vels
|
|||
|
;X vel
|
|||
|
movi [-4,0],a14
|
|||
|
move a14,*a13(OBJ_XVEL),L
|
|||
|
move *a13(ATTACH_PROC),a5,L
|
|||
|
move a14,*a5(OBJ_XVEL),L
|
|||
|
|
|||
|
;Y vel
|
|||
|
;Wait! Don't muck with the Y vels if they're already above 30000h.
|
|||
|
move *a13(OBJ_YVEL),a14,L
|
|||
|
cmpi 30000h,a14
|
|||
|
jrgt #nyv2
|
|||
|
move *a5(OBJ_YVEL),a14,L
|
|||
|
cmpi 30000h,a14
|
|||
|
jrgt #nyv2
|
|||
|
movi [3,0],a14
|
|||
|
move a14,*a13(OBJ_YVEL),L
|
|||
|
move a14,*a5(OBJ_YVEL),L
|
|||
|
#nyv2
|
|||
|
;...and wobble the ropes
|
|||
|
PUSH a0,a5
|
|||
|
movi ROPE_RIGHT,a0
|
|||
|
movk 1,a2
|
|||
|
movi ROPE_BOUNCEIO,a1
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movi 3ch,a0
|
|||
|
calla triple_sound
|
|||
|
|
|||
|
PULL a0,a5
|
|||
|
|
|||
|
jruc #no_r
|
|||
|
|
|||
|
#not2
|
|||
|
|
|||
|
move *a13(OBJ_XPOSINT),a14
|
|||
|
sub a14,a5
|
|||
|
sub a5,a0
|
|||
|
|
|||
|
move a0,*a13(X_BOUND)
|
|||
|
sll 16,a0
|
|||
|
move a0,*a13(OBJ_XPOS),L
|
|||
|
|
|||
|
move *a13(INRING),a0
|
|||
|
jrnz #no_r ;Am outside.
|
|||
|
|
|||
|
calla ck_climb_out_side
|
|||
|
|
|||
|
;Has hit right rope
|
|||
|
;Wobble ropes and bounce off of them upon first hit.
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
jrnz #no_r
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a0,L
|
|||
|
jrz #no_r
|
|||
|
|
|||
|
;Skip the velocity crap if I'm on the ground.
|
|||
|
move *a13(GROUND_Y),a0
|
|||
|
move *a13(OBJ_YPOSINT),a1
|
|||
|
cmp a0,a1
|
|||
|
jreq #no_r
|
|||
|
|
|||
|
;We also should check YPOS also. Ropes shouldn't wobble if
|
|||
|
;not hit.
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a0,L
|
|||
|
movi [-3,0001],a7
|
|||
|
move a7,*a13(OBJ_XVEL),L
|
|||
|
andi >ffff,a0
|
|||
|
cmpi 1,a0
|
|||
|
jrz #no_r
|
|||
|
|
|||
|
;This is the first time we have collided with ropes.
|
|||
|
;Wobble them.
|
|||
|
|
|||
|
movi ROPE_RIGHT,a0
|
|||
|
movk 1,a2
|
|||
|
movi ROPE_BOUNCEIO,a1
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movi 3ch,a0
|
|||
|
calla triple_sound
|
|||
|
|
|||
|
#no_r
|
|||
|
ori MOVE_RIGHT,a7 ;can't move right
|
|||
|
#xr_ok
|
|||
|
#done
|
|||
|
#no_confine
|
|||
|
move a7,*a13(CAN_MOVE_DIR)
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;We're outside the ring
|
|||
|
#outring
|
|||
|
movi ARENA_TOP,a0
|
|||
|
move *a13(OBJ_ZPOSINT),a5
|
|||
|
cmp a0,a5 ;zpos - top
|
|||
|
jrgt #zu_ok2
|
|||
|
jreq #no_u2
|
|||
|
|
|||
|
move a0,*a13(Z_BOUND)
|
|||
|
sll 16,a0
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
#no_u2
|
|||
|
ori MOVE_UP,a7 ;can't move up
|
|||
|
jruc #check_x2
|
|||
|
|
|||
|
#zu_ok2
|
|||
|
movi ARENA_BOT,a0 ;zpos - bot
|
|||
|
cmp a0,a5
|
|||
|
jrlt #zd_ok2
|
|||
|
jreq #no_d2
|
|||
|
|
|||
|
move a0,*a13(Z_BOUND)
|
|||
|
sll 16,a0
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
#no_d2
|
|||
|
ori MOVE_DOWN,a7 ;can't move down
|
|||
|
#zd_ok2
|
|||
|
|
|||
|
#check_x2
|
|||
|
move *a13(OBJ_COLLX1),a5
|
|||
|
movi vln_left_fence,a6
|
|||
|
move *a6,a0 ;x1
|
|||
|
cmp a0,a5 ;xpos - x2
|
|||
|
jrgt #xl_ok2
|
|||
|
callr calc_line_x
|
|||
|
cmp a0,a5 ;xpos - a0
|
|||
|
jrgt #xl_ok2
|
|||
|
jreq #no_l2
|
|||
|
|
|||
|
;must move right (a0-a5) pixels. If we're attached, move our
|
|||
|
; opponent too.
|
|||
|
move a0,a1
|
|||
|
sub a5,a0
|
|||
|
|
|||
|
move *a13(OBJ_XPOSINT),a14
|
|||
|
add a0,a14
|
|||
|
move a14,*a13(OBJ_XPOSINT)
|
|||
|
move a1,*a13(X_BOUND)
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a5,L
|
|||
|
jrz #no_l2
|
|||
|
|
|||
|
move *a5(OBJ_XPOSINT),a14
|
|||
|
add a0,a14
|
|||
|
move a14,*a5(OBJ_XPOSINT)
|
|||
|
move a1,*a5(X_BOUND)
|
|||
|
#no_l2
|
|||
|
ori MOVE_LEFT,a7 ;can't move left
|
|||
|
jruc #cont_x
|
|||
|
|
|||
|
#xl_ok2
|
|||
|
move *a13(OBJ_COLLX2),a5
|
|||
|
movi vln_right_fence,a6
|
|||
|
move *a6,a0 ;x1
|
|||
|
cmp a0,a5 ;xpos - x1
|
|||
|
jrlt #xr_ok2
|
|||
|
callr calc_line_x
|
|||
|
cmp a0,a5 ;xpos - a0
|
|||
|
jrlt #xr_ok2
|
|||
|
jreq #no_r2
|
|||
|
|
|||
|
;must move left (a5-a0) pixels. If we're attached, move our
|
|||
|
; opponent too.
|
|||
|
sub a0,a5
|
|||
|
|
|||
|
move *a13(OBJ_XPOSINT),a14
|
|||
|
sub a5,a14
|
|||
|
move a14,*a13(OBJ_XPOSINT)
|
|||
|
move a0,*a13(X_BOUND)
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a1,L
|
|||
|
jrz #no_r2
|
|||
|
move *a1(OBJ_XPOSINT),a14
|
|||
|
sub a5,a14
|
|||
|
move a14,*a1(OBJ_XPOSINT)
|
|||
|
move a0,*a1(X_BOUND)
|
|||
|
#no_r2
|
|||
|
ori MOVE_RIGHT,a7 ;can't move right
|
|||
|
#xr_ok2
|
|||
|
|
|||
|
;now check for the mat/ring
|
|||
|
|
|||
|
#cont_x
|
|||
|
move *a13(OBJ_XPOSINT),a5
|
|||
|
cmpi RING_X_CENTER,a5
|
|||
|
jrgt #right_side
|
|||
|
;left side
|
|||
|
movi vln_left_matedge2,a6
|
|||
|
callr calc_line_x
|
|||
|
jrz #done2 ;out of range
|
|||
|
move *a13(OBJ_COLLX2),a8
|
|||
|
sub a0,a8 ;xpos - a0 =(xov)
|
|||
|
jrn #done2
|
|||
|
|
|||
|
move *a13(OBJ_ZPOSINT),a4
|
|||
|
cmpi RING_Z_CENTER,a4
|
|||
|
jrgt #bot_left
|
|||
|
;top left
|
|||
|
move *a6(10h),a0
|
|||
|
;;; dec a4
|
|||
|
move a4,a9
|
|||
|
sub a0,a9 ;zpos - z1 =(zov)
|
|||
|
cmp a8,a9 ;zov - xov
|
|||
|
jrgt #no_r3
|
|||
|
|
|||
|
sub a9,a4
|
|||
|
move a4,*a13(Z_BOUND)
|
|||
|
sll 16,a4
|
|||
|
move a4,*a13(OBJ_ZPOS),L
|
|||
|
ori MOVE_DOWN,a7 ;can't move down
|
|||
|
|
|||
|
calla ck_climb_in_top
|
|||
|
|
|||
|
jruc #done2
|
|||
|
|
|||
|
#bot_left
|
|||
|
move *a6(30h),a9
|
|||
|
;;; inc a4
|
|||
|
sub a4,a9 ;z2 - zpos =(zov)
|
|||
|
cmp a8,a9 ;zov - xov
|
|||
|
jrgt #no_r3
|
|||
|
add a9,a4
|
|||
|
move a4,*a13(Z_BOUND)
|
|||
|
sll 16,a4
|
|||
|
move a4,*a13(OBJ_ZPOS),L
|
|||
|
ori MOVE_UP,a7 ;can't move up
|
|||
|
|
|||
|
calla ck_climb_in_bot
|
|||
|
|
|||
|
jruc #done2
|
|||
|
|
|||
|
#no_r3
|
|||
|
;we need to move a8 pixels to the left. if we're attached, move both
|
|||
|
; of us.
|
|||
|
sub a8,a5
|
|||
|
move a5,*a13(X_BOUND)
|
|||
|
sll 16,a5
|
|||
|
move a5,*a13(OBJ_XPOS),L
|
|||
|
ori MOVE_RIGHT,a7 ;can't move right
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a0,L
|
|||
|
jrz #no_r3_att
|
|||
|
move *a0(OBJ_XPOSINT),a14
|
|||
|
sub a8,a14
|
|||
|
move a14,*a0(OBJ_XPOSINT)
|
|||
|
#no_r3_att
|
|||
|
|
|||
|
calla ck_climb_in_side
|
|||
|
|
|||
|
jruc #done2
|
|||
|
|
|||
|
|
|||
|
#right_side
|
|||
|
movi vln_right_matedge2,a6
|
|||
|
callr calc_line_x
|
|||
|
jrz #done2 ;out of range
|
|||
|
move a0,a8
|
|||
|
move *a13(OBJ_COLLX1),a0
|
|||
|
sub a0,a8 ;a8 - xpos =(xov)
|
|||
|
jrn #done2
|
|||
|
|
|||
|
move *a13(OBJ_ZPOSINT),a4
|
|||
|
cmpi RING_Z_CENTER,a4
|
|||
|
jrgt #bot_right
|
|||
|
;top right
|
|||
|
move *a6(10h),a0
|
|||
|
;;; dec a4
|
|||
|
move a4,a9
|
|||
|
sub a0,a9 ;zpos - z1 =(zov)
|
|||
|
cmp a8,a9 ;zov - xov
|
|||
|
jrgt #no_l3
|
|||
|
sub a9,a4
|
|||
|
move a4,*a13(Z_BOUND)
|
|||
|
sll 16,a4
|
|||
|
move a4,*a13(OBJ_ZPOS),L
|
|||
|
ori MOVE_DOWN,a7 ;can't move down
|
|||
|
|
|||
|
calla ck_climb_in_top
|
|||
|
|
|||
|
jruc #done2
|
|||
|
|
|||
|
|
|||
|
#bot_right
|
|||
|
move *a6(30h),a9
|
|||
|
;;; inc a4
|
|||
|
sub a4,a9 ;z2 - zpos =(zov)
|
|||
|
cmp a8,a9 ;zov - xov
|
|||
|
jrgt #no_l3
|
|||
|
add a9,a4
|
|||
|
move a4,*a13(Z_BOUND)
|
|||
|
sll 16,a4
|
|||
|
move a4,*a13(OBJ_ZPOS),L
|
|||
|
ori MOVE_UP,a7 ;can't move up
|
|||
|
|
|||
|
calla ck_climb_in_bot
|
|||
|
|
|||
|
jruc #done2
|
|||
|
|
|||
|
|
|||
|
#no_l3
|
|||
|
;we need to move a8 pixels to the right. if we're attached, move both
|
|||
|
; of us.
|
|||
|
add a8,a5
|
|||
|
move a5,*a13(X_BOUND)
|
|||
|
sll 16,a5
|
|||
|
move a5,*a13(OBJ_XPOS),L
|
|||
|
ori MOVE_LEFT,a7 ;can't move down
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a0,L
|
|||
|
jrz #no_l3_att
|
|||
|
move *a0(OBJ_XPOSINT),a14
|
|||
|
add a8,a14
|
|||
|
move a14,*a0(OBJ_XPOSINT)
|
|||
|
#no_l3_att
|
|||
|
|
|||
|
calla ck_climb_in_side
|
|||
|
|
|||
|
#done2
|
|||
|
move a7,*a13(CAN_MOVE_DIR)
|
|||
|
move *a13(PLYRMODE),a0
|
|||
|
cmpi MODE_DEAD,a0
|
|||
|
jreq #dead
|
|||
|
cmpi MODE_RUNNING,a0
|
|||
|
jrne just_ignore_me
|
|||
|
|
|||
|
movi [3,0],a2
|
|||
|
btst MOVE_LEFT_BIT,a7
|
|||
|
jrnz we_going_left
|
|||
|
neg a2
|
|||
|
btst MOVE_RIGHT_BIT,a7
|
|||
|
jrz just_ignore_me
|
|||
|
we_going_left
|
|||
|
|
|||
|
;we've hit a gate, and we're running. It's possible, however, that
|
|||
|
; we're right up against a gate and have just started running in the
|
|||
|
; opposite direction, in which case we shouldn't crash or anything.
|
|||
|
; blow this off if we're running AWAY from the gate we've hit
|
|||
|
move *a13(CAN_MOVE_DIR),a0
|
|||
|
move *a13(FACING_DIR),a14
|
|||
|
and a14,a0
|
|||
|
andi MOVE_LEFT|MOVE_RIGHT,a0
|
|||
|
jrz just_ignore_me
|
|||
|
|
|||
|
move a2,*a13(OBJ_XVEL),L
|
|||
|
SETMODE NORMAL
|
|||
|
movi [3,0],a0
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
clr a0
|
|||
|
move a0,*a13(RUN_TIME)
|
|||
|
|
|||
|
;if we've hit the gate in the last three seconds, fall back instead.
|
|||
|
move @PCNT,a14,L
|
|||
|
move *a13(HIT_GATE_TIME),a0,L
|
|||
|
sub a0,a14
|
|||
|
cmpi TSEC*3,a14
|
|||
|
jrge #bnc
|
|||
|
FACETBL fall_back_tbl
|
|||
|
jruc #bcanim
|
|||
|
|
|||
|
#bnc FACE24TBL bncoff_gate
|
|||
|
#bcanim calla change_anim1a
|
|||
|
|
|||
|
;crash sound
|
|||
|
movi 0c5h,a0
|
|||
|
calla triple_sound
|
|||
|
|
|||
|
;set HIT_GATE_TIME
|
|||
|
move @PCNT,a14,L
|
|||
|
move a14,*a13(HIT_GATE_TIME),L
|
|||
|
|
|||
|
;take some damage
|
|||
|
move *a13(PLYRNUM),a1
|
|||
|
movi -D_GATE_CRASH,a0
|
|||
|
clr a10
|
|||
|
calla adjust_health
|
|||
|
|
|||
|
calla ditch_getup_meter
|
|||
|
|
|||
|
just_ignore_me
|
|||
|
rets
|
|||
|
|
|||
|
#dead ;if we're a zombie, hitting the edge is our cue to transform
|
|||
|
andi MOVE_LEFT|MOVE_RIGHT,a7
|
|||
|
jrz just_ignore_me
|
|||
|
move *a13(STATUS_FLAGS),a14
|
|||
|
btst B_ZOMBIE,a14
|
|||
|
jrz just_ignore_me
|
|||
|
btst B_CAN_XFORM,a14
|
|||
|
jrz just_ignore_me
|
|||
|
|
|||
|
#zombie_transform
|
|||
|
movk 1,a0
|
|||
|
calla change_wrestler
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* for whatever reason, confine_wrestler happens twice per tick. The problem
|
|||
|
* is that if you bump into the ropes, the first time we execute c_w, your
|
|||
|
* CAN_MOVE_DIR bits are set. But the second time, they're cleared since you
|
|||
|
* aren't hitting the ropes anymore. This ugly little hack gets around this
|
|||
|
* by saving your CAN_MOVE_DIR bits after the first call, and then ORing them
|
|||
|
* with your CAN_MOVE_DIR bits after the second.
|
|||
|
|
|||
|
SUBRP confine_wrestler_fix1
|
|||
|
|
|||
|
move *a13(CAN_MOVE_DIR),*a13(CAN_MOVE_TEMP)
|
|||
|
rets
|
|||
|
|
|||
|
SUBRP confine_wrestler_fix2
|
|||
|
move *a13(CAN_MOVE_DIR),a0
|
|||
|
move *a13(CAN_MOVE_TEMP),a1
|
|||
|
or a0,a1
|
|||
|
move a1,*a13(CAN_MOVE_DIR)
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
SUBRP wrestler_friction
|
|||
|
|
|||
|
move *a13(ANIMODE),a0
|
|||
|
btst MODE_FRICTION_BIT,a0
|
|||
|
jrz #no_friction
|
|||
|
|
|||
|
move *a13(OBJ_FRICTION),a0
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a1,L
|
|||
|
jrz #no_friction
|
|||
|
jrn #add
|
|||
|
|
|||
|
sub a0,a1
|
|||
|
jrp #ok1
|
|||
|
clr a1
|
|||
|
#ok1
|
|||
|
move a1,*a13(OBJ_XVEL),L
|
|||
|
rets
|
|||
|
|
|||
|
#add
|
|||
|
add a0,a1
|
|||
|
jrn #ok2
|
|||
|
clr a1
|
|||
|
#ok2
|
|||
|
move a1,*a13(OBJ_XVEL),L
|
|||
|
|
|||
|
|
|||
|
#no_friction
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* Change an objects image
|
|||
|
* A0=*New image
|
|||
|
* A1=New flip flags & const
|
|||
|
* A8=*Obj
|
|||
|
* Trashes scratch
|
|||
|
|
|||
|
SUBR change_image
|
|||
|
|
|||
|
|
|||
|
PUSH a2,a3
|
|||
|
|
|||
|
cmpi ROM,a0
|
|||
|
jrlo #anierr
|
|||
|
|
|||
|
move a0,a2
|
|||
|
move a1,a3
|
|||
|
|
|||
|
move a2,*a8(OIMG),L
|
|||
|
move *a2(0),*a8(OSIZE),L
|
|||
|
move *a2(ISAG),*a8(OSAG),L
|
|||
|
|
|||
|
|
|||
|
move *a2(IANIOFFX),*a8(ODXOFF) ;display x offset
|
|||
|
move *a2(IANIOFFY),*a8(ODYOFF) ;display y offset
|
|||
|
|
|||
|
|
|||
|
setf 5,0,0
|
|||
|
move *a2(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits
|
|||
|
setf 6,0,0
|
|||
|
move a3,*a8(OCTRL) ;Write 6 low bits
|
|||
|
setf 16,1,0
|
|||
|
|
|||
|
#x PULL a2,a3
|
|||
|
rets
|
|||
|
|
|||
|
#anierr
|
|||
|
.if DEBUG
|
|||
|
LOCKUP
|
|||
|
eint
|
|||
|
.else
|
|||
|
CALLERR 2,2
|
|||
|
.endif
|
|||
|
jruc #x
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* calls movement code base on wrestler number
|
|||
|
*
|
|||
|
* a13 = * wrestler process
|
|||
|
|
|||
|
SUBRP move_wrestler
|
|||
|
|
|||
|
move @HALT,a0
|
|||
|
jrnz #rets
|
|||
|
|
|||
|
;check to see if a special move watchdog proc has queued up an anim.
|
|||
|
; If one has, do that instead of calling move_xxx.
|
|||
|
move *a13(SPECIAL_MOVE_ADDR),a0,L
|
|||
|
jrz #no_special
|
|||
|
|
|||
|
;a special has been queued up. do it.
|
|||
|
calla change_anim1a
|
|||
|
clr a14
|
|||
|
move a14,*a13(SPECIAL_MOVE_ADDR),L
|
|||
|
jruc #rets
|
|||
|
|
|||
|
#no_special
|
|||
|
|
|||
|
;turn into a drone if it's time to auto-pin.
|
|||
|
callr auto_pin_check
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a0
|
|||
|
X32 a0
|
|||
|
addi #code_addr,a0
|
|||
|
move *a0,a0,L
|
|||
|
call a0
|
|||
|
|
|||
|
#rets rets
|
|||
|
|
|||
|
#code_addr
|
|||
|
.long move_bret ;0 Bret Hart
|
|||
|
.long move_razor ;1 Razor Ramon
|
|||
|
.long move_taker ;2 Undertaker
|
|||
|
.long move_yoko ;3 Yokozuna
|
|||
|
.long move_shawn ;4 Shawn Michaels
|
|||
|
.long move_bam ;5 Bam Bam
|
|||
|
.long move_doink ;6 Doink
|
|||
|
.long 0 ;7 spare
|
|||
|
.long move_lex ;8 Lex Luger
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* if all opponents are dead, wait four seconds, then wait for the
|
|||
|
* unint bit to clear, then turn into a drone.
|
|||
|
*
|
|||
|
|
|||
|
SUBR auto_pin_check
|
|||
|
move @in_finish_move,a14 ; Are we in a finishing move ?
|
|||
|
jrnz #rets ; br = yes
|
|||
|
move @finish_completed,a14 ; Did we do a finishing move ?
|
|||
|
jrnz #rets ; br = yes
|
|||
|
|
|||
|
move @royal_rumble,a14
|
|||
|
jrnz #rets
|
|||
|
|
|||
|
calla get_opp_plyrmode
|
|||
|
cmpi MODE_DEAD,a0
|
|||
|
jrne #alive
|
|||
|
|
|||
|
;skip it if we've already pinned
|
|||
|
move *a13(STATUS_FLAGS),a14
|
|||
|
btst B_DID_PIN,a14
|
|||
|
jrnz #rets
|
|||
|
|
|||
|
callr get_opp_process
|
|||
|
move *a0(STATUS_FLAGS),a14
|
|||
|
btst B_ZOMBIE,a14
|
|||
|
jrnz #alive
|
|||
|
|
|||
|
.ref anyone_bucking
|
|||
|
calla anyone_bucking
|
|||
|
jrnz #rets
|
|||
|
|
|||
|
;all opponents are dead. increment AUTO_PIN_CNTDOWN and turn into
|
|||
|
; a drone if the total is >= TSEC*4.
|
|||
|
move *a13(AUTO_PIN_CNTDOWN),a14
|
|||
|
inc a14
|
|||
|
move a14,*a13(AUTO_PIN_CNTDOWN)
|
|||
|
cmpi TSEC*3,a14
|
|||
|
jrlt #rets
|
|||
|
|
|||
|
move *a13(ANIMODE),a14
|
|||
|
btst MODE_UNINT_BIT,a14
|
|||
|
jrnz #rets
|
|||
|
|
|||
|
;become a drone
|
|||
|
movi PTYPE_DRONE,a14
|
|||
|
move a14,*a13(PLYR_TYPE)
|
|||
|
jruc #rets
|
|||
|
|
|||
|
#alive ;Reset AUTO_PIN_CNTDOWN
|
|||
|
clr a14
|
|||
|
move a14,*a13(AUTO_PIN_CNTDOWN)
|
|||
|
#rets rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
; SUBRP realtime_clock
|
|||
|
;
|
|||
|
; clr a8
|
|||
|
; move a8,@match_realtime
|
|||
|
;
|
|||
|
;#loop SLEEP TSEC
|
|||
|
; inc a8
|
|||
|
; move a8,@match_realtime
|
|||
|
; jruc #loop
|
|||
|
|
|||
|
******************************************************************************
|
|||
|
|
|||
|
;!KEEP THIS ORDER!
|
|||
|
BSSX up_dtime1, 16*NUM_WRES ;number of ticks stick held down
|
|||
|
BSSX down_dtime1, 16*NUM_WRES
|
|||
|
BSSX left_dtime1, 16*NUM_WRES
|
|||
|
BSSX right_dtime1, 16*NUM_WRES
|
|||
|
BSSX punch_dtime1, 16*NUM_WRES
|
|||
|
BSSX block_dtime1, 16*NUM_WRES ;number of ticks button held down
|
|||
|
BSSX powerp_dtime1, 16*NUM_WRES
|
|||
|
BSSX kick_dtime1, 16*NUM_WRES
|
|||
|
BSSX powerk_dtime1, 16*NUM_WRES
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBRP init_joy_dtime
|
|||
|
|
|||
|
clr a0
|
|||
|
|
|||
|
movi up_dtime1,a1
|
|||
|
movi 9*NUM_WRES,a2
|
|||
|
#lp1
|
|||
|
move a0,*a1+
|
|||
|
dsj a2,#lp1
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR get_block_dtime
|
|||
|
|
|||
|
X16 a0
|
|||
|
addi block_dtime1,a0
|
|||
|
move *a0,a0
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR get_powerp_dtime
|
|||
|
|
|||
|
X16 a0
|
|||
|
addi powerp_dtime1,a0
|
|||
|
move *a0,a0
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR get_punch_dtime
|
|||
|
|
|||
|
X16 a0
|
|||
|
addi punch_dtime1,a0
|
|||
|
move *a0,a0
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR get_kick_dtime
|
|||
|
|
|||
|
X16 a0
|
|||
|
addi kick_dtime1,a0
|
|||
|
move *a0,a0
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR get_powerk_dtime
|
|||
|
|
|||
|
X16 a0
|
|||
|
addi powerk_dtime1,a0
|
|||
|
move *a0,a0
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
|
|||
|
SUBRP update_joy_dtime
|
|||
|
|
|||
|
move *a13(PLYRNUM),a2
|
|||
|
callr #update_but
|
|||
|
move *a13(PLYRNUM),a2
|
|||
|
callr #update_stick
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#update_stick
|
|||
|
; move a13,a0
|
|||
|
; calla wres_get_stick_val_cur
|
|||
|
move *a13(STICK_VAL_CUR),a0
|
|||
|
X16 a2
|
|||
|
addi up_dtime1,a2
|
|||
|
|
|||
|
movk 4,a3
|
|||
|
#loop1
|
|||
|
clr a1
|
|||
|
|
|||
|
srl 1,a0
|
|||
|
jrnc #clr1
|
|||
|
|
|||
|
move *a2,a1
|
|||
|
inc a1
|
|||
|
#clr1
|
|||
|
move a1,*a2
|
|||
|
|
|||
|
addi 16*NUM_WRES,a2
|
|||
|
dsj a3,#loop1
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#update_but
|
|||
|
move *a13(BUT_VAL_CUR),a0
|
|||
|
X16 a2
|
|||
|
addi punch_dtime1,a2
|
|||
|
|
|||
|
movk 5,a3
|
|||
|
#loop2
|
|||
|
clr a1
|
|||
|
|
|||
|
srl 1,a0
|
|||
|
jrnc #clr2
|
|||
|
|
|||
|
move *a2,a1
|
|||
|
inc a1
|
|||
|
#clr2
|
|||
|
move a1,*a2
|
|||
|
|
|||
|
addi 16*NUM_WRES,a2
|
|||
|
dsj a3,#loop2
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* a13 = * current process
|
|||
|
* calculates closest opponent and distances to him
|
|||
|
*
|
|||
|
* Well, not really the closest. We bias it lots of ways:
|
|||
|
*
|
|||
|
* ---> Will always choose live targets over dead ones.
|
|||
|
* ---> Will always choose normal dead over zombies.
|
|||
|
* ---> Biased distance (used for comparison but never stored) is doubled
|
|||
|
* for targets in MODE_ONGROUND.
|
|||
|
* ---> 25% reduction in biased distance for WHOIHIT
|
|||
|
* ---> Biased distance tripled for targets with different INRING values.
|
|||
|
* ---> Add double the Z difference to biased range (favors targets in
|
|||
|
* your Z-lane.
|
|||
|
* ---> 25% reduction in biased distance for previous closest
|
|||
|
* ---> Will always pick live targets in front of a runner over targets behind
|
|||
|
* him, IF they have the same INRING value.
|
|||
|
* ---> If in combo mode, will always face WHOIHIT, unless WHOIHIT is dead.
|
|||
|
*
|
|||
|
|
|||
|
|
|||
|
;biased distance to current champ.
|
|||
|
.bss #biased_range,16
|
|||
|
|
|||
|
; first calculate the distance on the X-Z plane
|
|||
|
; dxz = sqroot ( (x1-x2)^2 + (z1-z2)^2 )
|
|||
|
; total dist = sqroot ( DXZ^2 + (y1-y2)^2 )
|
|||
|
|
|||
|
|
|||
|
SUBRP calc_closest2
|
|||
|
|
|||
|
;Always recalculate if our current closest is dead.
|
|||
|
move *a13(CLOSEST_NUM),a14
|
|||
|
X32 a14
|
|||
|
addi process_ptrs,a14
|
|||
|
move *a14,a14,L
|
|||
|
move *a14(PLYRMODE),a14
|
|||
|
cmpi MODE_DEAD,a14
|
|||
|
jreq #go
|
|||
|
|
|||
|
;Only proceed on every fourth tick.
|
|||
|
move *a13(PLYRNUM),a0
|
|||
|
andi 3,a0
|
|||
|
move @PCNT,a1
|
|||
|
andi 3,a1
|
|||
|
cmp a0,a1
|
|||
|
jrnz #x
|
|||
|
|
|||
|
|
|||
|
SUBRP calc_closest
|
|||
|
|
|||
|
;a11 is a flag. when set, this indicates that a live player
|
|||
|
; is the current closest. Any live player will be chosen over
|
|||
|
; a dead one.
|
|||
|
;a11 is the status of the closest guy. a positive value means the
|
|||
|
; current closest is alive. Zero means he's dead, and a negative
|
|||
|
; value means there isn't one or it's a zombie.
|
|||
|
|
|||
|
#go move *a13(PLYR_TYPE),a0
|
|||
|
|
|||
|
move *a13(OBJ_XPOSINT),a4
|
|||
|
move *a13(OBJ_ZPOSINT),a5
|
|||
|
move *a13(OBJ_YPOSINT),a6
|
|||
|
|
|||
|
movi 7FFFh,a3 ;closest distance
|
|||
|
move a3,@#biased_range
|
|||
|
clr a11
|
|||
|
dec a11 ;initialize to none/zombie
|
|||
|
movi process_ptrs,a2
|
|||
|
movi NUM_WRES,a1
|
|||
|
|
|||
|
#loop move *a2+,a10,L
|
|||
|
jrz #inactive
|
|||
|
cmp a13,a10
|
|||
|
jreq #skip_nopull ;skip self
|
|||
|
|
|||
|
move *a13(PLYR_SIDE),a7
|
|||
|
move *a10(PLYR_SIDE),a8
|
|||
|
cmp a7,a8
|
|||
|
jreq #skip_nopull ;skip friendly
|
|||
|
|
|||
|
PUSH a4,a6
|
|||
|
PUSH a1
|
|||
|
|
|||
|
move *a10(OBJ_XPOSINT),a7
|
|||
|
move *a10(OBJ_ZPOSINT),a8
|
|||
|
move *a10(OBJ_YPOSINT),a9
|
|||
|
|
|||
|
sub a4,a7 ;abs(delta x)
|
|||
|
abs a7
|
|||
|
move a7,a1
|
|||
|
mpyu a1,a1 ;^2
|
|||
|
move a1,a0
|
|||
|
|
|||
|
sub a5,a8 ;abs(delta z)
|
|||
|
abs a8
|
|||
|
move a8,a1
|
|||
|
mpyu a1,a1 ;^2
|
|||
|
add a1,a0
|
|||
|
|
|||
|
sub a6,a9 ;abs(delta y)
|
|||
|
abs a9
|
|||
|
move a9,a1
|
|||
|
mpyu a1,a1 ;^2
|
|||
|
add a1,a0
|
|||
|
calla square_root ;sqroot of dxz^2 + dy^2
|
|||
|
|
|||
|
PULL a1
|
|||
|
|
|||
|
;a0 is dist. compute biased dist in a4
|
|||
|
move a0,a4
|
|||
|
|
|||
|
;ONGROUND penalty
|
|||
|
move *a10(PLYRMODE),a14
|
|||
|
cmpi MODE_ONGROUND,a14
|
|||
|
jrne #bc1
|
|||
|
sll 1,a4 ;double it
|
|||
|
|
|||
|
#bc1 ;WHOIHIT bonus
|
|||
|
move *a13(WHOIHIT),a14,L
|
|||
|
cmp a14,a10
|
|||
|
jrne #bc2
|
|||
|
move a4,a14
|
|||
|
srl 2,a14
|
|||
|
sub a14,a4 ;sub 25%
|
|||
|
|
|||
|
#bc2 ;INRING penalty
|
|||
|
move *a10(INRING),a14
|
|||
|
move *a13(INRING),a6
|
|||
|
cmp a6,a14
|
|||
|
jreq #bc3
|
|||
|
move a4,a14
|
|||
|
sll 1,a4
|
|||
|
add a14,a4 ;triple it
|
|||
|
|
|||
|
#bc3 ;previous closest bonus
|
|||
|
move *a13(CLOSEST_NUM),a14
|
|||
|
move *a10(PLYRNUM),a6
|
|||
|
cmp a14,a6
|
|||
|
jrne #bc4
|
|||
|
move a4,a14
|
|||
|
srl 2,a14
|
|||
|
sub a14,a4 ;sub 25%
|
|||
|
|
|||
|
#bc4 ;zero biased dist to combo target
|
|||
|
move *a13(COMBO_COUNT),a14
|
|||
|
jrz #bc5
|
|||
|
move *a13(WHOIHIT),a14,L
|
|||
|
cmp a14,a10
|
|||
|
jrne #bc5
|
|||
|
clr a4 ;zero dist
|
|||
|
|
|||
|
#bc5 ;Z penalty
|
|||
|
move a8,a14 ;delta Z
|
|||
|
sll 1,a14
|
|||
|
add a14,a4 ;add double the Z dist
|
|||
|
|
|||
|
|
|||
|
;skip this guy if:
|
|||
|
; a) we're running,
|
|||
|
; b) he's behind us,
|
|||
|
; c) our current closest is ahead of us, and
|
|||
|
; d) our current closest is inside the ring.
|
|||
|
|
|||
|
;we running?
|
|||
|
move *a13(PLYRMODE),a14
|
|||
|
cmpi MODE_RUNNING,a14
|
|||
|
jrne #ab_ok
|
|||
|
|
|||
|
;have a useful current closest?
|
|||
|
TEST a11
|
|||
|
jrn #ab_ok
|
|||
|
|
|||
|
;is this guy behind us?
|
|||
|
move a10,a14
|
|||
|
calla is_a14_behind
|
|||
|
jrnc #ab_ok
|
|||
|
|
|||
|
;is closest ahead of us?
|
|||
|
move *a13(CLOSEST_NUM),a14
|
|||
|
X32 a14
|
|||
|
addi process_ptrs,a14
|
|||
|
move *a14,a14,L
|
|||
|
calla is_a14_behind
|
|||
|
jrc #ab_ok
|
|||
|
|
|||
|
;is closest inside the ring?
|
|||
|
move *a13(CLOSEST_NUM),a14
|
|||
|
X32 a14
|
|||
|
addi process_ptrs,a14
|
|||
|
move *a14,a14,L
|
|||
|
move *a14(INRING),a14
|
|||
|
jrnz #ab_ok
|
|||
|
|
|||
|
;we're running, this guy is behind us, and our current closest is
|
|||
|
; both inside the ring and ahead of us. Ignore this guy.
|
|||
|
jruc #skip
|
|||
|
|
|||
|
#ab_ok ;ahead/behind ok.
|
|||
|
|
|||
|
;three cases. zombie, dead, or alive.
|
|||
|
move *a10(PLYRMODE),a14
|
|||
|
cmpi MODE_DEAD,a14
|
|||
|
jrne #alive
|
|||
|
move *a10(STATUS_FLAGS),a14
|
|||
|
btst B_ZOMBIE,a14
|
|||
|
jrz #dead
|
|||
|
;fall through to zombie
|
|||
|
|
|||
|
#zombie ;Only test this guy if a11 is negative.
|
|||
|
TEST a11
|
|||
|
jrnn #skip
|
|||
|
jruc #compare
|
|||
|
|
|||
|
#dead ;If a11 is negative, take this guy. If it's zero, compare
|
|||
|
TEST a11
|
|||
|
jrz #compare
|
|||
|
jrnn #skip
|
|||
|
clr a11 ;set a11 to dead
|
|||
|
jruc #accept
|
|||
|
|
|||
|
#alive ;If a11 is positive, compare, otherwise just take him.
|
|||
|
TEST a11
|
|||
|
jrp #compare
|
|||
|
movk 1,a11 ;set a11 to alive
|
|||
|
jruc #accept
|
|||
|
|
|||
|
#compare
|
|||
|
move @#biased_range,a14
|
|||
|
cmp a14,a4
|
|||
|
jrle #accept
|
|||
|
|
|||
|
;too far.
|
|||
|
jruc #skip
|
|||
|
|
|||
|
#accept ;use the guy in a10
|
|||
|
|
|||
|
move a4,@#biased_range
|
|||
|
move a0,a3
|
|||
|
move a3,*a13(CLOSEST_DIST)
|
|||
|
move a7,*a13(CLOSEST_XDIST)
|
|||
|
move a8,*a13(CLOSEST_ZDIST)
|
|||
|
move a9,*a13(CLOSEST_YDIST)
|
|||
|
|
|||
|
move *a10(PLYRNUM),a14
|
|||
|
move a14,*a13(CLOSEST_NUM)
|
|||
|
|
|||
|
#skip
|
|||
|
PULL a4,a6
|
|||
|
#inactive
|
|||
|
#skip_nopull
|
|||
|
dsj a1,#loop
|
|||
|
|
|||
|
#x rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* if attached, updates position based on player attached to
|
|||
|
* wrestler proc = *a13
|
|||
|
*
|
|||
|
* RETURNS: Z=1 - not attached to anything
|
|||
|
* Z=0 - attached and updated
|
|||
|
*
|
|||
|
* TRASHES: a0,a1,a2
|
|||
|
|
|||
|
SUBR master_keep_attached
|
|||
|
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a10,L ;proc attached to me
|
|||
|
jrz #not_attached
|
|||
|
move *a10(ATTACH_PROC),a0,L
|
|||
|
jrz #not_attached
|
|||
|
|
|||
|
#still_attached
|
|||
|
;first, see if opponent is on the ground.
|
|||
|
move *a10(OBJ_YPOS),a0,L
|
|||
|
move *a10(GROUND_Y),a14
|
|||
|
sll 16,a14
|
|||
|
cmp a14,a0
|
|||
|
jrgt #opp_notgnd
|
|||
|
|
|||
|
;opponent is on ground. first, make sure he's not in MODE_GHOST
|
|||
|
move *a10(ANIMODE),a14
|
|||
|
btst MODE_GHOST_BIT,a14
|
|||
|
jrnz #opp_notgnd
|
|||
|
|
|||
|
;calc new 'floor'
|
|||
|
move *a10(OBJ_YPOS),a0,L
|
|||
|
move *a13(ATTACH_YOFF),a14
|
|||
|
sll 16,a14
|
|||
|
sub a14,a0
|
|||
|
|
|||
|
;a0 is our new floor. stay at or above
|
|||
|
move *a13(OBJ_YPOS),a14,L
|
|||
|
cmp a14,a0
|
|||
|
jrle #above_newfloor
|
|||
|
|
|||
|
;too low. climb
|
|||
|
move a0,*a13(OBJ_YPOS),L
|
|||
|
|
|||
|
#above_newfloor
|
|||
|
#opp_notgnd
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a10(OBJ_YVEL),L
|
|||
|
|
|||
|
move *a13(OBJ_ZPOS),a0,L
|
|||
|
move *a13(ATTACH_ZOFF),a1
|
|||
|
sll 16,a1
|
|||
|
add a1,a0
|
|||
|
move a0,*a10(OBJ_ZPOS),L
|
|||
|
|
|||
|
move *a13(OBJ_YPOS),a0,L
|
|||
|
move *a13(ATTACH_YOFF),a1
|
|||
|
sll 16,a1
|
|||
|
add a1,a0
|
|||
|
move a0,*a10(OBJ_YPOS),L
|
|||
|
|
|||
|
move *a13(OBJ_XPOS),a0,L
|
|||
|
move *a13(ATTACH_XOFF),a1
|
|||
|
sll 16,a1
|
|||
|
|
|||
|
move *a13(FACING_DIR),a2
|
|||
|
btst MOVE_RIGHT_BIT,a2
|
|||
|
jrnz #add
|
|||
|
neg a1
|
|||
|
#add
|
|||
|
add a1,a0
|
|||
|
move a0,*a10(OBJ_XPOS),L
|
|||
|
|
|||
|
movk 1,a0 ;Z=0
|
|||
|
|
|||
|
#not_attached
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* if attached, updates position based on player attached to
|
|||
|
* wrestler proc = *a13
|
|||
|
*
|
|||
|
* RETURNS: Z=1 - not attached to anything
|
|||
|
* Z=0 - attached and updated
|
|||
|
*
|
|||
|
* TRASHES: a0,a1,a2
|
|||
|
|
|||
|
|
|||
|
SUBR keep_attached
|
|||
|
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a2,L ;proc attached to
|
|||
|
jrz #not_attached
|
|||
|
move *a2(ATTACH_PROC),a0,L
|
|||
|
jrz #not_attached
|
|||
|
|
|||
|
#still_attached
|
|||
|
clr a0
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
|
|||
|
move *a2(OBJ_ZPOS),a0,L
|
|||
|
move *a2(ATTACH_ZOFF),a1
|
|||
|
sll 16,a1
|
|||
|
add a1,a0
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
|
|||
|
move *a2(OBJ_YPOS),a0,L
|
|||
|
move *a2(ATTACH_YOFF),a1
|
|||
|
sll 16,a1
|
|||
|
add a1,a0
|
|||
|
move a0,*a13(OBJ_YPOS),L
|
|||
|
|
|||
|
|
|||
|
move *a2(OBJ_XPOS),a0,L
|
|||
|
move *a2(ATTACH_XOFF),a1
|
|||
|
sll 16,a1
|
|||
|
|
|||
|
move *a2(FACING_DIR),a2
|
|||
|
btst MOVE_RIGHT_BIT,a2
|
|||
|
jrnz #add
|
|||
|
neg a1
|
|||
|
#add
|
|||
|
add a1,a0
|
|||
|
move a0,*a13(OBJ_XPOS),L
|
|||
|
|
|||
|
movk 1,a0 ;Z=0
|
|||
|
|
|||
|
#not_attached
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* RETURNS: a0 = * closest opponent process
|
|||
|
*
|
|||
|
* TRASHES: a0
|
|||
|
|
|||
|
SUBR get_opp_process
|
|||
|
|
|||
|
move *a13(CLOSEST_NUM),a0
|
|||
|
X32 a0
|
|||
|
addi process_ptrs,a0
|
|||
|
move *a0,a0,L
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* RETURNS: a0 = PLYRMODE of the closest opponent
|
|||
|
*
|
|||
|
* TRASHES: a0
|
|||
|
|
|||
|
SUBR get_opp_plyrmode
|
|||
|
|
|||
|
move *a13(CLOSEST_NUM),a0
|
|||
|
X32 a0
|
|||
|
addi process_ptrs,a0
|
|||
|
move *a0,a0,L
|
|||
|
move *a0(PLYRMODE),a0
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* ARGS: a0 = facing value (in binary form - 0,1,2,4,8)
|
|||
|
*
|
|||
|
* RETURNS: a0 = facing value (in linear form - 0,1,2,3 - 8)
|
|||
|
*
|
|||
|
|
|||
|
SUBR convert_facing
|
|||
|
|
|||
|
X16 a0
|
|||
|
addi #convert_table,a0
|
|||
|
move *a0,a0
|
|||
|
rets
|
|||
|
|
|||
|
#convert_table
|
|||
|
.word 0 ;0 zip
|
|||
|
.word 0 ;1 up
|
|||
|
.word 4 ;2 down
|
|||
|
.word 0 ;3 zip
|
|||
|
.word 6 ;4 left
|
|||
|
.word 7 ;5 up_left
|
|||
|
.word 5 ;6 down_left
|
|||
|
.word 0 ;7 zip
|
|||
|
.word 2 ;8 right
|
|||
|
.word 1 ;9 up_right
|
|||
|
.word 3 ;10 down_right
|
|||
|
.word 0 ;11 zip
|
|||
|
.word 0 ;12 zip
|
|||
|
.word 0 ;13 zip
|
|||
|
.word 0 ;14 zip
|
|||
|
.word 0 ;15 zip
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBRP init_joystat
|
|||
|
|
|||
|
clr a0
|
|||
|
|
|||
|
move a0,@round_tickcount
|
|||
|
|
|||
|
movi wrest_joystat,a1
|
|||
|
movi 16*NUM_WRES,a2
|
|||
|
#clr_loop
|
|||
|
move a0,*a1+,L
|
|||
|
dsj a2,#clr_loop
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* count active wrestler processes. Clear reduce_bog if there's two, set if
|
|||
|
* there's more
|
|||
|
|
|||
|
SUBR init_reduce_bog
|
|||
|
|
|||
|
movi process_ptrs,a0
|
|||
|
movi NUM_WRES,a1
|
|||
|
clr a2
|
|||
|
#lp move *a0+,a14,L
|
|||
|
jrz #nxt
|
|||
|
inc a2 ;got one.
|
|||
|
#nxt dsj a1,#lp
|
|||
|
|
|||
|
;a2 is active wrestlers. sub 2 and stick it in reduce_bog
|
|||
|
subk 2,a2
|
|||
|
move a2,@reduce_bog
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBRP update_joystat
|
|||
|
|
|||
|
move @HALT,a0
|
|||
|
jrnz #exit
|
|||
|
|
|||
|
; move a13,a0
|
|||
|
; calla wres_get_stick_val_cur
|
|||
|
move *a13(STICK_VAL_CUR),a0
|
|||
|
movk 1100b,a8 ;mask out left & right
|
|||
|
and a0,a8
|
|||
|
sll 10-2,a8 ;shift to bit 10 & 11
|
|||
|
|
|||
|
move *a13(FACING_DIR),a14
|
|||
|
btst MOVE_LEFT_BIT,a14
|
|||
|
jrz #no_flip
|
|||
|
X16 a0
|
|||
|
addi #xflip_table,a0
|
|||
|
move *a0,a0 ;flipped based on facing
|
|||
|
#no_flip
|
|||
|
or a0,a8 ;real L/R | flipped joy dirs
|
|||
|
|
|||
|
|
|||
|
move a13,a0
|
|||
|
calla wres_get_stick_val_up
|
|||
|
move a0,a4
|
|||
|
move a13,a0
|
|||
|
calla wres_get_stick_val_down
|
|||
|
or a4,a0
|
|||
|
jrz #no_stick
|
|||
|
|
|||
|
move a8,a4 ;cur (flipped) stick vals
|
|||
|
jrz #no_stick
|
|||
|
|
|||
|
callr #insert
|
|||
|
|
|||
|
#no_stick
|
|||
|
|
|||
|
move a13,a0
|
|||
|
calla wres_get_but_val_down
|
|||
|
move a0,a6
|
|||
|
jrz #no_button
|
|||
|
X16 a6
|
|||
|
|
|||
|
movk 5,a5 ;5 button bits
|
|||
|
movk 10000b,a7 ;1st bit << 4 (to skip 4 joy bits)
|
|||
|
#bit_loop
|
|||
|
move a6,a0
|
|||
|
and a7,a0 ;button down?
|
|||
|
jrz #skip
|
|||
|
move a0,a4
|
|||
|
or a8,a4 ;+ cur (flipped) stick vals
|
|||
|
callr #insert ;only 1 button per entry
|
|||
|
#skip
|
|||
|
sll 1,a7
|
|||
|
dsj a5,#bit_loop
|
|||
|
|
|||
|
#no_button
|
|||
|
|
|||
|
#exit
|
|||
|
rets
|
|||
|
|
|||
|
#insert
|
|||
|
move @round_tickcount,a0
|
|||
|
sll 16,a0
|
|||
|
or a0,a4
|
|||
|
|
|||
|
move *a13(PLYRNUM),a0
|
|||
|
sll 5+4,a0 ;PLYRNUM x32 x16
|
|||
|
|
|||
|
addi wrest_joystat + 32*15,a0 ;2nd last entry (after pre-dec)
|
|||
|
move a0,a1
|
|||
|
addk 32,a1 ;last entry (after pre-dec)
|
|||
|
|
|||
|
movk 15,a2 ;# entries - 1
|
|||
|
#move_loop
|
|||
|
move -*a0,-*a1,L ;move each entry down
|
|||
|
dsj a2,#move_loop ;1 position
|
|||
|
|
|||
|
move a4,*a0,L ;time stamp : joy & buttons
|
|||
|
rets
|
|||
|
|
|||
|
#xflip_table ;convert to forward / away if facing left
|
|||
|
.word 0 ;0
|
|||
|
.word J_UP ;1
|
|||
|
.word J_DOWN ;2
|
|||
|
.word 0 ;3
|
|||
|
.word J_TOWARD ;4
|
|||
|
.word J_UP_TOWARD ;5
|
|||
|
.word J_DOWN_TOWARD ;6
|
|||
|
.word 0 ;7
|
|||
|
.word J_AWAY ;8
|
|||
|
.word J_UP_AWAY ;9
|
|||
|
.word J_DOWN_AWAY ;10
|
|||
|
.word 0,0,0,0,0 ;11-15
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR clear_button_presses
|
|||
|
|
|||
|
movk 5,a1 ;5 buttons
|
|||
|
move a13,a2
|
|||
|
addi PUNCHB_COUNT,a2
|
|||
|
clr a0
|
|||
|
#loop
|
|||
|
move a0,*a2+
|
|||
|
dsj a1,#loop
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR count_button_presses
|
|||
|
|
|||
|
move a13,a0
|
|||
|
calla wres_get_but_val_down
|
|||
|
move a0,a0
|
|||
|
jrz #exit
|
|||
|
|
|||
|
movk 5,a1 ;5 bits
|
|||
|
move a13,a2
|
|||
|
addi PUNCHB_COUNT,a2
|
|||
|
#loop
|
|||
|
srl 1,a0 ;button-->Carry
|
|||
|
jrnc #no_but
|
|||
|
|
|||
|
move *a2,a14
|
|||
|
inc a14
|
|||
|
move a14,*a2
|
|||
|
|
|||
|
#no_but
|
|||
|
addi 16,a2
|
|||
|
dsj a1,#loop
|
|||
|
|
|||
|
#exit
|
|||
|
rets
|
|||
|
|
|||
|
; WORD PUNCHB_COUNT ;0 <------
|
|||
|
; WORD BLOCKB_COUNT ;1 keep |
|
|||
|
; WORD SPUNCHB_COUN ;2 ordered|
|
|||
|
; WORD KICK_COUNT ;3 |
|
|||
|
; WORD SKICK_COUNT ;4 <------
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR direction_test
|
|||
|
|
|||
|
.if 0
|
|||
|
;can put this in a mode
|
|||
|
.ref direction_test
|
|||
|
|
|||
|
move *a13(PLYRNUM),a8
|
|||
|
move *a13(CLOSEST_NUM),a9
|
|||
|
|
|||
|
CREATE 0,direction_test ;temp!!!!!!!!!!!
|
|||
|
|
|||
|
movi 424000h,a0
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
|
|||
|
SETMODE INAIR
|
|||
|
rets
|
|||
|
.endif
|
|||
|
|
|||
|
|
|||
|
;a8 = PLYRNUM
|
|||
|
;a9 = CLOSEST_NUM
|
|||
|
|
|||
|
move a8,*a13(PLYRNUM)
|
|||
|
move a9,*a13(CLOSEST_NUM)
|
|||
|
|
|||
|
X32 a8
|
|||
|
addi process_ptrs,a8
|
|||
|
move *a8,a10,L
|
|||
|
|
|||
|
X32 a9
|
|||
|
addi process_ptrs,a9
|
|||
|
move *a9,a11,L
|
|||
|
|
|||
|
move *a10(OBJ_XPOS),*a13(OBJ_XPOS),L
|
|||
|
move *a10(OBJ_YPOS),*a13(OBJ_YPOS),L
|
|||
|
move *a10(OBJ_ZPOS),*a13(OBJ_ZPOS),L
|
|||
|
|
|||
|
|
|||
|
|
|||
|
move *a10(OBJ_XPOS),a0,L
|
|||
|
move *a11(OBJ_XPOS),a1,L
|
|||
|
sub a0,a1
|
|||
|
movi TSEC,a0
|
|||
|
divs a0,a1 ;a1 / a0
|
|||
|
move a1,*a13(OBJ_XVEL),L
|
|||
|
|
|||
|
|
|||
|
move *a10(OBJ_ZPOS),a0,L
|
|||
|
move *a11(OBJ_ZPOS),a1,L
|
|||
|
sub a0,a1
|
|||
|
movi TSEC,a0
|
|||
|
divs a0,a1 ;a1 / a0
|
|||
|
move a1,*a13(OBJ_ZVEL),L
|
|||
|
|
|||
|
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(OBJ_YVEL),L
|
|||
|
|
|||
|
; move a0,*a13(OBJ_XVEL),L
|
|||
|
; move a0,*a13(OBJ_ZVEL),L
|
|||
|
|
|||
|
clr a0 ;x pos
|
|||
|
clr a1 ;y pos
|
|||
|
movi D2ST2B03,a2 ;* image
|
|||
|
movk 20,a3 ;z pos
|
|||
|
movi DMAWNZ|M_3D,a4 ;DMA flags
|
|||
|
move a4,*a13(OBJ_CONTROL)
|
|||
|
clr a5 ;object ID
|
|||
|
clr a6 ;x vel
|
|||
|
clr a7 ;y vel
|
|||
|
calla BEGINOBJ
|
|||
|
|
|||
|
movi TSEC,a0
|
|||
|
#loop
|
|||
|
PUSHP a0
|
|||
|
|
|||
|
;velocity add
|
|||
|
move *a13(OBJ_XPOS),a0,L
|
|||
|
move *a13(OBJ_XVEL),a1,L
|
|||
|
add a1,a0
|
|||
|
move a0,*a13(OBJ_XPOS),L
|
|||
|
|
|||
|
move *a13(OBJ_YPOS),a0,L
|
|||
|
move *a13(OBJ_YVEL),a1,L
|
|||
|
add a1,a0
|
|||
|
jrnn #yok
|
|||
|
clr a0
|
|||
|
#yok
|
|||
|
move a0,*a13(OBJ_YPOS),L
|
|||
|
|
|||
|
move *a13(OBJ_ZPOS),a0,L
|
|||
|
move *a13(OBJ_ZVEL),a1,L
|
|||
|
add a1,a0
|
|||
|
move a0,*a13(OBJ_ZPOS),L
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;image plot
|
|||
|
move *a13(OBJ_XPOS),a5,L ;x val
|
|||
|
|
|||
|
movi Y_SCALE_MULTIPLIER,a0
|
|||
|
move *a13(OBJ_ZPOSINT),a1
|
|||
|
mpys a0,a1
|
|||
|
move a1,a6 ;y val
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a7 ;flip bits & pixel ops
|
|||
|
|
|||
|
move a6,*a8(OYVAL),L ;keep updating YVAL to keep priorities
|
|||
|
|
|||
|
move a5,*a8(OXVAL),L
|
|||
|
move a6,*a8(OYVAL),L
|
|||
|
|
|||
|
movi [20,0],a1 ;z pos
|
|||
|
move a1,*a8(OZVAL),L
|
|||
|
|
|||
|
setf 6,0,0
|
|||
|
move a7,*a8(OCTRL) ;Write 6 low bits
|
|||
|
setf 16,1,0
|
|||
|
|
|||
|
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
PULLP a0
|
|||
|
dsj a0,#loop
|
|||
|
|
|||
|
calla DELOBJA8
|
|||
|
|
|||
|
DIE
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* a11 = * secret move table
|
|||
|
* a13 = * wrestler process
|
|||
|
|
|||
|
SUBR check_secret_moves
|
|||
|
|
|||
|
move *a13(IMMOBILIZE_TIME),a14
|
|||
|
jrnz #done
|
|||
|
|
|||
|
move *a13(PLYRMODE),a14
|
|||
|
cmpi MODE_DIZZY,a14
|
|||
|
jreq #done
|
|||
|
cmpi MODE_WAITANIM,a14
|
|||
|
jreq #done
|
|||
|
|
|||
|
;No secret moves if getup time is set - out of control runs, etc.
|
|||
|
move *a13(GETUP_TIME),a14
|
|||
|
jrnz #done
|
|||
|
|
|||
|
move *a11+,a0,L ;button hold test code
|
|||
|
call a0
|
|||
|
jrc #done
|
|||
|
|
|||
|
move *a13(PLYRNUM),a10
|
|||
|
sll 5+4,a10 ;PLYRNUM x32 x16
|
|||
|
addi wrest_joystat,a10
|
|||
|
|
|||
|
;only check if newest entry in queue is fresh
|
|||
|
move *a10(10h),a0 ;time stamp
|
|||
|
move @round_tickcount,a1
|
|||
|
cmp a0,a1
|
|||
|
jrne #done
|
|||
|
|
|||
|
|
|||
|
#next_table
|
|||
|
.align
|
|||
|
move *a11+,a2,L
|
|||
|
jrz #done
|
|||
|
move a10,a9
|
|||
|
|
|||
|
movk 8,a3 ;only skip 8 masked entries
|
|||
|
|
|||
|
;the first entry in the queue requires a special check...
|
|||
|
move *a2,a0 ;value
|
|||
|
move *a2(10h),a1 ;mask
|
|||
|
move *a9,a14,L
|
|||
|
andi 0ffffh,a14 ;queue head
|
|||
|
andn a1,a14 ;apply mask
|
|||
|
|
|||
|
;if the mask leaves nothing behind, then there's noise since the
|
|||
|
; final (trigger) move, so blow it off.
|
|||
|
jrz #next_table
|
|||
|
|
|||
|
#loop
|
|||
|
move *a2+,a0
|
|||
|
jrn #match
|
|||
|
move *a2+,a1 ;mask
|
|||
|
#skip
|
|||
|
|
|||
|
;check for end of table (16 entries)
|
|||
|
|
|||
|
move *a9+,a7,L
|
|||
|
move a7,a8
|
|||
|
srl 16,a7 ;round tick count
|
|||
|
andi 0ffffh,a8 ;joy+buttons
|
|||
|
andn a1,a8
|
|||
|
dsjeq a3,#skip
|
|||
|
|
|||
|
cmp a0,a8
|
|||
|
jreq #loop
|
|||
|
|
|||
|
#failed
|
|||
|
jruc #next_table
|
|||
|
|
|||
|
#done
|
|||
|
rets
|
|||
|
|
|||
|
#match
|
|||
|
;skip it if we're a zombie
|
|||
|
move *a13(STATUS_FLAGS),a14
|
|||
|
btst B_ZOMBIE,a14
|
|||
|
jrnz #done
|
|||
|
|
|||
|
andi 07fffh,a0 ;clear out sign bit
|
|||
|
move @round_tickcount,a1
|
|||
|
andi 0ffffh,a1 ;clear out sign extend
|
|||
|
sub a7,a1
|
|||
|
cmp a0,a1 ;below count?
|
|||
|
jrgt #failed
|
|||
|
|
|||
|
move *a2,a0,L ;code to execute
|
|||
|
jump a0
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* sets animations for legs & torso based on facing & move direction
|
|||
|
*
|
|||
|
|
|||
|
SUBR change_walk_anim
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(CONSECUTIVE_HITS)
|
|||
|
;Fix walking speeds!
|
|||
|
;Did I do a taunt to achieve high risk move bonus?
|
|||
|
move *a13(RISK),a14
|
|||
|
btst 15,a14
|
|||
|
jrnz #taunted
|
|||
|
clr a0
|
|||
|
move a0,*A13(RISK)
|
|||
|
#taunted
|
|||
|
move *a13(WALK_FAST),a0
|
|||
|
jrnz #fast
|
|||
|
|
|||
|
callr get_opp_process
|
|||
|
move *a0(PLYRMODE),a0 ;don't slow down if backing
|
|||
|
cmpi MODE_ONGROUND,a0 ;away from a downed opponent
|
|||
|
jrnz #notgrnd
|
|||
|
#fast
|
|||
|
movi 0cdh,a0 ;fast legs
|
|||
|
jruc #go_spd
|
|||
|
|
|||
|
#notgrnd
|
|||
|
movi 100h,a0 ;normal speed
|
|||
|
|
|||
|
#go_spd
|
|||
|
move a0,*a13(ANI_SPEED)
|
|||
|
move *a13(ANIMODE2),a0
|
|||
|
btst MODE_UNINT_BIT,a0
|
|||
|
jrnz #no_interrupt
|
|||
|
|
|||
|
move *a13(FACING_DIR),a0
|
|||
|
callr convert_facing ;(0-7)
|
|||
|
srl 1,a0 ;only uses diagonals (0-3)
|
|||
|
X4 a0
|
|||
|
move a0,a1
|
|||
|
|
|||
|
move *a13(NEW_FACING_DIR),a0
|
|||
|
callr convert_facing ;(0-7)
|
|||
|
srl 1,a0 ;only uses diagonals (0-3)
|
|||
|
add a1,a0
|
|||
|
X32 a0
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a14
|
|||
|
X32 a14
|
|||
|
addi #wres_torso_anims,a14
|
|||
|
move *a14,a14,L ;* torso anim table
|
|||
|
add a14,a0
|
|||
|
|
|||
|
move *a0,a0,L
|
|||
|
calla change_anim2 ;torso
|
|||
|
|
|||
|
#no_interrupt
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
callr convert_facing ;(0-7)
|
|||
|
X8 a0
|
|||
|
move a0,a1
|
|||
|
|
|||
|
move *a13(FACING_DIR),a0
|
|||
|
callr convert_facing ;(0-7)
|
|||
|
add a1,a0
|
|||
|
X32 a0
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a14
|
|||
|
X32 a14
|
|||
|
addi #wres_leg_anims,a14
|
|||
|
move *a14,a14,L ;* leg anim table
|
|||
|
add a14,a0
|
|||
|
|
|||
|
move *a0,a0,L ;* new animation
|
|||
|
calla change_anim1 ;legs
|
|||
|
|
|||
|
#rets rets
|
|||
|
|
|||
|
|
|||
|
.ref bam_torso_anims_table,bam_leg_anims_table
|
|||
|
.ref dnk_torso_anims_table,dnk_leg_anims_table
|
|||
|
.ref hrt_torso_anims_table,hrt_leg_anims_table
|
|||
|
.ref lex_torso_anims_table,lex_leg_anims_table
|
|||
|
.ref rzr_torso_anims_table,rzr_leg_anims_table
|
|||
|
.ref shn_torso_anims_table,shn_leg_anims_table
|
|||
|
.ref und_torso_anims_table,und_leg_anims_table
|
|||
|
.ref yok_torso_anims_table,yok_leg_anims_table
|
|||
|
|
|||
|
#wres_torso_anims
|
|||
|
.long hrt_torso_anims_table ;0 Bret Hart
|
|||
|
.long rzr_torso_anims_table ;1 Razor Ramon
|
|||
|
.long und_torso_anims_table ;2 Undertaker
|
|||
|
.long yok_torso_anims_table ;3 Yokozuna
|
|||
|
.long shn_torso_anims_table ;4 Shawn Michaels
|
|||
|
.long bam_torso_anims_table ;5 Bam Bam
|
|||
|
.long dnk_torso_anims_table ;6 Doink
|
|||
|
.long dnk_torso_anims_table ;7 spare
|
|||
|
.long lex_torso_anims_table ;8 Lex Luger
|
|||
|
.long 0 ;9 Referee
|
|||
|
|
|||
|
#wres_leg_anims
|
|||
|
.long hrt_leg_anims_table ;0 Bret Hart
|
|||
|
.long rzr_leg_anims_table ;1 Razor Ramon
|
|||
|
.long und_leg_anims_table ;2 Undertaker
|
|||
|
.long yok_leg_anims_table ;3 Yokozuna
|
|||
|
.long shn_leg_anims_table ;4 Shawn Michaels
|
|||
|
.long bam_leg_anims_table ;5 Bam Bam
|
|||
|
.long dnk_leg_anims_table ;6 Doink
|
|||
|
.long dnk_leg_anims_table ;7 spare
|
|||
|
.long lex_leg_anims_table ;8 Lex Luger
|
|||
|
.long 0 ;9 Referee
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* returns: A0 = rotation anim based on NEW_FACING_DIR & FACING_DIR
|
|||
|
*
|
|||
|
* goes into stance anim if already facing if NEW_FACING = FACING
|
|||
|
|
|||
|
SUBR set_rotate_anim
|
|||
|
|
|||
|
move *a13(FACING_DIR),a0
|
|||
|
calla convert_facing ;(0-7)
|
|||
|
srl 1,a0 ;only uses diagonals (0-3)
|
|||
|
X4 a0
|
|||
|
move a0,a1
|
|||
|
|
|||
|
move *a13(NEW_FACING_DIR),a0
|
|||
|
calla convert_facing ;(0-7)
|
|||
|
srl 1,a0 ;only uses diagonals (0-3)
|
|||
|
add a1,a0
|
|||
|
X32 a0
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a14
|
|||
|
X32 a14
|
|||
|
addi #wres_rotate_anims,a14
|
|||
|
move *a14,a14,L ;* rotate anim table
|
|||
|
add a14,a0
|
|||
|
|
|||
|
move *a13(NEW_FACING_DIR),a14
|
|||
|
move a14,*a13(FACING_DIR)
|
|||
|
|
|||
|
move *a0,a0,L
|
|||
|
;;; calla change_anim1
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
.ref bam_rotate_anims_table
|
|||
|
.ref dnk_rotate_anims_table
|
|||
|
.ref hrt_rotate_anims_table
|
|||
|
.ref lex_rotate_anims_table
|
|||
|
.ref rzr_rotate_anims_table
|
|||
|
.ref shn_rotate_anims_table
|
|||
|
.ref und_rotate_anims_table
|
|||
|
.ref yok_rotate_anims_table
|
|||
|
|
|||
|
#wres_rotate_anims
|
|||
|
.long hrt_rotate_anims_table ;0 Bret Hart
|
|||
|
.long rzr_rotate_anims_table ;1 Razor Ramon
|
|||
|
.long und_rotate_anims_table ;2 Undertaker
|
|||
|
.long yok_rotate_anims_table ;3 Yokozuna
|
|||
|
.long shn_rotate_anims_table ;4 Shawn Michaels
|
|||
|
.long bam_rotate_anims_table ;5 Bam Bam
|
|||
|
.long dnk_rotate_anims_table ;6 Doink
|
|||
|
.long dnk_rotate_anims_table ;7 spare
|
|||
|
.long lex_rotate_anims_table ;8 Lex Luger
|
|||
|
.long 0 ;9 Referee
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR bounce_off_ropes
|
|||
|
|
|||
|
|
|||
|
move *a13(INRING),a0
|
|||
|
jrnz #outside
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a14
|
|||
|
X16 a14
|
|||
|
addi #bounce_xoffsets,a14
|
|||
|
move *a14,a14
|
|||
|
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
btst PLAYER_RIGHT_BIT,a0
|
|||
|
jrnz #right
|
|||
|
;#left
|
|||
|
movi vln_left_rope,a6
|
|||
|
callr calc_line_x
|
|||
|
sub a14,a0
|
|||
|
move *a13(OBJ_COLLX1),a1
|
|||
|
cmp a0,a1 ;a0-a1
|
|||
|
jrle #bounce
|
|||
|
rets
|
|||
|
|
|||
|
#right
|
|||
|
movi vln_right_rope,a6
|
|||
|
callr calc_line_x
|
|||
|
add a14,a0
|
|||
|
move *a13(OBJ_COLLX2),a1
|
|||
|
cmp a0,a1 ;a0-a1
|
|||
|
jrle #no_bounce
|
|||
|
|
|||
|
#bounce
|
|||
|
;;; move a0,*a13(OBJ_XPOSINT)
|
|||
|
|
|||
|
|
|||
|
MOVE *A13(GETUP_TIME),A0
|
|||
|
JRNZ ALREADY_DONE_RISK_MESS
|
|||
|
|
|||
|
move *a13(RISK),A0
|
|||
|
JRNZ ALREADY_DONE_RISK_MESS
|
|||
|
|
|||
|
;Time to execute high-risk move!
|
|||
|
MOVI 60,A0
|
|||
|
MOVE A0,*A13(RISK)
|
|||
|
|
|||
|
ALREADY_DONE_RISK_MESS
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a14
|
|||
|
X32 a14
|
|||
|
addi #bounce_anims,a14
|
|||
|
move *a14,a0,L ;* bounce anim
|
|||
|
calla change_anim1a
|
|||
|
SETMODE BOUNCING
|
|||
|
|
|||
|
#no_bounce
|
|||
|
#outside
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
.ref bam_bounce_anim
|
|||
|
.ref dnk_bounce_anim
|
|||
|
.ref hrt_bounce_anim
|
|||
|
.ref lex_bounce_anim
|
|||
|
.ref rzr_bounce_anim
|
|||
|
.ref shn_bounce_anim
|
|||
|
.ref und_bounce_anim
|
|||
|
.ref yok_bounce_anim
|
|||
|
|
|||
|
#bounce_xoffsets
|
|||
|
.word -20 ;0 Bret Hart
|
|||
|
.word -20 ;1 Razor Ramon
|
|||
|
.word -20 ;2 Undertaker
|
|||
|
.word -20 ;3 Yokozuna
|
|||
|
.word 0 ;4 Shawn Michaels
|
|||
|
.word -30 ;5 Bam Bam
|
|||
|
.word -20 ;6 Doink
|
|||
|
.word -20 ;7 spare
|
|||
|
.word -20 ;8 Lex Luger
|
|||
|
.word 0 ;9 Referee
|
|||
|
|
|||
|
#bounce_anims
|
|||
|
.long hrt_bounce_anim ;0 Bret Hart
|
|||
|
.long rzr_bounce_anim ;1 Razor Ramon
|
|||
|
.long und_bounce_anim ;2 Undertaker
|
|||
|
.long yok_bounce_anim ;3 Yokozuna
|
|||
|
.long shn_bounce_anim ;4 Shawn Michaels
|
|||
|
.long bam_bounce_anim ;5 Bam Bam
|
|||
|
.long dnk_bounce_anim ;6 Doink
|
|||
|
.long dnk_bounce_anim ;7 spare
|
|||
|
.long lex_bounce_anim ;8 Lex Luger
|
|||
|
.long dnk_bounce_anim ;9 Referee
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR execute_walk
|
|||
|
|
|||
|
;Do a step sound every 32 ticks if we're walking. (whether or not
|
|||
|
; INTURN bit is set)
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
JRZ NO_SOUND_CALL
|
|||
|
MOVE @PCNT,A0
|
|||
|
ANDI 31,A0
|
|||
|
JRNZ NO_SOUND_CALL
|
|||
|
CALLA WALK_SOUND
|
|||
|
NO_SOUND_CALL
|
|||
|
|
|||
|
;if our INTURN bit is set, we're doing a turn and we shouldn't do
|
|||
|
; anything here -- treat it like UNINT.
|
|||
|
|
|||
|
move *a13(ANIMODE),a14
|
|||
|
btst MODE_INTURN_BIT,a14
|
|||
|
jrnz #inturn
|
|||
|
|
|||
|
move *a13(ANIMODE2),a14
|
|||
|
btst MODE_INTURN_BIT,a14
|
|||
|
jrnz #inturn
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(ATTACK_TYPE)
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
|
|||
|
X32 a0
|
|||
|
addi #walk_table,a0
|
|||
|
move *a0,a0,L
|
|||
|
call a0
|
|||
|
|
|||
|
#rets rets
|
|||
|
|
|||
|
#inturn move *a13(MOVE_DIR),a0
|
|||
|
jrnz #rets
|
|||
|
|
|||
|
;stick at rest - clear any velocity we might have lying around
|
|||
|
move a0,*a13(OBJ_XVEL),L
|
|||
|
move a0,*a13(OBJ_ZVEL),L
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#walk_table
|
|||
|
.long #zip ;0
|
|||
|
.long #up ;1
|
|||
|
.long #down ;2
|
|||
|
.long #zip ;3
|
|||
|
.long #left ;4
|
|||
|
.long #up_left ;5
|
|||
|
.long #down_left ;6
|
|||
|
.long #zip ;7
|
|||
|
.long #right ;8
|
|||
|
.long #up_right ;9
|
|||
|
.long #down_right ;10
|
|||
|
.long #zip ;11
|
|||
|
.long #zip ;12
|
|||
|
.long #zip ;13
|
|||
|
.long #zip ;14
|
|||
|
.long #zip ;15
|
|||
|
|
|||
|
|
|||
|
;All these routines set MOVE_DIR. However, the above code chooses the
|
|||
|
; routine to execute based on MOVE_DIR, so they just end up stuffing the
|
|||
|
; same value that's already there. Wuzzup wit' that? - JS
|
|||
|
|
|||
|
************
|
|||
|
#zip ;(#0)
|
|||
|
#do_stance
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
move a0,*a13(OBJ_XVEL),L
|
|||
|
move a0,*a13(OBJ_ZVEL),L
|
|||
|
|
|||
|
callr set_rotate_anim ;or stance
|
|||
|
calla change_anim1
|
|||
|
rets
|
|||
|
|
|||
|
************
|
|||
|
#up ;(#1)
|
|||
|
|
|||
|
movk MOVE_UP,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#up_right ;(#2)
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a0
|
|||
|
andni M_FLIPH,a0
|
|||
|
move a0,*a13(OBJ_CONTROL)
|
|||
|
|
|||
|
; move *a13(CAN_MOVE_DIR),a0
|
|||
|
; btst MOVE_RIGHT_BIT,a0
|
|||
|
; jrnz #up
|
|||
|
; btst MOVE_UP_BIT,a0
|
|||
|
; jrnz #right
|
|||
|
|
|||
|
movk MOVE_UP_RIGHT,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#right ;(#3)
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a0
|
|||
|
andni M_FLIPH,a0
|
|||
|
move a0,*a13(OBJ_CONTROL)
|
|||
|
|
|||
|
movk MOVE_RIGHT,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#down_right ;(#4)
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a0
|
|||
|
andni M_FLIPH,a0
|
|||
|
move a0,*a13(OBJ_CONTROL)
|
|||
|
|
|||
|
move *a13(CAN_MOVE_DIR),a0
|
|||
|
btst MOVE_DOWN_BIT,a0
|
|||
|
jrnz #right
|
|||
|
|
|||
|
movk MOVE_DOWN_RIGHT,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#down ;(#5)
|
|||
|
|
|||
|
movk MOVE_DOWN,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#down_left ;(#6)
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a0
|
|||
|
ori M_FLIPH,a0
|
|||
|
move a0,*a13(OBJ_CONTROL)
|
|||
|
|
|||
|
move *a13(CAN_MOVE_DIR),a0
|
|||
|
btst MOVE_DOWN_BIT,a0
|
|||
|
jrnz #left
|
|||
|
|
|||
|
movk MOVE_DOWN_LEFT,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#left ;(#7)
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a0
|
|||
|
ori M_FLIPH,a0
|
|||
|
move a0,*a13(OBJ_CONTROL)
|
|||
|
|
|||
|
movk MOVE_LEFT,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
************
|
|||
|
#up_left ;(#8)
|
|||
|
|
|||
|
move *a13(OBJ_CONTROL),a0
|
|||
|
ori M_FLIPH,a0
|
|||
|
move a0,*a13(OBJ_CONTROL)
|
|||
|
|
|||
|
; move *a13(CAN_MOVE_DIR),a0
|
|||
|
; btst MOVE_LEFT_BIT,a0
|
|||
|
; jrnz #up
|
|||
|
; btst MOVE_UP_BIT,a0
|
|||
|
; jrnz #left
|
|||
|
|
|||
|
movk MOVE_UP_LEFT,a0
|
|||
|
move a0,*a13(MOVE_DIR)
|
|||
|
|
|||
|
callr set_velocities
|
|||
|
callr change_walk_anim
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* sets X & Z velocites based on MOVE_DIR
|
|||
|
*
|
|||
|
|
|||
|
;MULT equ 256*75/100 ;25% reduction when moving backward
|
|||
|
|
|||
|
|
|||
|
;MULT equ 256*100/100 ;0% reduction when moving backward
|
|||
|
MULT equ 256*90/100 ;10% reduction when moving backward
|
|||
|
GRND_MULT equ 256*150/100 ;50% addition when opponent is on ground
|
|||
|
|
|||
|
|
|||
|
SUBRP set_velocities
|
|||
|
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a0
|
|||
|
callr convert_facing
|
|||
|
X64 a0
|
|||
|
|
|||
|
move *a13(WRESTLERNUM),a2
|
|||
|
X32 a2
|
|||
|
addi #wres_velocity_tables,a2
|
|||
|
|
|||
|
move *a2,a2,L ;* velocity table
|
|||
|
add a0,a2
|
|||
|
move *a2+,a1,L
|
|||
|
|
|||
|
move *a13(WALK_FAST),a0
|
|||
|
jrnz #ongrnd
|
|||
|
|
|||
|
callr get_opp_process
|
|||
|
move *a0(PLYRMODE),a0 ;don't slow down if backing
|
|||
|
cmpi MODE_ONGROUND,a0 ;away from a downed opponent
|
|||
|
jreq #ongrnd
|
|||
|
|
|||
|
cmpi MODE_DEAD,a0 ;away from a dead opponent
|
|||
|
jreq #ongrnd
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a3
|
|||
|
move *a13(FACING_DIR),a4
|
|||
|
|
|||
|
move a3,a14
|
|||
|
or a4,a14
|
|||
|
andi MOVE_LEFT|MOVE_RIGHT,a14
|
|||
|
cmpi MOVE_LEFT|MOVE_RIGHT,a14 ;move opposite to facing?
|
|||
|
jrne #not_back_x
|
|||
|
|
|||
|
movi MULT,a0
|
|||
|
mpys a0,a1
|
|||
|
sra 8,a1
|
|||
|
jruc #not_back_x
|
|||
|
#ongrnd
|
|||
|
movi GRND_MULT,a0
|
|||
|
mpys a0,a1
|
|||
|
sra 8,a1
|
|||
|
|
|||
|
#not_back_x
|
|||
|
move a1,*a13(OBJ_XVEL),L
|
|||
|
|
|||
|
|
|||
|
move *a2,a1,L
|
|||
|
move a3,a14 ;move_dir
|
|||
|
or a4,a14 ;facing dir
|
|||
|
andi MOVE_UP|MOVE_DOWN,a14
|
|||
|
cmpi MOVE_UP|MOVE_DOWN,a14 ;move opposite to facing?
|
|||
|
jrne #not_back_y
|
|||
|
|
|||
|
movi MULT,a0
|
|||
|
mpys a0,a1
|
|||
|
sra 8,a1
|
|||
|
|
|||
|
#not_back_y
|
|||
|
move a1,*a13(OBJ_ZVEL),L
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
.ref bam_velocity_table
|
|||
|
.ref dnk_velocity_table
|
|||
|
.ref hrt_velocity_table
|
|||
|
.ref lex_velocity_table
|
|||
|
.ref rzr_velocity_table
|
|||
|
.ref shn_velocity_table
|
|||
|
.ref und_velocity_table
|
|||
|
.ref yok_velocity_table
|
|||
|
|
|||
|
#wres_velocity_tables
|
|||
|
.long hrt_velocity_table ;0 Bret Hart
|
|||
|
.long rzr_velocity_table ;1 Razor Ramon
|
|||
|
.long und_velocity_table ;2 Undertaker
|
|||
|
.long yok_velocity_table ;3 Yokozuna
|
|||
|
.long shn_velocity_table ;4 Shawn Michaels
|
|||
|
.long bam_velocity_table ;5 Bam Bam
|
|||
|
.long dnk_velocity_table ;6 Doink
|
|||
|
.long dnk_velocity_table ;7 spare
|
|||
|
.long lex_velocity_table ;8 Lex Luger
|
|||
|
.long 0 ;9 referee
|
|||
|
|
|||
|
|
|||
|
;#*****************************************************************************
|
|||
|
;*
|
|||
|
;* RETURNS: a0 = boundary
|
|||
|
;*
|
|||
|
; SUBRP check_move_up
|
|||
|
;
|
|||
|
; move *a13(INRING),a0
|
|||
|
; jrnz #outring
|
|||
|
;
|
|||
|
; movi RING_TOP,a0
|
|||
|
; move *a13(OBJ_ZPOSINT),a1
|
|||
|
; cmp a0,a1
|
|||
|
; jrle #fail
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#outring
|
|||
|
; movi ARENA_TOP,a0
|
|||
|
; move *a13(OBJ_ZPOSINT),a1
|
|||
|
; cmp a0,a1
|
|||
|
; jrle #fail
|
|||
|
;
|
|||
|
; movi box_matedge2,a10
|
|||
|
; callr get_box_overlap
|
|||
|
; move a1,a1 ;z overlap
|
|||
|
; jrp #fail2
|
|||
|
;
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#fail2
|
|||
|
; move *a13(OBJ_ZPOSINT),a0
|
|||
|
; dec a1
|
|||
|
; add a1,a0
|
|||
|
;
|
|||
|
;#fail
|
|||
|
; setc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#*****************************************************************************
|
|||
|
;*
|
|||
|
;* RETURNS: a0 = boundary
|
|||
|
;*
|
|||
|
; SUBRP check_move_down
|
|||
|
;
|
|||
|
; move *a13(INRING),a0
|
|||
|
; jrnz #outring
|
|||
|
;
|
|||
|
; movi RING_BOT,a0
|
|||
|
; move *a13(OBJ_ZPOSINT),a1
|
|||
|
; cmp a0,a1
|
|||
|
; jrge #fail
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#outring
|
|||
|
; movi ARENA_BOT,a0
|
|||
|
; move *a13(OBJ_ZPOSINT),a1
|
|||
|
; cmp a0,a1
|
|||
|
; jrge #fail
|
|||
|
;
|
|||
|
; movi box_matedge2,a10
|
|||
|
; callr get_box_overlap
|
|||
|
; move a1,a1 ;z overlap
|
|||
|
; jrn #fail2
|
|||
|
;
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#fail2
|
|||
|
; move *a13(OBJ_ZPOSINT),a0
|
|||
|
; inc a1
|
|||
|
; add a1,a0
|
|||
|
;#fail
|
|||
|
; setc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#*****************************************************************************
|
|||
|
;*
|
|||
|
;* RETURNS: a0 = boundary
|
|||
|
;*
|
|||
|
; SUBRP check_move_left
|
|||
|
;
|
|||
|
; move *a13(INRING),a0
|
|||
|
; jrnz #outring
|
|||
|
;
|
|||
|
; move *a13(OBJ_XPOSINT),a5
|
|||
|
; movi vln_left_rope,a6
|
|||
|
; move *a6,a0 ;x1
|
|||
|
; cmp a0,a5 ;xpos - x1
|
|||
|
; jrge #ok
|
|||
|
; callr calc_line_x
|
|||
|
; cmp a0,a5 ;xpos - a0
|
|||
|
; jrle #fail
|
|||
|
;#ok
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#outring
|
|||
|
; move *a13(OBJ_XPOSINT),a5
|
|||
|
; movi vln_left_fence,a6
|
|||
|
; move *a6,a0 ;x1
|
|||
|
; cmp a0,a5 ;xpos - x1
|
|||
|
; jrge #ok2
|
|||
|
; callr calc_line_x
|
|||
|
; jrz #outrange
|
|||
|
; cmp a0,a5 ;xpos - a0
|
|||
|
; jrle #fail
|
|||
|
;#outrange
|
|||
|
;#ok2
|
|||
|
; movi box_matedge2,a10
|
|||
|
; callr get_box_overlap
|
|||
|
; move a0,a0 ;x overlap
|
|||
|
; jrp #fail2
|
|||
|
;
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#fail2
|
|||
|
; move *a13(OBJ_XPOSINT),a1
|
|||
|
; dec a0
|
|||
|
; add a1,a0
|
|||
|
;#fail
|
|||
|
; setc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#*****************************************************************************
|
|||
|
;*
|
|||
|
;* RETURNS: a0 = boundary
|
|||
|
;*
|
|||
|
; SUBRP check_move_right
|
|||
|
;
|
|||
|
; move *a13(INRING),a0
|
|||
|
; jrnz #outring
|
|||
|
;
|
|||
|
; move *a13(OBJ_XPOSINT),a5
|
|||
|
; movi vln_right_rope,a6
|
|||
|
; move *a6,a0 ;x1
|
|||
|
; cmp a0,a5 ;xpos - x1
|
|||
|
; jrle #ok
|
|||
|
; callr calc_line_x
|
|||
|
; cmp a0,a5 ;xpos - a0
|
|||
|
; jrge #fail
|
|||
|
;#ok
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#outring
|
|||
|
; move *a13(OBJ_XPOSINT),a5
|
|||
|
; movi vln_right_fence,a6
|
|||
|
; move *a6,a0 ;x1
|
|||
|
; cmp a0,a5 ;xpos - x1
|
|||
|
; jrle #ok2
|
|||
|
; callr calc_line_x
|
|||
|
; jrz #outrange
|
|||
|
; cmp a0,a5 ;xpos - a0
|
|||
|
; jrge #fail
|
|||
|
;#ok2
|
|||
|
;#outrange
|
|||
|
; movi box_matedge2,a10
|
|||
|
; callr get_box_overlap
|
|||
|
; move a0,a0 ;x overlap
|
|||
|
; jrn #fail2
|
|||
|
;
|
|||
|
; clrc
|
|||
|
; rets
|
|||
|
;
|
|||
|
;#fail2
|
|||
|
; move *a13(OBJ_XPOSINT),a1
|
|||
|
; inc a0
|
|||
|
; add a1,a0
|
|||
|
;#fail
|
|||
|
; setc
|
|||
|
; rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* ARGS: a10 = * box
|
|||
|
*
|
|||
|
* RETURNS: a0 = signed x offset (left overlap < 0 < right overlap)
|
|||
|
* a1 = signed z offset (top overlap < 0 < bot overlap)
|
|||
|
|
|||
|
SUBR get_box_overlap
|
|||
|
|
|||
|
|
|||
|
move *a10(20h),a6,L
|
|||
|
callr calc_line_x
|
|||
|
move a0,a0
|
|||
|
jrz #outrange
|
|||
|
PUSH a0
|
|||
|
|
|||
|
move *a10,a6,L
|
|||
|
callr calc_line_x
|
|||
|
move a0,a0 ;left
|
|||
|
jrz #outrange
|
|||
|
PULL a1 ;right
|
|||
|
|
|||
|
move *a13(OBJ_XPOSINT),a4
|
|||
|
sub a4,a0 ;left-xpos
|
|||
|
jrgt #outside
|
|||
|
neg a0
|
|||
|
|
|||
|
sub a4,a1 ;right-xpos
|
|||
|
jrlt #outside
|
|||
|
|
|||
|
move *a13(OBJ_ZPOSINT),a2
|
|||
|
move a2,a3
|
|||
|
move *a6(10h),a4 ;z top
|
|||
|
sub a4,a2 ;zpos-top
|
|||
|
jrlt #outside
|
|||
|
|
|||
|
move *a6(30h),a4 ;z bot
|
|||
|
sub a4,a3 ;zpos-bot
|
|||
|
jrgt #outside
|
|||
|
neg a3
|
|||
|
|
|||
|
|
|||
|
|
|||
|
cmp a0,a1 ;right - left
|
|||
|
jrlt #right_min
|
|||
|
|
|||
|
;left_min
|
|||
|
cmp a2,a0 ;left - top
|
|||
|
jrgt #top_min
|
|||
|
cmp a3,a0 ;left - bot
|
|||
|
jrgt #bot_min
|
|||
|
|
|||
|
neg a0 ;xoff
|
|||
|
clr a1 ;zoff
|
|||
|
rets
|
|||
|
|
|||
|
#right_min
|
|||
|
cmp a2,a1 ;right - top
|
|||
|
jrgt #top_min
|
|||
|
cmp a3,a1 ;right - bot
|
|||
|
jrgt #bot_min
|
|||
|
|
|||
|
move a1,a0 ;xoff
|
|||
|
clr a1 ;zoff
|
|||
|
rets
|
|||
|
|
|||
|
#top_min
|
|||
|
cmp a3,a2 ;top - bot
|
|||
|
jrgt #bot_min
|
|||
|
|
|||
|
neg a2
|
|||
|
move a2,a1 ;zoff
|
|||
|
clr a0 ;xoff
|
|||
|
rets
|
|||
|
|
|||
|
#bot_min
|
|||
|
cmp a2,a3 ;bot - top
|
|||
|
jrgt #top_min
|
|||
|
|
|||
|
move a3,a1 ;zoff
|
|||
|
clr a0 ;xoff
|
|||
|
rets
|
|||
|
|
|||
|
#outside
|
|||
|
#outrange
|
|||
|
clr a0
|
|||
|
clr a1
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR get_rope_x
|
|||
|
|
|||
|
PUSH a6
|
|||
|
|
|||
|
movi vln_right_rope,a6
|
|||
|
move *a13(OBJ_XPOSINT),a0
|
|||
|
cmpi RING_X_CENTER,a0
|
|||
|
jrgt #right
|
|||
|
movi vln_left_rope,a6
|
|||
|
#right
|
|||
|
callr calc_line_x
|
|||
|
PULL a6
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* ARGUMENTS: a6 = * line table
|
|||
|
*
|
|||
|
* RETURNS: a0 = x-val of line at player ZPOS
|
|||
|
* a0 = 0 if out of range in Z
|
|||
|
*
|
|||
|
* TRASHES: a0,a1
|
|||
|
|
|||
|
|
|||
|
SUBR calc_line_x
|
|||
|
|
|||
|
move *a13(OBJ_ZPOSINT),a1
|
|||
|
|
|||
|
move *a6(30h),a0 ;z2
|
|||
|
cmp a0,a1 ;zpos - z2
|
|||
|
jrgt #outrange ;below
|
|||
|
|
|||
|
move *a6(10h),a0 ;z1
|
|||
|
sub a0,a1 ;zpos - z1
|
|||
|
jrlt #outrange ;above
|
|||
|
|
|||
|
X16 a1
|
|||
|
add a6,a1
|
|||
|
move *a1(40h),a0 ;skip 4 word header
|
|||
|
rets
|
|||
|
#outrange
|
|||
|
clr a0
|
|||
|
rets
|
|||
|
|
|||
|
SUBR set_up_line_tables
|
|||
|
movi vln_right_rope_r,a1
|
|||
|
movi vln_right_rope,a0
|
|||
|
callr setup_each_right_table
|
|||
|
movi vln_left_rope_r,a1
|
|||
|
movi vln_left_rope,a0
|
|||
|
callr setup_each_left_table
|
|||
|
movi vln_right_matedge_r,a1
|
|||
|
movi vln_right_matedge,a0
|
|||
|
callr setup_each_right_table
|
|||
|
movi vln_left_matedge_r,a1
|
|||
|
movi vln_left_matedge,a0
|
|||
|
callr setup_each_left_table
|
|||
|
movi vln_right_matedge2_r,a1
|
|||
|
movi vln_right_matedge2,a0
|
|||
|
callr setup_each_right_table
|
|||
|
movi vln_left_matedge2_r,a1
|
|||
|
movi vln_left_matedge2,a0
|
|||
|
callr setup_each_left_table
|
|||
|
movi vln_right_fence_r,a1
|
|||
|
movi vln_right_fence,a0
|
|||
|
callr setup_each_right_table
|
|||
|
movi vln_left_fence_r,a1
|
|||
|
movi vln_left_fence,a0
|
|||
|
|
|||
|
setup_each_left_table
|
|||
|
move *a1(0),*a0+,L
|
|||
|
move *a1(020h),*a0+,L
|
|||
|
move *a1(040h),a2
|
|||
|
inc a2
|
|||
|
move *a1(050h),a3
|
|||
|
move *a1(0h),a4
|
|||
|
sll 16,a4
|
|||
|
move a2,a7
|
|||
|
sll 16,a3
|
|||
|
divs a7,a3
|
|||
|
#write_next_val_l
|
|||
|
sub a3,a4
|
|||
|
move a4,a6
|
|||
|
srl 16,a6
|
|||
|
move a6,*a0+
|
|||
|
dsjs a2,#write_next_val_l
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
setup_each_right_table
|
|||
|
move *a1(0),*a0+,L
|
|||
|
move *a1(020h),*a0+,L
|
|||
|
move *a1(040h),a2
|
|||
|
inc a2
|
|||
|
move *a1(050h),a3
|
|||
|
move *a1(0h),a4
|
|||
|
sll 16,a3
|
|||
|
sll 16,a4
|
|||
|
move a2,a7
|
|||
|
divs a7,a3
|
|||
|
#write_next_val
|
|||
|
add a3,a4
|
|||
|
move a4,a6
|
|||
|
srl 16,a6
|
|||
|
move a6,*a0+
|
|||
|
dsjs a2,#write_next_val
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* ARGUMENTS: a6 = * line table
|
|||
|
* a1 = ZPOSINT
|
|||
|
*
|
|||
|
* RETURNS: a0 = x-val of line at input ZPOS
|
|||
|
* a0 = 0 if out of range in Z
|
|||
|
*
|
|||
|
* TRASHES: a0,a1
|
|||
|
|
|||
|
|
|||
|
SUBR calc_line_pt
|
|||
|
|
|||
|
move *a6(30h),a0 ;z2
|
|||
|
cmp a0,a1 ;zpos - z2
|
|||
|
jrgt #outrange ;below
|
|||
|
|
|||
|
move *a6(10h),a0 ;z1
|
|||
|
sub a0,a1 ;zpos - z1
|
|||
|
jrlt #outrange ;above
|
|||
|
|
|||
|
X16 a1
|
|||
|
add a6,a1
|
|||
|
move *a1(40h),a0 ;skip 4 word header
|
|||
|
rets
|
|||
|
#outrange
|
|||
|
clr a0
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
|
|||
|
SUBR wobble_ropes
|
|||
|
|
|||
|
;Called from wrestler "GETTING HIT" sequences.
|
|||
|
;Check to see if I'm up against the ropes.
|
|||
|
;If so, wobble them.
|
|||
|
|
|||
|
move *a13(INRING),a0
|
|||
|
jrnz #exit
|
|||
|
|
|||
|
move *a13(OBJ_XPOSINT),a0
|
|||
|
cmpi RING_X_CENTER,a0
|
|||
|
jrlt #lft
|
|||
|
|
|||
|
movi vln_right_rope,a6
|
|||
|
callr calc_line_x
|
|||
|
movk ROPE_RIGHT,a2
|
|||
|
move *a13(OBJ_XPOSINT),a1
|
|||
|
cmp a0,a1 ;a1-a0
|
|||
|
jrge #wobble
|
|||
|
jruc #exit
|
|||
|
|
|||
|
#lft
|
|||
|
movi vln_left_rope,a6
|
|||
|
callr calc_line_x
|
|||
|
movk ROPE_LEFT,a2
|
|||
|
move *a13(OBJ_XPOSINT),a1
|
|||
|
cmp a0,a1 ;a1-a0
|
|||
|
jrle #wobble
|
|||
|
jruc #exit
|
|||
|
|
|||
|
#wobble
|
|||
|
|
|||
|
;Wrestler has been knocked back into ropes
|
|||
|
;Wobble them!
|
|||
|
move a2,a0
|
|||
|
movk 1,a2
|
|||
|
movk ROPE_BOUNCEIO,a1
|
|||
|
calla rope_command
|
|||
|
|
|||
|
#exit rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* If player is moving away from opponent, or standing still, tell the
|
|||
|
* calling SEQUENCE to not leap at the opponent!
|
|||
|
*
|
|||
|
* This routine is used by all wrestlers.
|
|||
|
|
|||
|
SUBR get_leap
|
|||
|
|
|||
|
move *a13(ANIMODE),a1
|
|||
|
andni MODE_STATUS,a1
|
|||
|
move a1,*a13(ANIMODE)
|
|||
|
|
|||
|
move *a13(OBJ_XVEL),a14,L
|
|||
|
move *a13(OBJ_ZVEL),a0,L
|
|||
|
or a14,a0
|
|||
|
jrz #novel ;Wrestler is standing still!
|
|||
|
|
|||
|
|
|||
|
;Is wrestler backing away from opponent?
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a1
|
|||
|
move *a13(NEW_FACING_DIR),a0 ;Current facing dir (9,10,6,5 only)
|
|||
|
sll 5,a0
|
|||
|
addi mv_tbl,a0
|
|||
|
move *a0,a0,L
|
|||
|
btst a0,a1
|
|||
|
jrnz #novel
|
|||
|
|
|||
|
;Will lunge toward opponent
|
|||
|
rets
|
|||
|
|
|||
|
#novel
|
|||
|
move *a13(ANIMODE),a0
|
|||
|
ori MODE_STATUS,a0
|
|||
|
move a0,*a13(ANIMODE)
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
*****************************************************************************
|
|||
|
*
|
|||
|
* If player is moving away from opponent, or standing still, tell the
|
|||
|
* calling routine to ignore button press
|
|||
|
*
|
|||
|
|
|||
|
SUBR ck_ignore
|
|||
|
|
|||
|
;Is wrestler going away from opponent?
|
|||
|
|
|||
|
move *a13(MOVE_DIR),a1
|
|||
|
move *a13(NEW_FACING_DIR),a0 ;Current facing dir (9,10,6,5 only)
|
|||
|
sll 5,a0
|
|||
|
addi mv_tbl,a0
|
|||
|
move *a0,a0,L
|
|||
|
btst a0,a1
|
|||
|
jrnz #novel2
|
|||
|
|
|||
|
;Will allow button press
|
|||
|
clrc
|
|||
|
rets
|
|||
|
|
|||
|
#novel2 setc
|
|||
|
rets
|
|||
|
|
|||
|
mv_tbl .long 0,0,0,0,0,MOVE_RIGHT_BIT,MOVE_RIGHT_BIT
|
|||
|
.long 0,0,MOVE_LEFT_BIT,MOVE_LEFT_BIT
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* If player is moving away from opponent, or standing still, tell the
|
|||
|
* calling routine to ignore button press
|
|||
|
*
|
|||
|
|
|||
|
SUBR ck_ignore_a8
|
|||
|
|
|||
|
;Is wrestler going away from opponent?
|
|||
|
|
|||
|
move *a8(MOVE_DIR),a1
|
|||
|
move *a8(NEW_FACING_DIR),a0 ;Current facing dir (9,10,6,5 only)
|
|||
|
sll 5,a0
|
|||
|
addi mv_tbl,a0
|
|||
|
move *a0,a0,L
|
|||
|
btst a0,a1
|
|||
|
jrnz #novel2
|
|||
|
|
|||
|
;Will allow button press
|
|||
|
clrc
|
|||
|
rets
|
|||
|
|
|||
|
#novel2 setc
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* When we want all ropes to wobble (Butt drops, etc.)
|
|||
|
* This routine is used by all wrestlers.
|
|||
|
|
|||
|
SUBR shake_all_ropes
|
|||
|
|
|||
|
; move @NUM_OPPS,A1
|
|||
|
; CMPI 2,A1
|
|||
|
; JRGE NO_SHAKING
|
|||
|
|
|||
|
movi ROPE_BOUNCEUD,a1
|
|||
|
movk 2,a2
|
|||
|
|
|||
|
movi ROPE_FRONT,a0
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movk ROPE_BACK,a0
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movk ROPE_LEFT,a0
|
|||
|
calla rope_command
|
|||
|
|
|||
|
movk ROPE_RIGHT,a0
|
|||
|
calla rope_command
|
|||
|
|
|||
|
NO_SHAKING
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* CALLED FROM WITHIN COLLISION ROUTINES
|
|||
|
*
|
|||
|
* makes wrestlers face each other & sets x_flip accordingly
|
|||
|
*
|
|||
|
* a13 = victim process
|
|||
|
* a10 = attacker process
|
|||
|
|
|||
|
SUBR face_each_other
|
|||
|
|
|||
|
movk MOVE_RIGHT,a0
|
|||
|
move *a13(OBJ_XPOS),a2,L
|
|||
|
move *a10(OBJ_XPOS),a3,L
|
|||
|
cmp a2,a3 ;a3-a2
|
|||
|
jrgt #right
|
|||
|
movk MOVE_LEFT,a0
|
|||
|
#right
|
|||
|
movk MOVE_DOWN,a1
|
|||
|
move *a13(OBJ_ZPOS),a2,L
|
|||
|
move *a10(OBJ_ZPOS),a3,L
|
|||
|
cmp a2,a3 ;a3-a2
|
|||
|
jrgt #down
|
|||
|
movk MOVE_UP,a1
|
|||
|
#down
|
|||
|
or a1,a0
|
|||
|
move a0,*a13(NEW_FACING_DIR)
|
|||
|
move a0,*a13(FACING_DIR)
|
|||
|
|
|||
|
xori MOVE_UP|MOVE_DOWN|MOVE_LEFT|MOVE_RIGHT,a0 ;opposite
|
|||
|
|
|||
|
move a0,*a10(NEW_FACING_DIR)
|
|||
|
move a0,*a10(FACING_DIR)
|
|||
|
|
|||
|
move a10,a0
|
|||
|
callr set_wrestler_xflip
|
|||
|
|
|||
|
move a13,a0
|
|||
|
callr set_wrestler_xflip
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* Resets all special move processes by writing their SM_RESET_ADDRESSes
|
|||
|
* to their PWAKEs, and setting their PTIMEs to 1.
|
|||
|
|
|||
|
SUBR reset_smoves
|
|||
|
|
|||
|
movi ACTIVE,a0
|
|||
|
movk 1,a1
|
|||
|
#lp0 move *a0,a0,L
|
|||
|
jrz #done
|
|||
|
move *a0(PROCID),a14
|
|||
|
cmpi SMOVE_PID,a14
|
|||
|
jrne #lp0
|
|||
|
|
|||
|
move *a0(SM_RESET_ADDRESS),*a0(PWAKE),L
|
|||
|
move a1,*a0(PTIME)
|
|||
|
jruc #lp0
|
|||
|
|
|||
|
#done rets
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* This is a final pass at confining the wrestlers and it's just about the
|
|||
|
* last thing that happens every frame, certain to run after both wrestler
|
|||
|
* processes. It calls confine_wrestler once for each attached wrestler.
|
|||
|
*
|
|||
|
|
|||
|
SUBRP final_confine
|
|||
|
|
|||
|
movi NUM_WRES,a1
|
|||
|
movi process_ptrs,a2
|
|||
|
PUSH a13
|
|||
|
#loop
|
|||
|
move *a2+,a13,L
|
|||
|
jrz #inactive
|
|||
|
|
|||
|
move *a13(ATTACH_PROC),a0,L
|
|||
|
jrz #no_attach
|
|||
|
|
|||
|
PUSH a1,a2
|
|||
|
calla set_collision_boxes
|
|||
|
calla confine_wrestler
|
|||
|
PULL a1,a2
|
|||
|
|
|||
|
#no_attach
|
|||
|
#inactive
|
|||
|
dsj a1,#loop
|
|||
|
|
|||
|
PULL a13
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* Temp routines
|
|||
|
|
|||
|
.if DEBUG
|
|||
|
|
|||
|
BSSX CPUAVG ,16
|
|||
|
BSSX CPULEFT ,16
|
|||
|
|
|||
|
|
|||
|
SUBRP cputime_calcfree
|
|||
|
|
|||
|
move @dirqtimer,a0
|
|||
|
subk 1,a0
|
|||
|
jrle nobog
|
|||
|
clr a0
|
|||
|
jruc gottime
|
|||
|
nobog
|
|||
|
move @vcount,a0
|
|||
|
subi EOSINT,a0
|
|||
|
jrnn skinccnt
|
|||
|
addi 256,a0
|
|||
|
skinccnt
|
|||
|
sll 2,a0
|
|||
|
neg a0
|
|||
|
addi 1024,a0
|
|||
|
gottime
|
|||
|
move a0,@CPULEFT
|
|||
|
|
|||
|
srl 4,a0
|
|||
|
move @CPUAVG,a1
|
|||
|
move a1,a2
|
|||
|
srl 4,a2 ;/16
|
|||
|
sub a2,a1
|
|||
|
add a0,a1
|
|||
|
move a1,@CPUAVG
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
.endif
|
|||
|
|
|||
|
.if COL_DEBUG
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* highlights attack box
|
|||
|
* a10 is ptr to wrestler process
|
|||
|
|
|||
|
SUBR collis_debug
|
|||
|
|
|||
|
|
|||
|
clr a0 ;x pos
|
|||
|
clr a1 ;y pos
|
|||
|
movi jmeter,a2 ;* image
|
|||
|
movi >1601,a3 ;z pos
|
|||
|
movi DMACAL|M_3D,a4 ;DMA flags
|
|||
|
clr a5 ;object ID
|
|||
|
clr a6 ;x vel
|
|||
|
clr a7 ;y vel
|
|||
|
calla BEGINOBJ
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a8(ODXOFF)
|
|||
|
move a0,*a8(ODYOFF)
|
|||
|
|
|||
|
movi 0202h,a0
|
|||
|
move a0,*a8(OCONST)
|
|||
|
|
|||
|
#loop
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
movi 7f00h,a0
|
|||
|
move @debug_collis,a14
|
|||
|
cmpi 2,a14
|
|||
|
jrne #not_2
|
|||
|
movi 1400h,a0
|
|||
|
#not_2
|
|||
|
move a0,*a8(OZPOS)
|
|||
|
|
|||
|
move @debug_collis,a0
|
|||
|
jrz #off
|
|||
|
|
|||
|
move *a10(ANIMODE),a0
|
|||
|
btst MODE_CHECKHIT_BIT,a0
|
|||
|
jrnz #on
|
|||
|
|
|||
|
#off
|
|||
|
clr a0
|
|||
|
move a0,*a8(OXVAL),L
|
|||
|
move a0,*a8(OYVAL),L
|
|||
|
|
|||
|
move @slowmo,a0
|
|||
|
move a0,@slowmotion
|
|||
|
|
|||
|
movk 16,a0
|
|||
|
move a0,*a8(OSIZEX)
|
|||
|
move a0,*a8(OSIZEY)
|
|||
|
|
|||
|
jruc #loop
|
|||
|
|
|||
|
|
|||
|
#on
|
|||
|
movk 30,a0
|
|||
|
clr a0
|
|||
|
|
|||
|
move @slowmo,a1
|
|||
|
jrz #skp
|
|||
|
move a1,a0
|
|||
|
#skp
|
|||
|
move a0,@slowmotion
|
|||
|
|
|||
|
movi Y_SCALE_MULTIPLIER,a0
|
|||
|
move *a10(OBJ_ZPOSINT),a1
|
|||
|
mpys a0,a1
|
|||
|
move a1,a4 ;y val
|
|||
|
srl 16,a4
|
|||
|
move *a10(OBJ_YPOSINT),a0
|
|||
|
sub a0,a4
|
|||
|
|
|||
|
move *a10(OBJ_ATTYOFF),a0
|
|||
|
sub a0,a4
|
|||
|
move *a10(OBJ_ATTHEIGHT),a0
|
|||
|
sub a0,a4
|
|||
|
sll 16,a4
|
|||
|
move a4,*a8(OYVAL),L
|
|||
|
|
|||
|
move *a10(OBJ_ATTWIDTH),a0
|
|||
|
move a0,*a8(OSIZEX)
|
|||
|
move *a10(OBJ_ATTHEIGHT),a0
|
|||
|
move a0,*a8(OSIZEY)
|
|||
|
|
|||
|
move *a10(OBJ_ATTXOFF),a0
|
|||
|
move *a10(OBJ_XPOSINT),a4
|
|||
|
|
|||
|
;check the same way the actual collision code does.
|
|||
|
move *a10(OBJ_CONTROL),a14
|
|||
|
btst B_FLIPH,a14
|
|||
|
jrz #facing_right
|
|||
|
|
|||
|
; move *a10(FACING_DIR),a14
|
|||
|
; btst PLAYER_RIGHT_BIT,a14
|
|||
|
; jrnz #facing_right
|
|||
|
|
|||
|
neg a0
|
|||
|
move *a10(OBJ_ATTWIDTH),a14
|
|||
|
sub a14,a0
|
|||
|
|
|||
|
#facing_right
|
|||
|
|
|||
|
add a0,a4
|
|||
|
sll 16,a4
|
|||
|
move a4,*a8(OXVAL),L
|
|||
|
|
|||
|
|
|||
|
|
|||
|
jruc #loop
|
|||
|
|
|||
|
;;; move a0,@debug_collis
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
* highlights target box
|
|||
|
* a10 is ptr to wrestler process
|
|||
|
|
|||
|
SUBRP collis_debug2
|
|||
|
|
|||
|
clr a0 ;x pos
|
|||
|
clr a1 ;y pos
|
|||
|
movi jmeter,a2 ;* image
|
|||
|
movi 7f00h,a0 ;199
|
|||
|
movi DMACAL|M_3D,a4 ;DMA flags
|
|||
|
clr a5 ;object ID
|
|||
|
clr a6 ;x vel
|
|||
|
clr a7 ;y vel
|
|||
|
calla BEGINOBJ
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a8(ODXOFF)
|
|||
|
move a0,*a8(ODYOFF)
|
|||
|
|
|||
|
movi 0101h,a0
|
|||
|
move a0,*a8(OCONST)
|
|||
|
|
|||
|
#loop
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
movi >1600,a0
|
|||
|
move @debug_collis,a14
|
|||
|
cmpi 2,a14
|
|||
|
jrne #not_2
|
|||
|
movi 111,a0
|
|||
|
#not_2
|
|||
|
move a0,*a8(OZPOS)
|
|||
|
|
|||
|
move @debug_collis,a0
|
|||
|
jrnz #on
|
|||
|
|
|||
|
clr a0
|
|||
|
move a0,*a8(OXVAL),L
|
|||
|
move a0,*a8(OYVAL),L
|
|||
|
|
|||
|
movk 16,a0
|
|||
|
move a0,*a8(OSIZEX)
|
|||
|
move a0,*a8(OSIZEY)
|
|||
|
|
|||
|
jruc #loop
|
|||
|
|
|||
|
#on
|
|||
|
move *a10(OBJ_COLLX1),a0
|
|||
|
move a0,a1
|
|||
|
sll 16,a0
|
|||
|
move a0,*a8(OXVAL),L
|
|||
|
|
|||
|
move *a10(OBJ_COLLX2),a2
|
|||
|
sub a1,a2
|
|||
|
move a2,*a8(OSIZEX)
|
|||
|
|
|||
|
movi Y_SCALE_MULTIPLIER,a0
|
|||
|
move *a10(OBJ_ZPOSINT),a1
|
|||
|
mpys a0,a1
|
|||
|
srl 16,a1
|
|||
|
move *a10(OBJ_COLLY2),a0
|
|||
|
sub a0,a1
|
|||
|
sll 16,a1
|
|||
|
move a1,*a8(OYVAL),L
|
|||
|
|
|||
|
move *a10(OBJ_COLLY2),a0
|
|||
|
move *a10(OBJ_COLLY1),a1
|
|||
|
sub a1,a0
|
|||
|
move a0,*a8(OSIZEY)
|
|||
|
|
|||
|
jruc #loop
|
|||
|
|
|||
|
.endif
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
.if SCRT_DEBUG
|
|||
|
|
|||
|
.bss imgptrs0, 32*16
|
|||
|
|
|||
|
SUBRP scrt_debug
|
|||
|
|
|||
|
movk 16,a1
|
|||
|
movi imgptrs0,a2
|
|||
|
movi [10,0],a0 ;x pos
|
|||
|
#init_loop
|
|||
|
|
|||
|
PUSH a0,a1,a2
|
|||
|
|
|||
|
movi [238,0],a1 ;y pos
|
|||
|
movi d_zip,a2 ;* image
|
|||
|
movi 10000,a3 ;z pos
|
|||
|
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
|||
|
clr a5 ;object ID
|
|||
|
clr a6 ;x vel
|
|||
|
clr a7 ;y vel
|
|||
|
calla BEGINOBJ
|
|||
|
|
|||
|
PULL a0,a1,a2
|
|||
|
move a8,*a2+,L
|
|||
|
addi [16,0],a0
|
|||
|
dsj a1,#init_loop
|
|||
|
|
|||
|
#loop
|
|||
|
|
|||
|
|
|||
|
movi wrest_joystat,a1
|
|||
|
movi imgptrs0,a2
|
|||
|
movk 16,a3
|
|||
|
|
|||
|
#loop2
|
|||
|
move *a2+,a8,L
|
|||
|
move *a1+,a5,L
|
|||
|
move a5,a0
|
|||
|
|
|||
|
srl 4,a0
|
|||
|
andi 011111b,a0
|
|||
|
jrz #cont
|
|||
|
X32 a0
|
|||
|
addi #button_imgs,a0
|
|||
|
move *a0,a0,L
|
|||
|
jruc #cont2
|
|||
|
|
|||
|
#cont
|
|||
|
move a5,a0
|
|||
|
andi 01111b,a0
|
|||
|
X32 a0
|
|||
|
addi #arrow_imgs,a0
|
|||
|
move *a0,a0,L
|
|||
|
|
|||
|
#cont2
|
|||
|
|
|||
|
PUSH a1,a2,a3
|
|||
|
|
|||
|
callr #change_image
|
|||
|
|
|||
|
PULL a1,a2,a3
|
|||
|
dsj a3,#loop2
|
|||
|
|
|||
|
SLEEPK 1
|
|||
|
|
|||
|
jruc #loop
|
|||
|
|
|||
|
|
|||
|
#change_image
|
|||
|
move a0,*a8(OIMG),L
|
|||
|
move *a0(0),*a8(OSIZE),L
|
|||
|
move *a0(ISAG),*a8(OSAG),L
|
|||
|
|
|||
|
move *a0(IANIOFFX),a1
|
|||
|
move a1,*a8(ODXOFF) ;display x offset
|
|||
|
|
|||
|
move *a0(IANIOFFY),a1
|
|||
|
move a1,*a8(ODYOFF) ;display y offset
|
|||
|
|
|||
|
setf 5,0,0
|
|||
|
move *a0(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits
|
|||
|
setf 16,1,0
|
|||
|
rets
|
|||
|
|
|||
|
#arrow_imgs
|
|||
|
.long d_zip ;0
|
|||
|
.long d_up ;1
|
|||
|
.long d_down ;2
|
|||
|
.long d_zip ;3
|
|||
|
.long d_left ;4
|
|||
|
.long d_upleft ;5
|
|||
|
.long d_downleft ;6
|
|||
|
.long d_zip ;7
|
|||
|
.long d_right ;8
|
|||
|
.long d_upright ;9
|
|||
|
.long d_downright ;10
|
|||
|
.long d_zip ;11
|
|||
|
.long d_zip ;12
|
|||
|
.long d_zip ;13
|
|||
|
.long d_zip ;14
|
|||
|
.long d_zip ;15
|
|||
|
|
|||
|
|
|||
|
#button_imgs
|
|||
|
.long d_zip ;0
|
|||
|
.long d_block ;1
|
|||
|
.long d_grab ;2
|
|||
|
.long d_zip ;3
|
|||
|
.long d_punch ;4
|
|||
|
.long d_zip ;5
|
|||
|
.long d_zip ;6
|
|||
|
.long d_zip ;7
|
|||
|
.long d_kick ;8
|
|||
|
.long d_zip ;9
|
|||
|
.long d_zip ;10
|
|||
|
.long d_zip ;11
|
|||
|
.long d_zip ;12
|
|||
|
.long d_zip ;13
|
|||
|
.long d_zip ;14
|
|||
|
.long d_zip ;15
|
|||
|
.long d_turbo ;16
|
|||
|
|
|||
|
.endif
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
.if DIR_DEBUG
|
|||
|
|
|||
|
.bss imgptrs, 32*3
|
|||
|
.bss imgptrs2, 32*3
|
|||
|
|
|||
|
SUBRP dir_debug
|
|||
|
|
|||
|
movi [10,0],a0 ;x pos
|
|||
|
movi [25,0],a1 ;y pos
|
|||
|
movi d_zip,a2 ;* image
|
|||
|
movi 10000,a3 ;z pos
|
|||
|
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
|
|||
|
clr a5 ;object ID
|
|||
|
clr a6 ;x vel
|
|||
|
clr a7 ;y vel
|
|||
|
calla BEGINOBJ
|
|||
|
move a8,@imgptrs,L
|
|||
|
|
|||
|
movi [10,0],a0 ;x pos
|
|||
|
movi [25+15,0],a1 ;y pos
|
|||
|
calla BEGINOBJ
|
|||
|
move a8,@imgptrs+32,L
|
|||
|
|
|||
|
movi [10,0],a0 ;x pos
|
|||
|
movi [25+30,0],a1 ;y pos
|
|||
|
calla BEGINOBJ
|
|||
|
move a8,@imgptrs+64,L
|
|||
|
|
|||
|
|
|||
|
movi [400-24,0],a0 ;x pos
|
|||
|
movi [25,0],a1 ;y pos
|
|||
|
calla BEGINOBJ
|
|||
|
move a8,@imgptrs2,L
|
|||
|
|
|||
|
movi [400-24,0],a0 ;x pos
|
|||
|
movi [25+15,0],a1 ;y pos
|
|||
|
calla BEGINOBJ
|
|||
|
move a8,@imgptrs2+32,L
|
|||
|
|
|||
|
movi [400-24,0],a0 ;x pos
|
|||
|
movi [25+30,0],a1 ;y pos
|
|||
|
calla BEGINOBJ
|
|||
|
move a8,@imgptrs2+64,L
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#loop
|
|||
|
clr a1
|
|||
|
callr get_process_ptr
|
|||
|
|
|||
|
move a0,a10
|
|||
|
JRZ NO_ONE_HERE1
|
|||
|
|
|||
|
move *a10(MOVE_DIR),a0
|
|||
|
move @imgptrs,a8,L
|
|||
|
callr #ud_arrow
|
|||
|
|
|||
|
move *a10(NEW_FACING_DIR),a0
|
|||
|
move @imgptrs+32,a8,L
|
|||
|
callr #ud_arrow
|
|||
|
|
|||
|
move *a10(FACING_DIR),a0
|
|||
|
move @imgptrs+64,a8,L
|
|||
|
callr #ud_arrow
|
|||
|
|
|||
|
NO_ONE_HERE1
|
|||
|
movk 1,a1
|
|||
|
callr get_process_ptr
|
|||
|
move a0,a10
|
|||
|
JRZ NO_ONE_HERE2
|
|||
|
|
|||
|
move *a10(MOVE_DIR),a0
|
|||
|
move @imgptrs2,a8,L
|
|||
|
callr #ud_arrow
|
|||
|
|
|||
|
move *a10(NEW_FACING_DIR),a0
|
|||
|
move @imgptrs2+32,a8,L
|
|||
|
callr #ud_arrow
|
|||
|
|
|||
|
move *a10(FACING_DIR),a0
|
|||
|
move @imgptrs2+64,a8,L
|
|||
|
callr #ud_arrow
|
|||
|
|
|||
|
NO_ONE_HERE2
|
|||
|
SLEEPK 1
|
|||
|
jruc #loop
|
|||
|
|
|||
|
|
|||
|
#ud_arrow
|
|||
|
move a0,a0
|
|||
|
jrnz #ok
|
|||
|
movi d_zip,a0
|
|||
|
jruc #cont
|
|||
|
#ok
|
|||
|
callr convert_facing
|
|||
|
X32 a0
|
|||
|
addi #arrow_imgs,a0
|
|||
|
move *a0,a0,L
|
|||
|
|
|||
|
#cont
|
|||
|
move a0,*a8(OIMG),L
|
|||
|
move *a0(0),*a8(OSIZE),L
|
|||
|
move *a0(ISAG),*a8(OSAG),L
|
|||
|
|
|||
|
move *a0(IANIOFFX),a1
|
|||
|
move a1,*a8(ODXOFF) ;display x offset
|
|||
|
|
|||
|
move *a0(IANIOFFY),a1
|
|||
|
move a1,*a8(ODYOFF) ;display y offset
|
|||
|
|
|||
|
setf 5,0,0
|
|||
|
move *a0(ICTRL+7),*a8(OCTRL+7) ;Write 5 z comp bits
|
|||
|
setf 16,1,0
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
#arrow_imgs
|
|||
|
.long d_up
|
|||
|
.long d_upright
|
|||
|
.long d_right
|
|||
|
.long d_downright
|
|||
|
.long d_down
|
|||
|
.long d_downleft
|
|||
|
.long d_left
|
|||
|
.long d_upleft
|
|||
|
|
|||
|
.long d_punch
|
|||
|
.long d_kick
|
|||
|
.long d_block
|
|||
|
.long d_grab
|
|||
|
.long d_turbo
|
|||
|
.long d_zip
|
|||
|
|
|||
|
.endif
|
|||
|
|
|||
|
#*****************************************************************************
|
|||
|
*
|
|||
|
* Initializes the scroller position
|
|||
|
|
|||
|
SUBR init_scroller
|
|||
|
|
|||
|
movi [RING_X_CENTER-200,0],a0
|
|||
|
move a0,@WORLDTLX,L
|
|||
|
|
|||
|
;use [ffe5,0] in 1v1 or 1v3, [ffe9,0] for 1v2
|
|||
|
movi [0ffe5h,0],a0
|
|||
|
move @NUM_OPPS,a14
|
|||
|
cmpi 2,a14
|
|||
|
jrne #sety
|
|||
|
movi [0ffe9h,0],a0
|
|||
|
#sety move a0,@WORLDTLY,L
|
|||
|
|
|||
|
rets
|
|||
|
|
|||
|
******************************************************************************
|
|||
|
|
|||
|
.end
|
|||
|
|