wwf-wrestlemania/DRONE.ASM

3231 lines
54 KiB
NASM
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

;Yoko tb on out of ring opp
;UT pin bug
;Atk sometimes instead of blk
;Chk dnk buzz blk
;No leap head grab
;Don't have drones do power moves unless human has.
;Yoko should take advantage of salt throw
;Drones wait in your face for too long.
;DL blk for hiptoss
;Harder
;Atk down opp
;Anti run code, esp out of ctrl
;Fling and chase
;Short repeat atks
;Do more head holds from in close - thru block
;Seek on a blocker, do headhold
;Make multi drones easier...
;Too many runs
;Break out of runs more...
;Climb TB after a toss out
;Sometimes, drone won't move from top of TB
;Don't let go charge moves if opp is blocking
;In multi-wrestler matches, delay longer on power moves from headhold or revs
;Yoko can run right into drone and knock him down.
;Get smart on big boots, missed/blocked buzzers, etc.
;Ignore pushes from opponent, try an attack
;Specific combo paths
;Pin fast
;Multi wres spacing
;Get in ring
;Check blocking
;Fix seek_dirdist out of ring
;Slide htoss on flying opp
**************************************************************
*
* Software: Shawn Liptak
* Initiated: 11/21/94
*
* Modified: Shawn Liptak, 11/21/94 -Started wrestling
*
* COPYRIGHT (C) 1994 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 6/29/95 15:42
**************************************************************
.file "drone.asm"
.title "wrestling drone code"
.width 132
.option b,d,l,t
.mnolist
.include "macros.h"
.include "mproc.equ"
.include "display.equ"
.include "gsp.equ"
.include "sys.equ"
.include "audit.equ"
.include "game.equ"
.include "anim.equ"
.include "plyr.equ"
.include "ring.equ"
.include "damage.equ"
;sounds external
;symbols externally defined
.ref process_ptrs,PSTATUS
.ref PCNT,round_tickcount
.ref CHECK_COMBO_GO
.ref GET_ADJ
.ref p1winstreakd,p1rounds,current_round
.ref LADDER,CURRENT_LADDER
.ref change_anim1a
.ref hrt_4_taunt_anim,rzr_4_taunt_anim,und_4_taunt_anim
.ref yok_4_taunt_anim,shn_4_taunt_anim,bam_4_taunt_anim
.ref dnk_4_taunt_anim,lex_4_taunt_anim
;symbols defined in this file
;uninitialized ram definitions
BSSX droneoff ,16 ;!0=Drone code off
.bss atkcnt_t,AT_NUM*NUM_WRES*16 ;# times hit by each atk
;equates for this file
BLKTEST .equ 0
U_M .equ MOVE_UP<<5
D_M .equ MOVE_DOWN<<5
L_M .equ MOVE_LEFT<<5
R_M .equ MOVE_RIGHT<<5
P_M .equ PLAYER_PUNCH_VAL
B_M .equ PLAYER_BLOCK_VAL
SP_M .equ PLAYER_SPUNCH_VAL
K_M .equ PLAYER_KICK_VAL
SK_M .equ PLAYER_SKICK_VAL
.if MODE_NORMAL!=0
.emsg "FIX code!"
.endif
.text
#***************************************************************
* Main drone logic
* A13 = *Plyr process
* Trashes scratch, A2-A10, B2-B7
SUBR drone_main
.if DEBUG
move @droneoff,a0
jrnz #xx
.endif
move *a13(DRN_BUT),a6 ;A6=Old buts
move *a13(DRN_JOY),a7 ;A7=Old joy
move *a13(CLOSEST_NUM),a14
X32 a14
addi process_ptrs,a14
move *a14,a8,L ;A8=*Closest's proc
; callr drone_getcurskillo
; move a0,a10
move *a13(DRN_SKILL),a10
X16 a10 ;A10=Skill for indexing (*16)
move *a13(PLYRMODE),a0
move a0,b6 ;B6=My pmode
move *a8(PLYRMODE),a0
move a0,b7 ;B7=Opp pmode
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Find friendly wrestlers
movi process_ptrs,a2
movk NUM_WRES,b0
clr b2 ;B2=Team dist ranking (0-2)
clr b3 ;B3=# alive on my team (0-3)
#fflp
move *a2+,a3,L
jrz #ffnxt
move *a13(PLYR_SIDE),a0
move *a3(PLYR_SIDE),a1
cmp a0,a1
jrne #ffnxt ;Not on my team?
move *a3(PLYRMODE),a0
subk MODE_DEAD,a0
jreq #ffnxt
addk 1,b3
move *a13(CLOSEST_NUM),a0
move *a3(CLOSEST_NUM),a1
cmp a0,a1
jrne #ffnxt ;Diff opponents?
move *a13(CLOSEST_DIST),a0
move *a3(CLOSEST_DIST),a1
cmp a1,a0
jrle #ffnxt ;I'm closer?
addk 1,b2
#ffnxt
dsj b0,#fflp
#ffdn
move b2,b2
jrz #ffdoit ;I'm closest?
move *a13(DRN_ACT_p),a9,L
jrnz #ffx ;Script running?
move *a13(DRN_MODE),a0
movi -3,a1
move a1,*a13(DRN_MODE) ;Set mode
addk 3,a0
jrne #newmdm3 ;Init hang back?
jruc #ffx
#ffdoit
move *a13(DRN_MODE),a0
addk 3,a0
jreq #newmd ;Set new mode if in hang back?
#ffx
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Random mode changes
move @PCNT,a0
sll 32-5,a0
jrnz #nomdchk
movk 3,a0
callr rnd
jrnz #nomdchk
move *a13(DRN_MODE),a0
addk 3,a0
jrle #mcnosc ;Hang back?
#newmd
movk 1,a0 ;No aggressive
move @CURRENT_LADDER,a1,L ;* to position
cmpi LADDER,a1
jreq #mdeasy ;1st ladder?
movk 3,a0 ;Range
cmpi 13*16,a10
jrle #mdeasy
addk 1,a0 ;More aggressive
#mdeasy
callr rndrng0
subk 2,a0
move a0,*a13(DRN_MODE) ;-2 to 2
move *a13(DRN_ACT_p),a9,L
jrnz #mcnosc ;Script running?
clr a0
move a0,*a13(DRN_JOY) ;So we don't walk into ropes
#mcnosc
#newmdm3
movk 4,a2 ;Rgt side
move *a13(OBJ_XPOSINT),a0
move *a8(OBJ_XPOSINT),a1
sub a1,a0
jrge #metorgt
movk 12,a2 ;Left side
#metorgt
move a2,*a13(DRN_SEEKDIR)
movk 4,a0
callr rndrng0
move *a13(DRN_MODE),a1
addk 3,a1
jrne #nodhb ;!Hang back?
ANDK 1,a0 ;Make 3-4 or 4-5
addk 2,a0
move b2,a14
add a14,a0
#nodhb
move a0,*a13(DRN_SEEKDIST)
#nomdchk
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Passive mode movement
.if BLKTEST
jruc #skmv
.endif
move *a13(DRN_MODE),a0
jrge #skmv ;Aggressive?
move b6,b6
jrnz #skmv ;!MODE_NORMAL?
move *a13(DRN_ACT_p),a9,L
jrnz #skmv ;Script running?
callr drone_seekdirdist
#skmv
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Dec charge delay
move *a13(DRN_BUTCHRG),a0
jrz #nochrgn
move *a13(DRN_BUTCHRGDLY),a0
subk 1,a0
move a0,*a13(DRN_BUTCHRGDLY)
#nochrgn
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Handle getup time
move *a13(GETUP_TIME),a2
jrle #nogt
movi 99,a0
callr rndrng0
move a10,a1
addi #getup_t,a1
move *a1,a1
cmp a1,a0
jrge #dsabt
subk 5,a2
jrge #gtok
clr a2
#gtok move a2,*a13(GETUP_TIME)
jruc #dsabt
#nogt
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
move *a13(DRN_DELAY),a0
subk 1,a0
jrle #newact
move a0,*a13(DRN_DELAY)
jruc #x
#newact
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Block detection
move *a8(ATTACK_TIME),a4
move @round_tickcount,a5
sub a5,a4 ;-=Attack passed, +=Ticks till atk
jrlt #noblk
movi 50,a1 ;Closer Z allowed
move *a8(ATTACK_TYPE),a2
cmpi AT_PUSH,a2
jreq #noblk
cmpi AT_MSL,a2
jreq #msla ;Missile atk?
move *a13(CLOSEST_XDIST),a0
cmpi 180,a0
jrgt #noblk ;Too far?
movi 100,a1
#msla
move *a13(CLOSEST_ZDIST),a0
cmp a1,a0
jrgt #noblk ;Too far?
move *a8(GETUP_TIME),a14
jrgt #noblk ;Out of control?
cmpi MODE_INAIR2,b7
jreq #noblk ;Jumping on me?
btst PLAYER_BLOCK_BIT,a6
jrnz #x ;Trying to blk?
move *a8(ATTACK_TYPE),a2
move *a13(PLYRNUM),a0
movi AT_NUM,a3
mpys a0,a3
add a2,a3
X16 a3
addi atkcnt_t,a3
move *a3,a2 ;# missed blks
cmpi 10,a2
jrlo #acok
movk 9,a2
#acok
X16 a2
addi #blkatk_t,a2
move *a2,a2 ;Get %
move b3,a14 ;# on team
subk 1,a14
X32 a14
sub a14,a2 ;Decrease per extra bud
.if BLKTEST
movi 100,a2
.endif
movi 99,a0
callr rndrng0
move a10,a1
addi #blkbase_t,a1
move *a1,a1 ;Base %
add a2,a1
cmp a1,a0
jrge #missb
cmpi 15,a4
jrge #minbtok ;Min time OK?
movk 15,a4
#minbtok
move *a8(ATTACK_TYPE),a2
cmpi AT_LEAPING,a2
jrne #sblk ;!Leaping?
; LOCKUP
move a10,a0
srl 4+2,a0 ;Skill/4
callr rndrng0
move a0,a0
jrz #sblk ;Skip?
move a5,*a8(ATTACK_TIME) ;Cancel
movi slhtoss,a9 ;Flip opp
jruc #newsc
#sblk
move a4,*a13(DRN_DELAY)
movk B_M,a0 ;Block it
move a0,*a13(DRN_BUT)
cmpi AT_PUPPET,a2
jrne #dsabt ;!Hip toss?
movi B_M+L_M+D_M,a0 ;Special block
move a4,a3 ;Dly
clr a9
jruc #setbx
#missb
move a5,*a8(ATTACK_TIME) ;Cancel
move *a3,a0 ;Cnt+1
addk 1,a0
move a0,*a3
#noblk
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >New script selection
move *a13(DRN_ACT_p),a9,L ;A9=*Script
jrnz #cact ;Continue script?
clr a2
cmpi MODE_BLOCK,b6
jrne #nps ;!Blking?
btst PLAYER_PUNCH_BIT,a6
jrnz #nps ;Already pushed?
.if BLKTEST
jruc #nps
.endif
movk 7,a0
callr rndrng0
move a0,a0
jrnz #nps ;Skip 88%?
move *a13(CLOSEST_XDIST),a0
cmpi 110,a0
jrgt #nps ;Too far?
move *a13(CLOSEST_ZDIST),a0
cmpi 40,a0
jrgt #nps ;Too far?
movk P_M+B_M,a2 ;Push
move a2,*a13(DRN_BUT)
jruc #x
#nps
move a2,*a13(DRN_BUT)
.if BLKTEST
jruc #x
.endif
move b6,b6
jrnz #doact ;!MODE_NORMAL?
move *a13(INRING),a0
jrz #ringok ;In ring?
move *a8(INRING),a0
jrnz #ringok ;Opp out?
movi drn_enterring,a9
jruc #newsc
#ringok
move *a13(DRN_MODE),a3
cmpi -3,a3
jrle #pass ;Hang back?
cmpi MODE_ONGROUND,b7
jreq #doact ;Atk?
cmpi MODE_INAIR2,b7
jrne #onia
movi drn_opinair,a9 ;Avoid jump
jruc #newsc
#onia
cmpi MODE_RUNNING,b7
jrne #onrun
move *a13(CLOSEST_XDIST),a0
cmpi 80,a0
jrle #onrun ;Too close?
movi drn_oprun,a9 ;Anti run
jruc #newsc
#onrun
move *a8(ATTACK_TIME),a0
move @round_tickcount,a1
sub a1,a0 ;-=Attack passed, +=Ticks till atk
addk 15,a0
jrge #doact ;Get him after his atk (or no blk)?
move a3,a3
jrlt #pass ;Passive?
movk 1fh,a0 ;.6 sec
cmpi 22*16,a10
jrle #cat
movk 7,a0 ;.15 sec
#cat
callr rnd
jrz #doactpup ;Atk?
#pass
move @PCNT,a0 ;Chk every 16
addk 1,a0
sll 32-4,a0
jrnz #x
move *a13(CLOSEST_XDIST),a1
move *a13(CLOSEST_ZDIST),a14
cmp a1,a14
jrge #big
move a1,a14
#big
cmpi 70,a14
jrlt #doactpup ;Opp in my face? Attack!
move *a13(DRN_MODE),a0
addk 3,a0
jrle #x ;Hang back?
move @CURRENT_LADDER,a1,L ;* to position
cmpi LADDER,a1
jreq #nratk ;1st ladder?
movk 0fh,a0 ;Avg 4.8 sec
callr rnd
jrz #doactpup ;Random attack?
#nratk
move b7,b7
jrz #x ;Opp MODE_NORMAL? Be passive
#doactpup
move b7,a0
subk MODE_PUPPET2,a0
jreq #x
subk MODE_PUPPET-MODE_PUPPET2,a0
jreq #x
cmpi MODE_HEADHELD,b7
jreq #x
cmpi MODE_HEADHOLD,b7
jreq #x
cmpi MODE_ATTACHED,b7
jreq #x
#doact
cmpi MODE_HEADHELD,b6
jreq #slctscrpt
cmpi MODE_ONGROUND,b6
jrne #nognd
movi drn_roll,a9
jruc #newsc
#nognd
cmpi MODE_INAIR2,b6
jrne #nin2
movi drn_inair,a9
jruc #newsc
#nin2
cmpi MODE_ONTURNBKL,b6
jrne #notb
movi drn_ontb,a9
jruc #newsc
#notb
cmpi MODE_DEAD,b6
jrne #ndead
movk 7,a0
callr rnd
jruc #butx
#ndead
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrnz #unint ;Wait?
cmpi MODE_RUNNING,b6
jrne #nrun
movi drn_run,a9
jruc #newsc
#nrun
cmpi MODE_HEADHOLD,b6
jrne #nhh
clr a0
move a0,*a13(DRN_BUTCHRG) ;Clr it
; movk 1,a0 ;50%
; callr rnd
; jrnz #nhh ;Don't combo?
move a8,a3
move a13,a8
calla CHECK_COMBO_GO
jrlt #ncmb ;Can't combo?
move a3,a8
movi drn_combo,a9
jruc #newsc
#ncmb
move a3,a8
#nhh
move *a13(DRN_BUTCHRG),a0
jrz #nochrg
move *a13(DRN_BUTCHRGDLY),a0
jrgt #nochrg
cmpi MODE_BLOCK,b7
jreq #nochrg ;Opp blking?
move *a13(DRN_BUTCHRG_p),a9,L ;Fire charge
jruc #newsc
#nochrg
move *a13(CLOSEST_DIST),a14
cmpi 200,a14
jrgt #opnb
cmpi MODE_BLOCK,b7
jrne #opnb ;!Blking?
move *a13(CLOSEST_ZDIST),a14
cmpi 40,a14
jrgt #bsk
move *a13(CLOSEST_XDIST),a14
cmpi 60,a14
jrgt #bsk
move *a8(STICK_REL_CUR),a14
cmpi MOVE_DOWN_LEFT,a14
jreq #bht ;Hip toss blocked?
movi M_shrtblkr,a9 ;Attack
jruc #getscrpt
#bht
movi M_shrtblkrdl,a9 ;Attack
jruc #getscrpt
; movi hgrab,a9
; jruc #newsc
#bsk
movi drn_seekclose,a9
jruc #newsc
#opnb
cmpi MODE_DEAD,b7
jrne #opnd
movi drn_oppdead,a9
jruc #newsc
#opnd
#slctscrpt
move *a13(WRESTLERNUM),a0
X32 a0
addi #wnshort_t,a0
move *a13(CLOSEST_XDIST),a1
move *a13(CLOSEST_ZDIST),a14
X2 a14 ;Z*2
cmp a1,a14
jrge #havebig
move a1,a14
#havebig
cmpi 100,a14
jrlt #shrt
addi #wnmed_t-#wnshort_t,a0
cmpi 180,a14
jrlt #med
addi #wnlong_t-#wnmed_t,a0
#shrt
#med
move *a0,a9,L ;Get * mode list
move b6,a2
move b7,a3
#mdlp
movb *a9,a0 ;My mode #
addk 8,a9
movb *a9,a14 ;His mode #
addk 8,a9
move *a9+,a1,L ;* script * table
move a0,a0
jrn #inochk ;Don't chk?
cmp a2,a0
jrne #mdlp ;Not in mode?
#inochk
move a14,a14
jrn #def ;Don't chk?
cmp a3,a14
jrne #mdlp ;Not in mode?
#def
move a1,a9
#getscrpt
move *a9+,a0 ;# entries
jrge #neok ;!Headhold?
abs a0
cmpi 26*16,a10
jrle #neok ;!Hard?
movk 1,a0 ;Only do first two
#neok
callr rndrng0
X32 a0
add a0,a9
move *a9,a9,L ;* new script
#newsc
move b6,a0
move a0,*a13(DRN_SPMODE)
cmpi MODE_HEADHOLD,b6
jrne #nhh2
movk 1,a3
cmpi 2,b3
jrlt #hhd1 ;1 opp?
movk 22,a3
#hhd1
movi sklhhdly_t,a0
add a10,a0 ;+Offset
move *a0,a0
callr rndrng0
add a0,a3 ;Increase per extra bud
move @PCNT,a0
sll 32-1,a0
jrz #hhdok ;Skip half of checks?
cmpi 65,a3
jrle #hhdok
movi 65,a3 ;Max delay
#hhdok
clr a0
jruc #setbx
#nhh2
cmpi MODE_HEADHELD,b6
jrne #nhhe
clr a0
move a0,*a13(DRN_BUTCHRG) ;Clr it
move b3,a3 ;# on team
movk 7,a0
callr rnd
jrz #hrskmp ;12% skip multiplyr delay?
subk 1,a3
X16 a3
#hrskmp
movi sklhrdly_t,a0
add a10,a0 ;+Offset
move *a0,a0
callr rndrng0
addk 1,a0
add a0,a3 ;Increase per extra bud
move @PCNT,a0
sll 32-1,a0
jrz #hrdok ;Skip half of checks?
cmpi 70,a3
jrle #hrdok
movi 70,a3 ;Max delay
#hrdok
clr a0
jruc #setbx
#nhhe
#cact
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Chk script for mode change
move b6,a0
jrz #mdsame ;MODE_NORMAL?
subk MODE_BLOCK,a0
jreq #mdsame ;Treat as normal?
move *a13(DRN_SPMODE),a0
move b6,a1
cmp a1,a0
.if DEBUG
jreq #dsok
jruc #dsabt ;For breakpoint
#dsok
.endif
jrne #dsabt
#mdsame
.if DEBUG
move a9,a9 ;Chk script *
jrz #a9ok
cmpi 0ff000000h,a9
jrhs #a9ok
LOCKUP
#a9ok
.endif
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Read script command
#scplp
move *a9+,a0
jrge #nocd ;No command?
sll 32-14,a0
jrc #dsdone ;Done? (Bit 14)
srl 32-14,a0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Seek until 0
subk 1,a0 ;#1
jrne #nseekt0
callr drone_seek
jrz #scplp
subk 16,a9
jruc #dsdone
#nseekt0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Random skill lvl abort
subk 1,a0 ;#2
jrne #nrnda
cmpi MODE_BLOCK,b7
jreq #dsabt ;Blking?
move *a9+,a3,L ;*Skill table
; clr a2
; cmpi sklrev_t,a3
; jrne #nsr
; move b3,a2 ;# on team
; subk 1,a2
; X16 a2
;#nsr
movi 99,a0
callr rndrng0
add a10,a3 ;+Offset
move *a3,a1
; sub a2,a1 ;Decrease per extra bud
cmp a1,a0
jrlt #scplp ;Cont?
movk 10,a0
move a0,*a13(DRN_DELAY)
jruc #dsabt
#nrnda
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Wait till interruptable
subk 1,a0 ;#3
jrne #nwtint
move *a13(ANIMODE),a0
btst MODE_UNINT_BIT,a0
jrz #scplp ;Off?
subk 16,a9
jruc #dsdone
#nwtint
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Abort if opponent blocking
subk 1,a0 ;#4
jrne #naib
cmpi MODE_BLOCK,b7
jrne #scplp ;!Blocked?
jruc #dsabt
#naib
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Call code
subk 1,a0 ;#5
jrne #ncall
move *a9+,a0,L
call a0
jruc #scplp
#ncall
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Rnd jump
subk 1,a0 ;#6
jrne #nrj
movi 99,a0
callr rndrng0
move *a9+,a1 ;Percent to jmp
move *a9+,a2,L
cmp a1,a0
jrge #scplp
move a2,a9 ;New addr
jruc #scplp
#nrj
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Jump
subk 1,a0 ;#7
jrne #njmp
move *a9+,a9,L
jruc #scplp
#njmp
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Call function
exgpc a9
jruc #scplp
#nocd
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Joy & button bits
move *a9+,a3 ;Get delay
#setbx
move a0,a1
sll 32-5,a0
srl 32-5,a0
move a0,*a13(DRN_BUT)
srl 5,a1
move *a13(FACING_DIR),a14
btst PLAYER_RIGHT_BIT,a14
jrnz #rgt ;Facing rgt?
move a1,a0 ;>Flip L&R bits
move a1,a14
sll 32-2,a1
srl 3,a0 ;Bit0=Rgt
sll 32-3,a14
srl 31,a14
sll 1,a14 ;Bit1=Left
or a0,a1
or a14,a1
rl 2,a1
#rgt
move a1,*a13(DRN_JOY)
move a3,*a13(DRN_DELAY)
move a3,a3
jrgt #dsdone
#dsabt
clr a9
#dsdone
move a9,*a13(DRN_ACT_p),L
#unint
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Calc ctrl bit transitions
#x
move *a13(DRN_BUT),a0
#butx
move *a13(DRN_BUTCHRG),a14
or a14,a0
move a0,*a13(DRN_BUT)
xor a0,a6
move a6,a1
and a0,a6
move a6,*a13(DRN_BUTDT)
andn a0,a1
move a1,*a13(DRN_BUTUT)
move *a13(DRN_JOY),a0
xor a0,a7
move a7,a1
and a0,a7
move a7,*a13(DRN_JOYDT)
andn a0,a1
move a1,*a13(DRN_JOYUT)
#xx
rets
SKLM .macro w,ad
.word :w:,:w:+:ad:,:w:+:ad:*2,:w:+:ad:*3,:w:+:ad:*4
.endm
#getup_t ;% to bump getup time
SKLM 10,2
SKLM 20,2
SKLM 30,2
SKLM 40,2
SKLM 50,2
SKLM 60,10
#blkbase_t ;Base % to block
SKLM 10,2
SKLM 20,2
SKLM 30,1
SKLM 35,1
SKLM 40,1
SKLM 47,7
#blkatk_t ;% to block per attack
.word 0,10,20,30,40
.word 50,50,50,50,50
sklhhdly_t ;Max delay on hh
SKLM 150,-6
SKLM 120,-6
SKLM 90,-6
SKLM 60,-6
SKLM 28,-3
SKLM 13,-2
sklhrdly_t ;Max delay on hh rev
SKLM 150,-6
SKLM 120,-6
SKLM 90,-6
SKLM 60,-6
SKLM 28,-3
SKLM 13,-2
sklrep_t ;% to repeat
SKLM 20,4
SKLM 45,2
SKLM 55,4
SKLM 75,2
SKLM 85,2
SKLM 90,3
;#getup_t ;% to bump getup time
; SKLM 5,2
; SKLM 15,1
; SKLM 20,2
; SKLM 30,2
; SKLM 40,4
; SKLM 60,10
;#blkbase_t ;Base % to block
; SKLM 5,1
; SKLM 10,2
; SKLM 20,2
; SKLM 30,1
; SKLM 35,2
; SKLM 45,7
;#blkatk_t ;% to block per attack
; .word 0,10,20,30,40
; .word 50,50,50,50,50
;sklhhdly_t ;Max delay on hh
; SKLM 200,-10
; SKLM 150,-6
; SKLM 120,-9
; SKLM 70,-8
; SKLM 35,-4
; SKLM 15,-2
;sklhrdly_t ;Max delay on hh rev
; SKLM 200,-10
; SKLM 150,-6
; SKLM 120,-8
; SKLM 70,-4
; SKLM 50,-7
; SKLM 15,-2
;sklrep_t ;% to repeat
; SKLM 6,3
; SKLM 20,4
; SKLM 40,2
; SKLM 50,4
; SKLM 70,4
; SKLM 90,3
;
#wnshort_t
.long bret_s_t,raz_s_t,utak_s_t,yoko_s_t
.long shawn_s_t,bam_s_t,doink_s_t,doink_s_t,lex_s_t
#wnmed_t
.long bret_m_t,raz_m_t,utak_m_t,yoko_m_t
.long shawn_m_t,bam_m_t,doink_m_t,doink_m_t,lex_m_t
#wnlong_t
.long bret_l_t,raz_l_t,utak_l_t,yoko_l_t
.long shawn_l_t,bam_l_t,doink_l_t,doink_l_t,lex_l_t
#*******************************
* Drone script commands
BBL .macro w,w2,l
.byte :w:,:w2:
.long :l:
.endm
DS_CODE .macro
.word 8000h+0
.endm
DS_CODEEND .macro
exgpc a9
.endm
DS_SEEKTIL0 .macro
.word 8000h+1
.endm
DS_RNDA .macro l
.word 8000h+2
.long :l:
.endm
DS_WTINT .macro
.word 8000h+3
.endm
DS_ABIFBLK .macro
.word 8000h+4
.endm
DS_CALL .macro a
.word 8000h+5
.long :a:
.endm
DS_RJMP .macro p,a
.word 8000h+6,:p:
.long :a:
.endm
DS_JMP .macro a
.word 8000h+7
.long :a:
.endm
DS_SLP1 .macro
.word 0c000h+0
.endm
DS_END .macro
.word 0,0
.endm
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Bam bam scripts
bam_s_t
BBL MODE_HEADHOLD,-1,baM_hh
BBL MODE_HEADHELD,-1,baM_hhr
BBL MODE_OPPOVERHEAD,-1,baM_ooh
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,baM_n
bam_m_t
BBL MODE_HEADHOLD,-1,baM_hh
BBL MODE_HEADHELD,-1,baM_hhr
BBL MODE_OPPOVERHEAD,-1,baM_ooh
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,baMm_n
baM_n ;Normal
.word (baM_n_-$)/32-1
.long #run
.long #p,#sp,#k,#sk
.long #spx
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #llsk ;Karate kick
.long #spsk ;Pickup
baM_n_
baMm_n
.word (baMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #llsk ;Karate kick
.long #spsk ;Pickup
.long #fast ;Hyper
.long #chrg
baMm_n_
baM_hh ;Holding head
; .word 1-1
; .long #bahh
.word -(7-1)
.long #bahhpg ;Pogo
.long #lrrsp ;Pile drvr
.long #jk ;Pickup
.long #bahhrsk ;Knees (3 way)
.long #bahhrsk
.long #bahhrsk
.long #spsk2 ;Neck brkr
baM_hhr ;Head held reversals
.word 4-1
.long #k
.long #bahhpg ;Pogo
.long #lrrsp ;Pile drvr
.long #spsk2 ;Neck brkr
baM_ooh ;Holding opp over head
.word 2-1
.long #k ;Slam
.long #dsk ;Back brkr
#bahhrsk ;Knees
.word R_M+SK_M,2
.word 0,5
;FIX! - chk timing
.word SK_M,4, 0,4, SK_M,4, 0,4, SK_M,4, 0,4
DS_RNDA sklrep_t
.word SK_M,4, 0,4, SK_M,4, 0,4, SK_M,4, 0,4
DS_RJMP 33,#k ;Hip toss
DS_RJMP 33,#sp ;Pickup
.word D_M+SP_M,0 ;Pile drvr
#bahhpg
.word U_M,2, D_M,2, 0,2, D_M,2, SK_M,50
DS_RNDA sklrep_t
.word SP_M,2, 0,2, SP_M,2, 0,2, SP_M,2, 0,15 ;Repeat
DS_RNDA sklrep_t
.word SP_M,2, 0,2, SP_M,2, 0,2, SP_M,2, 0,15
.word SP_M,2, 0,2, SP_M,2, 0,2, SP_M,0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Undertaker scripts
utak_s_t
BBL MODE_HEADHOLD,-1,utM_hh
BBL MODE_HEADHELD,-1,M_hhr
BBL MODE_CHOKEHOLD,-1,utM_chold
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,utM_n
utak_m_t
BBL MODE_HEADHOLD,-1,utM_hh
BBL MODE_HEADHELD,-1,M_hhr
BBL MODE_CHOKEHOLD,-1,utM_chold
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,utMm_n
utM_n ;Normal
; .word 1-1
; .long #ut
.word (utM_n_-$)/32-1
.long #run
.long #spx
.long #p,#sp,#k,#sk
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #ucut
.long #utshootps ;Fire push ghosts
.long #utshootpl ;Fire pull ghosts
.long #uttombhit ;Smash with tombstone
.long #jp ;Slide choke
utM_n_
utMm_n
; .word 1-1
; .long #utshootpl
.word (utMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #utshootps ;Fire push ghosts
.long #utshootpl ;Fire pull ghosts
.long #uttombhit ;Smash with tombstone
.long #jp ;Slide choke
.long #fast ;Hyper
.long #chrg
utMm_n_
utM_hh ;Holding head
.word -(6-1)
.long #uddsk ;Pile drv
.long #lrrsp ;Neck brkr
.long #uthhrp
.long #ucut
.long #uttombhit ;Smash with tombstone
.long #utdk ;Face slam
utM_chold ;Choke holding opp by neck
.word 7-1
.long #p
.long #k
.long #htoss
.long #ucut
.long #utchup
.long #utdk ;Face slam
.long #dsk ;Slam
#utshootps
.word R_M,2, 0,2, R_M,2, K_M,2, 0,2
DS_WTINT
DS_ABIFBLK
.word P_M+K_M,0
#utshootpl
.word L_M,2, 0,2, L_M,2, K_M,2, 0,2
DS_WTINT
DS_ABIFBLK
.word D_M+SP_M,0
#uttombhit
.word R_M,2, 0,2, R_M,2, SK_M,5
DS_RNDA sklrep_t
.word K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4 ;Repeat
DS_ABIFBLK
DS_RNDA sklrep_t
.word K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4
.word K_M,4, 0,4, K_M,4, 0,4, K_M,0
#uthhrp ;Knee & hdbuts
.word R_M+P_M,2
.word 0,5
;FIX! - chk timing
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
DS_RNDA sklrep_t
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
DS_RJMP 50,#sp ;Fly kick
.word K_M,0 ;Neck brkr
#utchup ;Knee & hdbuts
.word U_M+P_M,2
.word 0,5
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
DS_RNDA sklrep_t
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
DS_RJMP 50,#sp ;Fly kick
.word K_M,0 ;Neck brkr
#utdk ;Face slam
.word D_M,2, 0,2, D_M+K_M,2
DS_RNDA sklrep_t
.word 0,5
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4 ;Repeat
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
DS_RNDA sklrep_t
.word P_M,4, 0,4, P_M,4, 0,4, P_M,0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Doink scripts
doink_s_t
BBL MODE_HEADHOLD,-1,doM_hh
BBL MODE_HEADHELD,-1,doM_hhr
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,doM_n
doink_m_t
BBL MODE_HEADHOLD,-1,doM_hh
BBL MODE_HEADHELD,-1,doM_hhr
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,doMm_n
doM_n ;Normal
; .word 1-1
; .long #eslap
.word (doM_n_-$)/32-1
.long #run
.long #spx
.long #p,#sp,#k,#sk
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #ucut
.long #doham ;Hammer
.long #doeslap ;Ear slap
.long #dopbig ;Boxing punch
doM_n_
doMm_n
; .word 1-1
; .long #doeslap
.word (doMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #doham ;Hammer
.long #doeslap ;Ear slap
.long #fast ;Hyper
.long #chrg
doMm_n_
doM_hh ;Holding head
.word -(8-1)
.long #uddskk ;Face slam
.long #lrrsp ;Pile drv
.long #doham
.long #j2p ;Buzz
.long #hhp3k ;P & fly kick
.long #hhp4
.long #hhp3pd ;P & pdrv
.long #hhsk3pd ;K & pdrv
doM_hhr ;Head held reversals
.word 3-1
.long #k
.long #uddskk ;Face slam
.long #lrrsp ;Pile drv
#doham .word R_M,2, 0,2, R_M,2, SK_M,10
DS_RNDA sklrep_t
.word K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4 ;Repeat
DS_RNDA sklrep_t
.word K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4
.word K_M,4, 0,4, K_M,4, 0,4, K_M,0
#doeslap
.word D_M,2, D_M+R_M,2, R_M,2, P_M,2
DS_RNDA sklrep_t
.word 0,5, P_M,5, 0,5, P_M,5 ;Repeat
DS_RNDA sklrep_t
.word 0,5, P_M,5, 0,5, P_M,5
.word 0,5, P_M,5, 0,5, P_M,0
#dopbig .word P_M,2, 0,2, P_M,2, 0,2, P_M,2, 0,2, P_M,2, 0,2
.word P_M,2, 0,2, P_M,2, 0,2, P_M,0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Yoko scripts
yoko_s_t
BBL MODE_HEADHOLD,-1,yoM_hh
BBL MODE_HEADHELD,-1,M_hhr
BBL MODE_OPPOVERHEAD,-1,yoM_ooh
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,yoM_n
yoko_m_t
BBL MODE_HEADHOLD,-1,yoM_hh
BBL MODE_HEADHELD,-1,M_hhr
BBL MODE_OPPOVERHEAD,-1,yoM_ooh
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,yoMm_n
yoM_n ;Normal
; .word 1-1
; .long #eslap
.word (yoM_n_-$)/32-1
.long #run
.long #spx
.long #p,#sp,#k,#sk
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #jp ;Speed jab
.long #rrsk ;Scissor squish
.long #rrp ;Gut push
.long #spsk ;Pickup
yoM_n_
yoMm_n
; .word 1-1
; .long #doeslap
.word (yoMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #jp ;Speed jab
.long #rrsk ;Scissor squish
.long #spsk ;Pickup
.long #fast ;Hyper
.long #chrg
yoMm_n_
yoM_hh ;Holding head
.word -(4-1)
.long #uddsk ;Vert suplex
.long #lrrsp ;Scissor squish
.long #j2p ;Salt
.long #ucut
yoM_ooh ;Holding opp over head
.word 2-1
.long #k ;Slam
.long #dsk ;Spinning slam
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Shawn scripts
shawn_s_t
BBL MODE_HEADHOLD,-1,shM_hh
BBL MODE_HEADHELD,-1,shM_hhr
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,shM_n
shawn_m_t
BBL MODE_HEADHOLD,-1,shM_hh
BBL MODE_HEADHELD,-1,shM_hhr
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,shMm_n
shM_n ;Normal
; .word 1-1
; .long #eslap
.word (shM_n_-$)/32-1
.long #run
.long #spx
.long #p,#sp,#k,#sk
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #llsk ;Karate kick
.long #jkk ;Speed kick
.long #rrsk ;Frankensteiner
.long #rrk ;Sliding kick toss
.long #jisp ;Flipslam
shM_n_
shMm_n
; .word 1-1
; .long #doeslap
.word (shMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #llsk ;Karate kick
.long #jkk ;Speed kick
.long #rrsk ;Frankensteiner
.long #rrk ;Sliding kick toss
.long #jisp ;Flipslam
.long #fast ;Hyper
.long #chrg
shMm_n_
shM_hh ;Holding head
.word -(8-1)
.long #uddsk ;German suplex
.long #lrrsp ;Frankensteiner
.long #rsk4k ;Quick knees
.long #jkk ;Speed kick
.long #rp ;Arm break
.long #rsp4 ;Jmp head butt
.long #rk4 ;Speed kick
.long #lrrk ;Kick toss
shM_hhr ;Head held reversals
.word 5-1
.long #k
.long #uddsk ;German suplex
.long #lrrsp ;Frankensteiner
.long #lrrk ;Kick toss
.long #jkk ;Speed kick
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Bret scripts
bret_s_t
BBL MODE_HEADHOLD,-1,brM_hh
BBL MODE_HEADHELD,-1,brM_hhr
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,brM_n
bret_m_t
BBL MODE_HEADHOLD,-1,brM_hh
BBL MODE_HEADHELD,-1,brM_hhr
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,brMm_n
brM_n ;Normal
; .word 1-1
; .long #eslap
.word (brM_n_-$)/32-1
.long #run
.long #p,#sp,#k,#sk
.long #spx
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #ucut
.long #ddp ;Leap ucut
.long #jp ;Face rake
.long #j2sp ;Rolling ucut
.long #llsk ;Fast kick
brM_n_
brMm_n
; .word 1-1
; .long #doeslap
.word (brMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #ddp ;Leap ucut
.long #jp ;Face rake
.long #j2sp ;Rolling ucut
.long #llsk ;Fast kick
.long #fast ;Hyper
.long #chrg
brMm_n_
brM_hh ;Holding head
.word -(7-1)
.long #uddsk ;Neck DDT
.long #lrrsp ;Pile drvr
.long #ucut
.long #jpx ;Face drvr
;FIX! - broke
.long #rp ;Arm break
.long #rsp ;Head to knee
;FIX! - broke
.long #lrrp ;Knee to face
brM_hhr ;Head held reversals
.word 4-1
.long #k
.long #uddsk ;Neck DDT
.long #lrrsp ;Pile drvr
.long #lrrp ;Kick toss
; .long #jk ;
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Razor scripts
raz_s_t
BBL MODE_HEADHOLD,-1,rzM_hh
BBL MODE_HEADHELD,-1,rzM_hhr
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,rzM_n
raz_m_t
BBL MODE_HEADHOLD,-1,rzM_hh
BBL MODE_HEADHELD,-1,rzM_hhr
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,rzMm_n
rzM_n ;Normal
; .word 1-1
; .long #eslap
.word (rzM_n_-$)/32-1
.long #run
.long #p,#sp,#k,#sk
.long #spx
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #ucut
.long #jp ;Down slash
.long #rrk ;Rug slam
rzM_n_
rzMm_n
; .word 1-1
; .long #doeslap
.word (rzMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #jp ;Down slash
.long #fast ;Hyper
.long #chrg
rzMm_n_
rzM_hh ;Holding head
.word -(6-1)
.long #uddsk ;P drvr
.long #lrrsp ;Razors edge
.long #rzup4 ;Slashes up
.long #rzdp4 ;Slashes dn
.long #ucut
.long #rzuddksp ;Rug shake
rzM_hhr ;Head held reversals
.word 4-1
.long #k
.long #uddsk ;P drvr
.long #lrrsp ;Razors edge
.long #rzuddksp ;Rug shake
#rzup4 .word U_M+P_M,5, 0,5, P_M,5, 0,5, P_M,5, 0,5, P_M,0
#rzdp4 .word D_M+P_M,5, 0,5, P_M,5, 0,5, P_M,5, 0,5, P_M,0
#rzuddksp
.word U_M,2, D_M,2, 0,2, D_M,2, K_M,2
DS_RNDA sklrep_t
.word 0,20
.word SP_M,6, 0,6, SP_M,6, 0,6, SP_M,6, 0,6 ;Repeat
DS_RNDA sklrep_t
.word SP_M,6, 0,6, SP_M,6, 0,6, SP_M,0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Lex scripts
lex_s_t
BBL MODE_HEADHOLD,-1,lxM_hh
BBL MODE_HEADHELD,-1,lxM_hhr
BBL MODE_OPPOVERHEAD,-1,lxM_ooh
BBL -1,MODE_ONGROUND,M_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,lxM_n
lex_m_t
BBL MODE_HEADHOLD,-1,lxM_hh
BBL MODE_HEADHELD,-1,lxM_hhr
BBL MODE_OPPOVERHEAD,-1,lxM_ooh
BBL -1,MODE_ONGROUND,Mm_og
BBL -1,MODE_ONTURNBKL,M_opptbkl
BBL -1,MODE_CLIMBTURNBKL,M_opptbkl
WL -1,lxMm_n
lxM_n ;Normal
; .word 1-1
; .long #eslap
.word (lxM_n_-$)/32-1
.long #run
.long #p,#sp,#k,#sk
.long #spx
.long #hgrab,#hgrab,#hgrab
.long #flng
.long #htoss,#htoss
.long #rrp ;Elbow to gut
.long #spsk ;Pickup
lxM_n_
lxMm_n
; .word 1-1
; .long #doeslap
.word (lxMm_n_-$)/32-1
.long drn_seek
.long drn_retreat
.long #run
.long #sp
.long #sk
; .long #hgrab,#hgrab,#hgrab
.long #flng
.long #rrp ;Elbow to gut
.long #spsk ;Pickup
.long #fast ;Hyper
.long #chrg
lxMm_n_
lxM_hh ;Holding head
.word -(4-1)
.long #uddsk ;Neck DDT
.long #lrrsp ;Vert suplex
.long #rsk4k ;Quick knees & v suplex
.long #jk ;Pickup
lxM_hhr ;Head held reversals
.word 4-1
.long #k
.long #uddsk ;Neck DDT
.long #lrrsp ;V suplex
.long #jk ;Pickup
lxM_ooh ;Holding opp over head
.word 3-1
.long #p ;Slam
.long #usp ;Head slam
.long #usk ;Back brkr
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Generic scripts
M_og ;Opp on gnd
.word 6-1
; .long drn_retreat
.long #p,#sp,#k,#sk
.long #oghg,#oghg
Mm_og
.word 3-1
.long drn_seek
;FIX! - Rzr rug shake
.long #seeksp
.long #seeksk
M_opptbkl ;Opp on turnbkl
.word 1-1
.long #run
M_hhr ;Head held reversals
.word 3-1
.long #k
.long #uddsk
.long #lrrsp
M_shrtblkr
.word 2-1
.long #hgrab
.long #htoss
M_shrtblkrdl
.word 2-1
.long #hgrab
.long #spx
; .long drn_climbtb
#spx .word SP_M,2, 0,2, SP_M,2, 0,2, SP_M,2
.word SP_M,2, 0,2, SP_M,2, 0,2, SP_M,0
#p .word P_M,0
#sp .word SP_M,0
#k .word K_M,0
#sk .word SK_M,0
#spsk .word SP_M+SK_M,0
#rp .word R_M+P_M,0
#rsp .word R_M+SP_M,0
#rsp4 .word R_M+SP_M,4, 0,4, SP_M,4, 0,4, SP_M,4, 0,4, SP_M,0
#rk4 .word R_M+K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4, K_M,0
#rsk .word R_M+SK_M,0
#rsk4k .word R_M+SK_M,4, 0,4, SK_M,4, 0,4, SK_M,4, 0,4, SK_M,4, K_M,0
#rrp .word R_M,2, 0,2, R_M,2, P_M,0
#rrk .word R_M,2, 0,2, R_M,2, K_M,0
#rrsk .word R_M,2, 0,2, R_M,2, SK_M,0
#llsk .word L_M,2, 0,2, L_M,2, SK_M,0
#dp .word D_M+P_M,0
#dk .word D_M+K_M,0
#dsk .word D_M+SK_M,0
#ddp .word D_M,2, 0,2, D_M,2, P_M,0
#usp .word U_M+SP_M,0
#usk .word U_M+SK_M,0
#run
DS_CALL drone_chkrun
.word P_M+K_M,0 ;Skipped if bad
DS_END
hgrab
#hgrab .word R_M,2, 0,2, R_M,2, SP_M,0
#flng .word L_M,2, 0,2, L_M+SP_M,0 ;Grab fling
slhtoss .word L_M,2, 0,2, L_M,2, P_M,0 ;Hip toss
#htoss .word L_M,2, 0,2, L_M+P_M,0 ;Hip toss
#ucut .word D_M+SP_M,0 ;Uppercut
#seeksp
DS_SEEKTIL0
.word SP_M,0
#seeksk
DS_SEEKTIL0
.word SK_M,0
#chrg
DS_CALL drone_chrg
DS_END
#oghg ;Opp on gnd head grab
.word D_M,2, SP_M,0
#fast ;Works once
.word L_M,2, L_M+D_M,2, D_M,2, D_M+R_M,2
.word R_M,2, R_M+U_M,2, U_M,2, U_M+L_M,0
;#lrrspp ;Pile drvr/Neck brkr
; .word L_M,2, R_M,2, 0,2, R_M,2, SP_M,2
; DS_RNDA sklrep_t
; .word 0,5
; .word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4 ;Repeat
; DS_RNDA sklrep_t
; .word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
; .word P_M,4, 0,4, P_M,4, 0,4, P_M,0
#hhp3k ;Punch*3, kick
.asg 6,T
.word R_M+P_M,T, R_M,T, R_M+P_M,T, R_M,T
.word R_M+P_M,T, R_M,T, R_M+P_M,T, R_M,T
.word R_M+K_M,2
.word 0,10
DS_END
#hhp4 ;Punch*4
.asg 6,T
.word R_M+P_M,T, R_M,T, R_M+P_M,T, R_M,T
.word R_M+P_M,T, R_M,T, R_M+P_M,T, R_M,T
.word R_M+P_M,T, R_M,T, R_M+P_M,2
.word 0,10
DS_END
#hhp3pd ;Punch*3, piledriver
.asg 6,T
.word R_M+P_M,T, R_M,T, R_M+P_M,T, R_M,T
.word R_M+P_M,T, R_M,T, R_M+P_M,T, R_M,T+5
.word D_M+SP_M,2
.word 0,10
DS_END
#hhsk3pd ;Knee*3, piledriver
.asg 6,T
.word R_M+SK_M,T, R_M,T, R_M+SK_M,T, R_M,T
.word R_M+SK_M,T, R_M,T, R_M+SK_M,T, R_M,T
.word SP_M,2
.word 0,10
DS_END
#j2p .word L_M+D_M,2
#jp .word D_M,2, D_M+R_M,2, R_M,2, P_M,0
#j2sp .word L_M+D_M,2
#jsp .word D_M,2, D_M+R_M,2, R_M,2, SP_M,0
#jk .word D_M,2, D_M+R_M,2, R_M,2, K_M,0
#jkk .word D_M,2, D_M+R_M,2, R_M,2, K_M,4
.word 0,4, K_M,4, 0,4, K_M,4
.word 0,4, K_M,4, 0,4, K_M,0
#jisp .word U_M,2, U_M+R_M,2, R_M,2, SP_M,0
#jpx .word D_M,2, D_M+R_M,2, R_M,2, P_M,0
DS_RNDA sklrep_t
;FIX - chk
.word P_M,4, 0,4, P_M,4, 0,4, P_M,0
;Reversals
#uddsk
.word U_M,2, D_M,2, 0,2, D_M,2, SK_M,0
#uddskk ;Face slam/Pile drv
.word U_M,2, D_M,2, 0,2, D_M,2, SK_M,2
DS_RNDA sklrep_t
.word 0,8
.word K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4 ;Repeat
DS_RNDA sklrep_t
.word K_M,4, 0,4, K_M,4, 0,4, K_M,4, 0,4
.word K_M,4, 0,4, K_M,4, 0,4, K_M,0
#uddsksp ;Repeat SP
.word U_M,2, D_M,2, 0,2, D_M,2, SK_M,2
DS_RNDA sklrep_t
.word SP_M,4, 0,4, SP_M,4, 0,4, SP_M,0
#lrrp
.word L_M,2, R_M,2, 0,2, R_M,2, P_M,0
#lrrsp
.word L_M,2, R_M,2, 0,2, R_M,2, SP_M,0
#lrrk
.word L_M,2, R_M,2, 0,2, R_M,2, K_M,0
#spsk2
.word SP_M,2, SK_M,2, SP_M,2, SK_M,0
********************************
bret_l_t
raz_l_t
utak_l_t
yoko_l_t
shawn_l_t
bam_l_t
doink_l_t
lex_l_t
BBL -1,MODE_ONGROUND,#mdog
WL -1,#mdn
#mdn
; .word 1-1
; .long drn_climbtb
.word 4-1
.long drn_seek
.long #run
.long drn_climbtb
.long drn_taunt
#mdog
.word 3-1
.long drn_seek
.long drn_seek
.long #run
#*******************************
SUBRP drone_chrg
move *a13(DRN_BUTCHRG),a14
jrnz #x ;Already charging?
movk 20h,a0
callr rnd
move *a13(WRESTLERNUM),a1
X64 a1
addi #wres_t,a1
add a0,a1
move *a1,a1,L ;Get * script
move *a1+,a0
move a0,*a13(DRN_BUTCHRG)
;FIX!-all same
move *a1+,a0
move a0,*a13(DRN_BUTCHRGDLY)
move a1,*a13(DRN_BUTCHRG_p),L
#x
rets
#wres_t
.long #brt,#brt
.long #raz,#raz2
.long #ut,#ut2
.long #yok,#yok
.long #shn,#shn2
.long #bam,#bam2
.long #dnk,#dnk2
.long 0,0
.long #lex,#lex2
#raz
.word SP_M,TSEC*2 ;Slashes
DS_JMP #run
#ut
.word P_M,TSEC*2 ;Neck breaker
DS_JMP #run
#yok
.word P_M,TSEC*2 ;Salt throw
DS_CODE
movk 1,a0
move a0,*a13(DRN_MODE) ;Aggressive
DS_CODEEND
DS_JMP #run
#shn
.word P_M,TSEC*2 ;Suplex
DS_JMP #run
#bam
.word P_M,TSEC*2 ;Fire punch
DS_CODE
clr a0
move a0,*a13(DRN_BUTCHRG) ;Fire it
DS_CODEEND
.word 0,4
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4 ;Repeat
DS_RNDA sklrep_t
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
DS_RNDA sklrep_t
.word P_M,4, 0,4, P_M,4, 0,4, P_M,4, 0,4
.word P_M,4, 0,4, P_M,4, 0,4, P_M,0
#bam2
.word SP_M,TSEC*2 ;Neck brkr
DS_JMP #run
#dnk
.word P_M,TSEC*2 ;Buzzer
DS_JMP #run
#dnk2
.word P_M,TSEC*2 ;Buzzer (leap)
.word R_M,2
DS_CODE
clr a0
move a0,*a13(DRN_BUTCHRG) ;Fire it
DS_CODEEND
.word R_M,2 ;Need?
DS_END
#lex
.word P_M,TSEC*2 ;Smash
DS_JMP #run
#lex2
#brt
#raz2
#ut2
#shn2
.word SK_M,TSEC*2 ;Flying kick
; DS_JMP #run
#run
DS_CALL drone_chkrun
.word P_M+K_M,0 ;Run & end
DS_CODE
move *a13(OBJ_XPOSINT),a0
move *a8(OBJ_XPOSINT),a14
sub a14,a0
abs a0
cmpi 150,a0
jrge #rx ;X too far?
move *a13(OBJ_ZPOSINT),a1
move *a8(OBJ_ZPOSINT),a14
sub a14,a1
abs a1
cmpi 40,a1
jrge #rx ;Z too far?
clr a0
move a0,*a13(DRN_BUTCHRG) ;Fire it
#rx
DS_CODEEND
DS_END
#*******************************
SUBRP drn_combo
DS_CODE
move *a13(WRESTLERNUM),a0
X32 a0
addi #wres_t,a0
move a9,a1
move *a0,a9,L ;Get * script
jump a1 ;Ret
#wres_t
.long #brt,#raz,#ut,#yok
.long #shn,#bam,#dnk,#dnk,#lex
#brt
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#brt2
.word P_M,2
DS_JMP #cstrt
#brt2
.word SK_M,2
DS_JMP #cstrt
#raz
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#raz2
.word SP_M,2
DS_JMP #cstrt
#raz2
.word K_M,2
DS_JMP #cstrt
#ut
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#ut2
.word SK_M,2
DS_JMP #cstrt
#ut2
.word K_M,2
DS_JMP #cstrt
#yok
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#yok2
.word SP_M,2
DS_JMP #cstrt
#yok2
.word P_M,2
DS_JMP #cstrt
#shn
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#shn2
.word P_M,2
DS_JMP #cstrt
#shn2
.word K_M,2
DS_JMP #cstrt
#bam
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#bam2
.word SP_M,2
DS_JMP #cstrt
#bam2
.word P_M,2
DS_JMP #cstrt
#dnk
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#dnk2
.word SP_M,2
DS_JMP #cstrt
#dnk2
.word SK_M,2
DS_JMP #cstrt
#lex
.word R_M,2, 0,2, R_M,2, 0,2
DS_RJMP 50,#lex2
.word SK_M,2
DS_JMP #cstrt
#lex2
.word K_M,2
DS_JMP #cstrt
.asg 6,T
#cstrt
.word 0,2
DS_RJMP 25,#csk
DS_RJMP 25,#cp
DS_RJMP 25,#ck
#csp
.word SP_M,T, 0,T, SP_M,T, 0,T
.word SP_M,T, 0,T, SP_M,T, 0,T
DS_RNDA sklrep_t
DS_JMP #cstrt
#csk
.word SK_M,T, 0,T, SK_M,T, 0,T
.word SK_M,T, 0,T, SK_M,T, 0,T
DS_RNDA sklrep_t
DS_JMP #cstrt
#cp
.word P_M,T, 0,T, P_M,T, 0,T
.word P_M,T, 0,T, P_M,T, 0,T
DS_RNDA sklrep_t
DS_JMP #cstrt
#ck
.word K_M,T, 0,T, K_M,T, 0,T
.word K_M,T, 0,T, K_M,T, 0,T
DS_RNDA sklrep_t
DS_JMP #cstrt
#*******************************
#lp
DS_CODEEND
DS_SLP1
SUBRP drn_seek
DS_CODE
move b6,a0
jrz #skok
subk MODE_BLOCK,a0
jrne #x
#skok
movi 3fh,a0
callr rnd
jrz #x
callr drone_seek
jrnz #lp
#x
DS_CODEEND
DS_END
#*******************************
* Get real close
#lp
DS_CODEEND
DS_SLP1
SUBRP drn_seekclose
DS_CODE
move b6,a0
jrz #skok
subk MODE_BLOCK,a0
jrne #x
#skok
movi 3fh,a0
callr rnd
jrz #x
move *a13(OBJ_XPOSINT),a14
movk 32,a2
move *a8(OBJ_XPOSINT),a0
cmp a0,a14
jrge #torgt
neg a2
#torgt
add a2,a0
move *a8(OBJ_ZPOSINT),a1
movk 23,a2
callr drone_seekxz
jrnz #lp
#x
DS_CODEEND
DS_END
#*******************************
SUBRP drn_retreat
DS_CODE
movk 4,a0 ;Far
move a0,*a13(DRN_SEEKDIST)
#lp
callr drone_seekdirdist
DS_CODEEND
DS_SLP1
DS_CODE
movk 1fh,a0
callr rnd
jrnz #lp
DS_CODEEND
DS_END
#*******************************
* Check if running would be OK
* A9+32 if bad
SUBRP drone_chkrun
move *a13(OBJ_XPOSINT),a0
move *a13(OBJ_ZPOSINT),a1
move *a13(FACING_DIR),a2
move *a13(INRING),a14
jrnz #out ;Out of ring?
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmpi MODE_ONGROUND,b7
jreq #x
; subk MODE_INAIR2,a14
; jreq #x ;Jumping on me?
move *a13(CLOSEST_ZDIST),a1
cmpi 70,a1
jrge #x ;Z far enough?
subk 30,a1
jrle #x ;Z close enough?
move *a13(CLOSEST_XDIST),a0
cmpi 150,a0
jrge #x ;X far enough?
; btst PLAYER_RIGHT_BIT,a2
; jrz #l ;Facing left?
jruc #bad
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#out
btst PLAYER_RIGHT_BIT,a2
jrz #ol ;Facing left?
cmpi RING_X_CENTER+500,a0
jrge #bad ;Hit rgt crowd?
cmpi RING_TOP-10,a1
jrlt #rrok
cmpi RING_BOT+10,a1
jrgt #rrok
cmpi RING_X_CENTER,a0
jrge #rrok
cmpi RING_X_CENTER-300,a0
jrge #bad ;Hit rgt ring?
#rrok
jruc #x
#ol
cmpi RING_X_CENTER-500,a0
jrle #bad ;Hit lft crowd?
cmpi RING_TOP-10,a1
jrlt #lrok
cmpi RING_BOT+10,a1
jrgt #lrok
cmpi RING_X_CENTER,a0
jrle #lrok
cmpi RING_X_CENTER+300,a0
jrle #bad ;Hit lft ring?
#lrok
;FIX!
jruc #x
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#bad
addk 32,a9 ;Skip script run buttons
#x
rets
#*******************************
* Control runner
#rsk
movk 10,a2
callr drone_seek2
andni MOVE_LEFT+MOVE_RIGHT,a0 ;0 lft & rgt
move a0,*a13(DRN_JOY)
DS_CODEEND
DS_SLP1
SUBRP drn_run
DS_CODE
move b6,a0
subk MODE_RUNNING,a0
jreq #mdok
subk MODE_BOUNCING-MODE_RUNNING,a0
jrne #abrt
#mdok
movi 01ffh,a0 ;9.6 sec
callr rnd
jrz #brkrun ;Breakout?
move *a13(OBJ_XVEL+16),a4
sll 3,a4 ;*8
move *a8(OBJ_XVEL+16),a1
sll 5,a1 ;*32
move *a8(OBJ_XPOSINT),a0
add a1,a0
move *a13(OBJ_XPOSINT),a1
add a4,a1
move a1,a3
sub a1,a0
move a4,a1
xor a0,a1
abs a0
move *a13(CLOSEST_ZDIST),a2
move *a13(INRING),a14
jrz #inr ;In ring?
cmpi 300,a0
jrgt #ering ;Too far?
move a1,a1
jrn #brkrun ;Running away?
subk 30,a2
jrgt #brkseek ;Too far?
jruc #cont
#inr
move a4,a4
jrn #lrp ;Towards L rope?
cmpi RING_X_CENTER+210,a3
jrlt #rpok ;Won't hit R rope?
jruc #chkopp
#lrp
cmpi RING_X_CENTER-210,a3
jrgt #rpok ;Won't hit L rope?
#chkopp
move *a8(GETUP_TIME),a14
jrgt #rpok ;Out of control?
cmpi MODE_ONGROUND,b7
jreq #rpok
cmpi 300,a0
jrgt #rpok ;Opp X far?
cmpi MODE_RUNNING,b7
jreq #oprun
cmpi 180,a0
jrgt #rpok ;Opp X far?
#oprun
cmpi 90,a2
jrlt #brkrun ;Opp Z close?
#rpok
move a1,a1
jrn #rsk ;Running away?
#cont
cmpi MODE_INAIR2,b7
jreq #brkrun
subk 30,a2
jrgt #rsk ;Z too far?
cmpi 250,a0
jrgt #rsk ;X too far?
move a0,a2
movi 120,a0
callr rndrng0
addi 130,a0
cmp a0,a2
jrgt #rsk ;X too far?
; movk 3,a0
; callr rnd
; jrz #igpup ;25% ignore?
move b7,a0
subk MODE_PUPPET2,a0
jreq #brkrun
subk MODE_PUPPET-MODE_PUPPET2,a0
jreq #brkrun
cmpi MODE_HEADHELD,b7
jreq #brkrun
cmpi MODE_HEADHOLD,b7
jreq #brkrun
cmpi MODE_ATTACHED,b7
jreq #brkrun
;#igpup
move *a13(DRN_BUTCHRG),a0
jrz #nchrg
move *a13(DRN_BUTCHRGDLY),a0
jrgt #nchrg
clr a0
move a0,*a13(DRN_BUTCHRG) ;Fire it
jruc #abrt
#nchrg
DS_CODEEND
DS_RJMP 33,#k
DS_RJMP 33,#sk
.word SP_M,0
#k .word K_M,0
#sk .word SK_M,0
#abrt
DS_CODEEND
DS_END
#brkrun
DS_CODEEND
.word L_M,0
#ering
DS_CODEEND
.word L_M,2
DS_JMP drn_enterring
#brkseek
DS_CODEEND
.word L_M,2
DS_JMP drn_seek
#*******************************
* Opponent running
SUBRP drn_oprun
DS_CODE
movk 7,a0
callr rnd
jrnz #abrt ;Skip?
move *a8(OBJ_XPOSINT),a0
move *a13(OBJ_XPOSINT),a1
; move a1,a3
sub a1,a0
move *a8(OBJ_XVEL+16),a1
; move a1,a4
xor a0,a1
abs a0
move *a13(CLOSEST_ZDIST),a2
cmp a0,a2
jrgt #abrt ;Z dist > X dist?
move a1,a1
jrn #run ;Running away?
move *a8(GETUP_TIME),a14
jrgt #run ;Out of control?
#abrt
DS_CODEEND
DS_END
#run
DS_CODEEND
.word P_M+K_M,0 ;Run
#*******************************
SUBRP drn_roll
DS_CODE
callr drone_chrg
jruc #strt
#lp
DS_CODEEND
DS_SLP1
DS_CODE
#strt
cmpi MODE_ONGROUND,b6
jrne #x
move *a13(CLOSEST_XDIST),a0
cmpi 150,a0
jrgt #x ;Safe dist?
move *a13(CLOSEST_ZDIST),a0
cmpi 70,a0
jrgt #x ;Safe dist?
clr a2
callr drone_seek2
jrz #x
movk 3,a1 ;Flip up & down
xor a1,a0
move a0,*a13(DRN_JOY)
movi 7fh,a0
callr rnd
jrnz #lp
#x
DS_CODEEND
.word B_M,TSEC-10 ;Block while standing
DS_END
#*******************************
* Climb closest turnbuckle
SUBRP drn_climbtb
DS_CODE
move b3,a0
subk 1,a0
jrle #lp ;Only 1 on team?
movk 1,a0
callr rnd
jrnz #x ;Skip 50%?
#lp
DS_CODEEND
DS_SLP1
SUBRP drn_ontb
DS_CODE
move b7,a2
cmpi MODE_ONTURNBKL,b6
jrne #not
subk MODE_ONTURNBKL,a2
jreq #dn ;He's up, so get dn?
jruc #jmp
#not
move *a13(INRING),a0
jrnz #ering ;!In ring?
move *a13(WRESTLERNUM),a0
subk 3,a0
jrne #ny ;!Yoko?
move *a8(INRING),a0
jrnz #x ;!In ring?
#ny
subk MODE_ONTURNBKL,a2
jreq #x
subk MODE_INAIR2-MODE_ONTURNBKL,a2
jreq #x
movi RING_X_CENTER-225,a0
move *a13(OBJ_XPOSINT),a1
cmpi RING_X_CENTER,a1
jrle #lrp
movi RING_X_CENTER+225,a0
#lrp
move a0,a3
movi RING_TOP,a1
movk 32,a2
callr drone_seekxz ;Seek to visinity
jrnz #nclose
move a3,a0
movi RING_TOP-10,a1
clr a2
callr drone_seekxz ;Push into turnbuckle
#nclose
move *a13(CLOSEST_XDIST),a0
cmpi 120,a0
jrgt #lp ;Safe dist?
move *a13(CLOSEST_ZDIST),a0
cmpi 70,a0
jrgt #lp ;Safe dist?
#x
DS_CODEEND
DS_END
#jmp
clr a6 ;So we get dn transition
DS_CODEEND
.word K_M,0
#dn
DS_CODEEND
.word D_M,0
#ering
DS_CODEEND
DS_JMP drn_enterring
#*******************************
* I'm in air
#lp
DS_CODEEND
DS_SLP1
SUBRP drn_inair
DS_CODE
clr a2
callr drone_seek2
cmpi MODE_INAIR2,b6
jreq #lp
DS_CODEEND
DS_END
#*******************************
* Opponent in air
SUBRP drn_opinair
DS_CODE
movk 1,a0
callr rnd
jrnz #run ;Skip?
#lp
cmpi MODE_INAIR2,b7
jrne #k
DS_CODEEND
DS_SLP1
DS_CODE
move *a13(CLOSEST_XDIST),a1
move *a13(CLOSEST_ZDIST),a14
cmp a1,a14
jrge #big
move a1,a14
#big
cmpi 150,a14
jrgt #lp ;Opp far?
#k
DS_CODEEND
.word K_M,0 ;Jump up
#run
DS_CODEEND
.word L_M+P_M+K_M,2 ;Run away
DS_END
#*******************************
* Enter ring at closest entry point
#lp
DS_CODEEND
DS_SLP1
SUBRP drn_enterring
DS_CODE
move *a8(INRING),a0
jrnz #x ;Opp out?
move *a13(INRING),a0
jrz #x ;In ring?
move *a13(OBJ_XPOSINT),a14
movi RING_Z_CENTER,a1
movi RING_X_CENTER-260,a0
cmp a0,a14
jrle #sk
movi RING_X_CENTER+260,a0
cmp a0,a14
jrge #sk
move *a13(OBJ_ZPOSINT),a14
movi RING_X_CENTER,a0
movi RING_TOP-10,a1
cmp a1,a14
jrle #sk
movi RING_BOT+10,a1
#sk
movk 10,a2
callr drone_seekxz ;Seek to visinity
jrnz #lp
DS_CODEEND
.word P_M+SP_M+K_M+SK_M+B_M,0 ;Enter
#x
DS_CODEEND
DS_END
#*******************************
SUBRP drn_taunt
DS_CODE
move *a8(OBJ_ZPOSINT),a0
move *a13(OBJ_ZPOSINT),a1
sub a1,a0
cmpi 100,a0
jrlt #x
move *a8(OBJ_XPOSINT),a0
move *a13(OBJ_XPOSINT),a1
sub a1,a0
abs a0
cmpi 300,a0
jrgt #x
;Time to execute high-risk move!
movi 8000h+6*60,a0
move a0,*a13(RISK)
move *a13(WRESTLERNUM),a0
X32 a0
addi #taunt_t,a0
move *a0,a0,L
calla change_anim1a
#x
DS_CODEEND
DS_END
#taunt_t
.long hrt_4_taunt_anim ;0 Bret Hart
.long rzr_4_taunt_anim ;1 Razor Ramon
.long und_4_taunt_anim ;2 Undertaker
.long yok_4_taunt_anim ;3 Yokozuna
.long shn_4_taunt_anim ;4 Shawn Michaels
.long bam_4_taunt_anim ;5 Bam Bam
.long dnk_4_taunt_anim ;6 Doink
.long 0 ;7 spare
.long lex_4_taunt_anim ;8 Lex Luger
#*******************************
SUBRP drn_oppdead
DS_CODE
#lp
clr a0 ;Close
move a0,*a13(DRN_SEEKDIR)
move a0,*a13(DRN_SEEKDIST)
callr drone_seekdirdist
DS_CODEEND
DS_SLP1
DS_CODE
movk 32,a1
move *a13(WRESTLERNUM),a0
subk 2,a0
jreq #ut ;Undertaker?
movi 90,a1
#ut
move *a13(CLOSEST_DIST),a0
cmp a1,a0
jrle #x
; jruc #notut
move *a8(ANIMODE),a0 ;Let ut walk through dead opps
ori MODE_OVERLAP,a0
move a0,*a8(ANIMODE)
#notut
move *a13(DRN_JOY),a0
jrnz #lp
#x
DS_CODEEND
.word P_M,0
#*******************************
* Push stick to move drone towards his opp dir/dist seek position
* A7 = Old joy bits
* A8 = *Closest opp proc
* Trashes scratch, A2-A5
SUBRP drone_seekdirdist
move *a13(DRN_SEEKDIR),a4 ;0-f
move *a13(DRN_SEEKDIST),a3 ;0-4
move a3,a0
X16 a3
X4 a0
add a0,a3 ;*20
move a4,a2
callr #drn_getxz
jrnz #ok
movk 7,b0
move a4,a5
#lp
addk 1,a4
sll 32-4,a4
srl 32-4,a4
move a4,a2
callr #drn_getxz
jrnz #newok
subk 1,a5
sll 32-4,a5
srl 32-4,a5
move a5,a2
callr #drn_getxz
jrnz #new5ok
dsj b0,#lp
clr a0
move a0,*a13(DRN_JOY)
rets
#new5ok
move a5,a4
#newok
move a4,*a13(DRN_SEEKDIR)
#ok
movk 30,a2
callr drone_seekxz
jrnz #x
move *a13(DRN_MODE),a0
addk 1,a0
jrge #x ;Was -1? Skip dir change
move a7,*a13(DRN_JOY) ;Restore to lessen glitch
movk 3,a0 ;>Get rnd +-2/3
callr rnd
subk 1,a0
jrnz #rnz
subk 2,a0 ;0 into -2
#rnz
addk 1,a0
jrgt #rpos
subk 2,a0
#rpos
add a0,a4
sll 32-4,a4
srl 32-4,a4
move a4,*a13(DRN_SEEKDIR)
#x
rets
#drn_getxz
add a3,a2
X16 a2
addi #sine_t,a2
move *a2(4*16),a14
move *a8(OBJ_XPOSINT),a0
add a14,a0
cmpi RING_X_CENTER-220,a0
jrlt #xzbad
cmpi RING_X_CENTER+220,a0
jrgt #xzbad
move *a2,a14
move *a8(OBJ_ZPOSINT),a1
add a14,a1
cmpi RING_TOP,a1
jrlt #xzbad
cmpi RING_BOT,a1
jrle #xzok
#xzbad
clr a2 ;Set Z
#xzok
move a2,a2
rets
#sine_t
.word -50,-46,-35,-19
.word 0,19,35,46,50,46,35,19
.word 0,-19,-35,-46,-50,-46,-35,-19
.word -100,-92,-71,-38
.word 0,38,71,92,100,92,71,38
.word 0,-38,-71,-92,-100,-92,-71,-38
.word -150,-139,-106,-57
.word 0,57,106,139,150,139,106,57
.word 0,-57,-106,-139,-150,-139,-106,-57
.word -200,-185,-141,-76
.word 0,76,141,185,200,185,141,76
.word 0,-76,-141,-185,-200,-185,-141,-76
.word -250,-231,-177,-95
.word 0,95,177,231,250,231,177,95
.word 0,-95,-177,-231,-250,-231,-177,-95
.word -300,-277,-212,-115
.word 0,114,212,277,300,277,212,114
.word 0,-114,-212,-277,-300,-277,-212,-115
#*******************************
* Push stick to move drone towards closest opp
SUBRP drone_seek
movi 70,a2
SUBRP drone_seek2
move *a8(OBJ_XPOSINT),a0
move *a8(OBJ_ZPOSINT),a1
#*******************************
* Push stick to move drone towards an XZ location
* A0 = X to seek
* A1 = Z
* A2 = Range to stop
* A13= *Plyr proc
*>A0 = Joy bits set or 0 (Pass CC)
* Trashes scratch
SUBRP drone_seekxz
move a3,b0
move *a13(OBJ_XPOSINT),a3
sub a0,a3
clr a0
move a3,a14
abs a3
sub a2,a3
jrle #onx
move a14,a14
jrlt #nolft
subk 4,a0 ;Left
#nolft addk 8,a0 ;Rgt
#onx
move *a13(OBJ_ZPOSINT),a3
sub a1,a3
move a3,a14
abs a3
sub a2,a3
jrle #onz
move a14,a14
jrlt #noup
subk 1,a0 ;Up
#noup addk 2,a0 ;Dn
#onz
move a0,*a13(DRN_JOY)
move b0,a3
move a0,a0
rets
#*******************************
* Adjust drone skill level (called each round)
* 8 is typical starting difficulty
* A13 = *Plyr proc
* Trashes scratch, A2-A5
SUBR drone_calcskill
move *a13(PLYR_TYPE),a0
jrz #x ;Human?
move *a13(DRN_SKILLRNDM),a0
move @current_round,a3 ;1-3
subk 1,a3
jrgt #n1st
movk 4,a0
callr rndrng0
subk 2,a0
move a0,*a13(DRN_SKILLRNDM)
#n1st
move @CURRENT_LADDER,a5,L ;* to position
subi LADDER,a5
sra 5,a5 ;/32 (Gives 0-6)
move a5,a1
sra 1,a1 ;0-3
add a1,a5 ;A5=0-9
add a0,a5 ;-2 to 2 randomness
clr a4
move @PSTATUS,a0
btst 0,a0
jrnz #p1
movk 16,a4
#p1
movi p1winstreakd,a0
add a4,a0
move *a0,a0
jrlt #loser ;Lost? (-2 per match lost)
X2 a0
; add a0,a5 ;+1 per match won
; add a0,a5 ;+1 per match won
add a0,a5 ;+1 per match won
#loser
X2 a0
add a0,a5 ;+2 per match won
; X2 a0
; add a0,a5 ;+2 per match won
;#loser
; X2 a0
; add a0,a5 ;+4 per match won
movi p1rounds,a0
add a4,a0
move *a0,a0
add a0,a5 ;+3 per round won
X2 a0
add a0,a5
X2 a3
sub a3,a5 ;-2 per round past 1st
movk ADJDIFF,a0 ;Get difficulty level (1-10)
calla GET_ADJ
subk 2,a0
X2 a0
add a0,a5 ;+8 default
jrge #minok
clr a5
#minok
cmpi 29,a5
jrle #maxok
movk 29,a5
#maxok
move a5,*a13(DRN_SKILL)
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >Clr attack count
clr a0
movi atkcnt_t,a1
movi AT_NUM*NUM_WRES,b0
#aclp
move a0,*a1+
dsj b0,#aclp
#x
rets
********************************
* Get random # with mask
* A0 = Mask
*>A0 = Rnd # (Pass CC)
* Trashes scratch
SUBRP rnd
move @RAND,a1,L
rl a1,a1
move @HCOUNT,a14
rl a14,a1
add sp,a1
move a1,@RAND,L
and a1,a0
rets
********************************
* Quickly produce a random # in range 0-X
* A0 = X
*>A0 = Random # (0 to A0) (No CC)
* Trashes scratch
SUBRP rndrng0
move @RAND,a1,L
rl a1,a1
move @HCOUNT,a14
rl a14,a1
add sp,a1
move a1,@RAND,L
addk 1,a0
mpyu a1,a0 ;Condition codes not valid!
rets
********************************
.end