5303 lines
86 KiB
NASM
Executable File
5303 lines
86 KiB
NASM
Executable File
**************************************************************
|
||
*
|
||
* Software: Shawn Liptak, Mark Turmell
|
||
* Initiated: 9/17/92
|
||
*
|
||
* Modified: Shawn Liptak, 10/5/92 -Split from plyr.asm
|
||
*
|
||
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 3/17/93 17:54
|
||
**************************************************************
|
||
.file "plyr2.asm"
|
||
.title "basketball player code"
|
||
.width 132
|
||
.option b,d,l,t
|
||
.mnolist
|
||
|
||
|
||
.include "mproc.equ" ;Mproc equates
|
||
.include "disp.equ" ;Display proc equates
|
||
.include "gsp.equ" ;Gsp asm equates
|
||
.include "sys.equ"
|
||
.include "audit.equ"
|
||
.include "imgtbl.glo"
|
||
.include "game.equ"
|
||
.include "shawn.hdr" ;Macros
|
||
.asg 0,SEQT
|
||
.include "plyr.equ"
|
||
.include "ball.tbl"
|
||
|
||
|
||
;sounds external
|
||
|
||
.ref snd_play1ovr
|
||
.ref snd_play1ovrp
|
||
|
||
|
||
facial_snd .word >f990,93,>81ee,0 ;Delivers the
|
||
ohmy .word >f981,98,>81ea,0 ;oh my!
|
||
stealsb .word >f990,80,>81f3,0 ;steals the ball
|
||
intercept .word >f991,59,>81a9,0 ;Intercepted
|
||
intostands .word >f970,74,>81c7,0 ;into the stands
|
||
bounce_snd .word >fc80,10,>8129,0 ;Ball bounce
|
||
swish_snd .word >fca0,30,>8112,0 ;Ball swish
|
||
dunk_snd .word >fca4,30,>8120,0 ;Dunk
|
||
|
||
;fc80 was old priority!
|
||
miss_snd .word >fc90,10,>813b,0 ;Ball hits rim
|
||
miss2_snd .word >fd90,10,>8139,0 ;Ball hits rim
|
||
miss3_snd .word >fc90,10,>813a,0 ;Ball hits rim
|
||
missd1_snd .word >fc90,>8,>8128,0 ;Cartoon part of missed dunk
|
||
|
||
hitbboard_snd .word >fcf5,05,>8138,0 ;Hit backboard
|
||
swat_snd .word >fd94,15,>8157,0 ;Swat ball (Steals & blocks)
|
||
swat3_snd .word >fd94,18,>8155,0
|
||
cheer_snd .word >f898,40,>8144,0 ;Quick cheer
|
||
cheer1_snd .word >fd84,100,>8111,0 ;Long cheer
|
||
cheer2_snd .word >f894,100,>8144,0 ;Long cheer
|
||
cheer3_snd .word >fc84,130,>814e,0 ;Long cheer
|
||
boo1_snd .word >f884,120,>814a,0 ;Boo
|
||
steal_snd .word >fbf7,>8,>8093,0 ;Steal
|
||
anncr3_snd .word >f1f8,100,>8182,0 ;And it's good
|
||
explode_snd .word >fcf9,250,>8153,0 ;Backboard smash
|
||
;glass_snd .word >fdf9,120,>815d,0 ;Backboard glass breakage
|
||
|
||
;RJR
|
||
;heatup_snd .word >f998,60,>8168,0 ;He's heating up
|
||
;onfire_snd .word >f998,74,>8169,0 ;He's on fire
|
||
onfire_snd .word >f9fe,74,>8169,0 ;He's on fire
|
||
nogood .word >f981,58,>81f1,0 ;NO GOOD!
|
||
|
||
;symbols externally defined
|
||
|
||
.ref plyr_maxpower
|
||
.ref shot_percentage
|
||
.ref gmqrtr,FIREFALP
|
||
.ref w1blok3,w2blok3,w4blok3,w5blok3
|
||
.ref w1blok2,w2blok2,w4blok2,w5blok2
|
||
.ref shot_distance
|
||
|
||
.ref AUD1,AUD
|
||
.ref nogood_speech,GAMSTATE
|
||
.ref speech_playovrp
|
||
|
||
.ref pushed_speech
|
||
.ref rejected_speech
|
||
.ref rejected_dnk_speech
|
||
.ref rebound_speech
|
||
.ref intercepted_speech
|
||
.ref stolen_speech
|
||
|
||
.ref rebound_delay
|
||
.ref pushing_delay
|
||
.ref team1
|
||
|
||
.ref shot_type
|
||
.ref shoots_speech,scored_speech
|
||
|
||
.ref steals_off
|
||
.ref pass_off
|
||
.ref RNDRNGS,PSTATUS
|
||
|
||
.ref game_time
|
||
.ref scores,prt_top_scores
|
||
.ref score_add,score_showtvpanel
|
||
.ref stick_number
|
||
.ref sclockx,sc_proc
|
||
; .ref movie_test
|
||
.ref net_ani
|
||
.ref arw_on1plyr
|
||
|
||
.ref pal_getf
|
||
|
||
.ref PCNT
|
||
.ref HALT
|
||
.ref scale58_t,scale66_t,scale72_t
|
||
.ref gndx
|
||
.ref RNDPER
|
||
.ref SHAKER
|
||
.ref GET_ADJ
|
||
|
||
.ref plyrobj_t,plyrproc_t
|
||
.ref P1DATA,P2DATA,P3DATA,P4DATA
|
||
.ref plyrcharge
|
||
.ref plyrpasstype
|
||
.ref plyrairballoff
|
||
.ref ball_smokepuff
|
||
|
||
.ref seekdir_xyxy128
|
||
.ref seekdirdist_obxz128
|
||
.ref plyr_setseq,plyr_takeoutball
|
||
; .ref plyr_freethrow
|
||
.ref plyr_goaltending
|
||
.ref plyr_setshtdly
|
||
|
||
.ref inc_player_stat
|
||
|
||
|
||
;symbols defined in this file
|
||
|
||
.def ball101
|
||
|
||
.def hoopl_t,hoopr_t
|
||
|
||
|
||
;uninitialized ram definitions
|
||
|
||
BSSX plyrnumonfire ,16 ;Plyr # on fire (0-3) or Neg
|
||
BSSX ballobj_p ,32 ;* basketball obj
|
||
BSSX ballpnum ,16 ;Plyr # who owns (0-3) or Neg
|
||
BSSX ballpnumlast ,16 ;Last plyr who owned ^ (0-3) or neg if loose
|
||
BSSX ballpnumshot ,16 ;Last plyr who shot (0-3)
|
||
BSSX ballsclastp ,16 ;Last plyr who owned (0-3) for shot clock
|
||
|
||
;Keep in order!
|
||
BSSX ballpnumscored ,16 ;Last plyr who scored (0-3) or neg
|
||
BSSX ballnumscored ,16 ;# times last plyr scored
|
||
|
||
BSSX ballfree ,16 ;!0=Ball free to move
|
||
BSSX ballscorezhit ,16 ;!0=Ball hit score zone, +=Top z, -=Scored
|
||
|
||
BSSX ballrimhitcnt ,16 ;# times rim hit since last shot
|
||
BSSX ballbbhitcnt ,16 ;# times backboard hit since last shot
|
||
|
||
BSSX ballptsforshot ,16 ;Point value for current shot (1-3)
|
||
BSSX ballprcv_p ,32 ;*Plyr proc who gets this pass or 0
|
||
BSSX ballpasstime ,16 ;# ticks since passed
|
||
BSSX ballgoaltcnt ,16 ;+=Goaltend cnt down
|
||
BSSX ballflash ,16 ;!0=Ball flashing
|
||
BSSX inbound ,16 ;Inbounding team (0-1) or Neg
|
||
BSSX bbshatter ,16 ;!0=Backboard shattered (+=L, -=R)
|
||
|
||
BSSX cntl_team ,16 ;Team in control (0,1,-1)
|
||
BSSX cntl_team_last ,16 ;Team in control (0,1,-1)
|
||
BSSX scrl_divs_cur ,16 ;Scroller current divisor
|
||
BSSX scrl_divs_dest ,16 ;^ destination divisor
|
||
|
||
; .bss movieshown ,16 ;!0=Movie has been played
|
||
|
||
BSSX slamming ,16 ;!0=Ball going into rim from dunking
|
||
|
||
BSSX t1dunkcnt ,16 ;+=# dunks since start of game (In order)
|
||
.bss t2dunkcnt ,16 ;^ -=# dunks till we can break board
|
||
|
||
BSSX brick_count ,4*16 ;# bricks each player has thrown up
|
||
BSSX last_power ,16 ;Player pushing has this power
|
||
|
||
BSSX original_names ,4*32 ;Names of original players in game
|
||
BSSX fire_flags ,16 ;1 if this player has been on fire (1,2,4,8)
|
||
|
||
;equates for this file
|
||
|
||
|
||
.text
|
||
|
||
|
||
#*******************************
|
||
* Ball main code (Process)
|
||
|
||
STRUCTPD
|
||
WORD ball_anix ;X anipt offset
|
||
WORD ball_aniy ;Y ^
|
||
APTR ball_ani1st_p ;*1st ani_l pos
|
||
APTR ball_ani_p ;*Current ani_l pos
|
||
WORD ball_zsznum ;Z size # 0-?
|
||
WORD ball_collcnt ;# of collisions in a row
|
||
; LONG ball_oldx ;Last good X before collision
|
||
; LONG ball_oldy ;^ Y
|
||
; LONG ball_oldz ;^ Z
|
||
WORD ball_xscrllmin ;
|
||
WORD ball_xscrllmax ;
|
||
WORD ball_onfire ;!0=Flaming
|
||
|
||
push1_snd .word >fd85,15,>8160,0 ;Push ugh
|
||
|
||
SUBR ball_main
|
||
|
||
|
||
move a13,a1 ;>Clr PDATA & PSDATA areas
|
||
addi PDATA,a1
|
||
movi (PRCSIZ-PDATA)/16,a2
|
||
clr a0
|
||
#clrpd move a0,*a1+
|
||
dsj a2,#clrpd
|
||
|
||
|
||
move @WORLDTLX+16,a0
|
||
addi 200,a0
|
||
sll 16,a0
|
||
movi [-80,0],a1 ;In air
|
||
movi ball11,a2
|
||
movi CZMID,a3
|
||
movi DMAWNZ|M_3D|M_NOSCALE,a4
|
||
movi CLSENMY|TYPBALL,a5
|
||
clr a6
|
||
movi ->20000,a7
|
||
calla BEGINOBJ2
|
||
move a8,@ballobj_p,L
|
||
callr ball_getshadow
|
||
|
||
clr a0
|
||
move a0,@ballpnumshot
|
||
move a0,@ballscorezhit
|
||
move a0,@ballgoaltcnt
|
||
move a0,@ballflash
|
||
move a0,@t1dunkcnt
|
||
move a0,@t2dunkcnt
|
||
movi -1,a0
|
||
move a0,@ballpnum
|
||
move a0,@ballpnumlast
|
||
|
||
;RJR
|
||
move a0,@brick_count,L
|
||
move a0,@brick_count+20h,L
|
||
|
||
|
||
move a0,@ballpnumscored
|
||
|
||
move a0,*a13(ball_zsznum)
|
||
move a0,@bbshatter
|
||
movk 1,a0
|
||
move a0,@ballfree ;Free
|
||
|
||
; movk 3,a0
|
||
; move a0,*a13(ball_numforfire)
|
||
|
||
move *a8(OIMG),a0,L
|
||
move *a0(IANIOFFX),*a13(ball_anix)
|
||
|
||
movk 1,a10 ;A10=Anim cntdn
|
||
|
||
movi DIVS_RATE1,a0
|
||
move a0,@scrl_divs_cur
|
||
movi DIVS_RATE2,a0
|
||
move a0,@scrl_divs_dest
|
||
|
||
move @WORLDTLX,a0,L
|
||
subi [WRLDMID-200,0],a0
|
||
move a0,@gndx,L
|
||
|
||
SLEEPK 4 ;Wait for others to establish data
|
||
|
||
;----------
|
||
|
||
#lp
|
||
move @HALT,a0
|
||
jrnz #halted
|
||
|
||
|
||
move @ballgoaltcnt,a0
|
||
jrle #skipgt
|
||
subk 1,a0
|
||
move a0,@ballgoaltcnt
|
||
#skipgt
|
||
|
||
clr a14 ;>Emit smoke if hot
|
||
movi -1,a2
|
||
move @ballnumscored,a0
|
||
|
||
move @ballpnumscored,a4
|
||
move @fire_flags,a3
|
||
btst a4,a3
|
||
jrz #normfire
|
||
;4 shots to get on fire if already on fire
|
||
subk 4,a0
|
||
jruc #inhr
|
||
|
||
#normfire
|
||
subk 3,a0
|
||
#inhr
|
||
jrlt #nothot ;Not enough?
|
||
|
||
|
||
|
||
|
||
;When testing dunks - PUT IN!
|
||
; jruc #nothot
|
||
|
||
|
||
|
||
move @ballpnumscored,a0
|
||
move a0,a2
|
||
move @ballpnum,a1
|
||
jrn #noownr
|
||
|
||
move @plyrnumonfire,a3
|
||
cmp a1,a3
|
||
jrz #nxt
|
||
|
||
clr a3
|
||
move a3,*a13(ball_onfire)
|
||
jruc #nothot
|
||
#nxt
|
||
|
||
cmp a0,a1
|
||
jrne #nothot
|
||
sll 5,a1
|
||
addi plyrproc_t,a1
|
||
move *a1,a1,L
|
||
move *a1(plyr_seqflgs),a1
|
||
btst DUNK_B,a1
|
||
jrnz #hot2 ;Dunking?
|
||
jruc #hotf
|
||
#noownr
|
||
move @plyrnumonfire,a3
|
||
move @ballpnumlast,a1
|
||
srl 1,a1
|
||
srl 1,a3
|
||
cmp a1,a3
|
||
jrnz #nothot
|
||
|
||
move @plyrnumonfire,a3
|
||
move @ballpnumshot,a1
|
||
cmp a1,a3
|
||
jrz #hot
|
||
cmp a0,a1
|
||
jrne #nota
|
||
move @ballprcv_p,a4,L
|
||
jrz #ahot
|
||
move *a4(plyr_num),a4
|
||
cmp a3,a4
|
||
jrz #nothot
|
||
jruc #hot
|
||
#nota
|
||
move @ballprcv_p,a4,L
|
||
jrz #nothot
|
||
move *a4(plyr_num),a4
|
||
cmp a3,a4
|
||
jrnz #hot
|
||
jruc #nothot
|
||
|
||
#ahot cmp a1,a3
|
||
jrnz #nothot
|
||
|
||
#hot
|
||
#hot2
|
||
move @PCNT,a0
|
||
sll 32-1,a0
|
||
jrnz #hotf
|
||
CREATE0 ball_smokepuff
|
||
#hotf movk 1,a14
|
||
#nothot
|
||
|
||
move @plyrnumonfire,a0
|
||
jrnn #skip
|
||
move a2,a2
|
||
jrn #skipsnd
|
||
|
||
move @GAMSTATE,a0
|
||
cmpi INAMODE,a0
|
||
jrz #noaud
|
||
movi AUD_NUMHOTSTRK,a0
|
||
calla AUD1
|
||
#noaud
|
||
|
||
move a2,a0
|
||
sll 3,a0
|
||
addi #bit_t,a0
|
||
movb *a0,a0
|
||
move @fire_flags,a14
|
||
or a0,a14
|
||
; move a14,@fire_flags
|
||
|
||
movk 4,a0
|
||
move a0,@ballnumscored
|
||
|
||
movi onfire_snd,a0
|
||
calla speech_playovrp
|
||
|
||
#skipsnd
|
||
move a2,@plyrnumonfire ;Save pnum
|
||
#skip
|
||
move @ballpnum,a1
|
||
jrnn #ck1
|
||
move @ballpnumlast,a1
|
||
jrn #clrball
|
||
#ck1
|
||
cmp a0,a1
|
||
jrz #fireit
|
||
|
||
#clrball
|
||
clr a14
|
||
clr a0
|
||
jruc #setb
|
||
|
||
#bit_t .byte 1,2,4,8
|
||
|
||
#fireit movk 1,a14
|
||
movi -1,a0
|
||
#setb
|
||
move a14,*a13(ball_onfire)
|
||
; move a0,*a13(ball_zsznum) ;Cause ani change
|
||
#fsame
|
||
|
||
;----------
|
||
|
||
|
||
move *a8(OXPOS),a6
|
||
move *a13(ball_anix),a14
|
||
add a14,a6
|
||
|
||
move *a8(OXVEL),a1,L
|
||
jreq #xok
|
||
jrgt #xvpos
|
||
|
||
cmpi WRLDMID-345,a6
|
||
jrge #xok
|
||
movi WRLDMID-345,a6
|
||
sub a14,a6
|
||
move a6,*a8(OXPOS)
|
||
jruc #badx
|
||
|
||
#xvpos cmpi WRLDMID+345,a6
|
||
jrlt #xok
|
||
movi WRLDMID+345,a6
|
||
sub a14,a6
|
||
move a6,*a8(OXPOS)
|
||
|
||
#badx clr a1
|
||
move a1,*a8(OXVEL),L
|
||
#xok
|
||
|
||
|
||
move @ballpnum,a5
|
||
jrn #free
|
||
|
||
clr a14
|
||
move a14,@ballpasstime
|
||
|
||
jruc #owned
|
||
|
||
#free move @ballprcv_p,a5,L
|
||
jrnz #skpcol ;Pass in progress?
|
||
|
||
callr ball_bbcollision
|
||
#skpcol
|
||
|
||
move @ballpasstime,a0
|
||
addk 1,a0
|
||
move a0,@ballpasstime
|
||
jruc #scroll
|
||
|
||
#owned
|
||
move *a13(ball_onfire),a14
|
||
jrnz #scroll ;On fire?
|
||
movk 2,a10 ;Keep ball from animating
|
||
|
||
#scroll
|
||
move @inbound,a0
|
||
jrn #not_inbounding
|
||
#dunking
|
||
jrnz #right_side
|
||
;#left_side
|
||
movi [WRLDMID-200-MAX_VIEW1,0],a3
|
||
movi DIVS_RATE1,a0
|
||
move a0,@scrl_divs_cur
|
||
jruc #do_scroll
|
||
#right_side
|
||
movi [WRLDMID-200+MAX_VIEW1,0],a3
|
||
movi DIVS_RATE1,a0
|
||
move a0,@scrl_divs_cur
|
||
jruc #do_scroll
|
||
#not_inbounding
|
||
|
||
|
||
movi DIVS_RATE2,a0 ;normal scroll divisor
|
||
move a0,@scrl_divs_dest
|
||
|
||
move @ballpnum,a5
|
||
jrge #plyr_has_ball
|
||
move a6,a3
|
||
|
||
move @ballprcv_p,a0,L ;passing?
|
||
jrz #not_passing
|
||
|
||
;player passing ball
|
||
move @ballpnumlast,a0 ;player who passed ball
|
||
jrn #not_passing
|
||
|
||
|
||
movi DIVS_RATE3,a0
|
||
move @plyrpasstype,a1
|
||
jrz #not_turbo
|
||
move a0,@scrl_divs_cur
|
||
#not_turbo
|
||
move a0,@scrl_divs_dest
|
||
|
||
move @ballpnumlast,a5 ;player who passed ball
|
||
jruc #plyr_has_ball2
|
||
|
||
#not_passing
|
||
move @ballpnumlast,a5
|
||
jrnn #plyr_shooting
|
||
|
||
;free ball
|
||
movi -1,a0
|
||
move a0,@cntl_team ;team in control (0,1 or -1)
|
||
movi DIVS_RATE1,a0
|
||
move a0,@scrl_divs_cur
|
||
|
||
jruc #ball_free1
|
||
|
||
|
||
#plyr_has_ball
|
||
move a5,a0
|
||
sll 5,a0 ;*32
|
||
addi plyrobj_t,a0
|
||
move *a0,a0,L
|
||
move *a0(OXPOS),a3
|
||
move *a0(OXANI+16),a1
|
||
add a1,a3
|
||
#plyr_has_ball2
|
||
#plyr_shooting
|
||
move a5,a0
|
||
srl 1,a0
|
||
move a0,@cntl_team ;team in control (0,1 or -1)
|
||
sll 5,a5
|
||
addi plyrproc_t,a5
|
||
move *a5,a5,L
|
||
move *a5(plyr_seqflgs),a0
|
||
btst DUNK_B,a0
|
||
jrz #not_dunking
|
||
move @cntl_team,a0 ;team in control (0,1 or -1)
|
||
xori 1,a0
|
||
jruc #dunking
|
||
#not_dunking
|
||
|
||
|
||
; move *a2(OXVEL+16),a6
|
||
; abs a6
|
||
; cmpi MIN_PXRUN_SPEED,a6
|
||
; jrlt #not_hixvel
|
||
#not_hixvel
|
||
|
||
|
||
move @scrl_divs_cur,a1 ;move cur -> dest
|
||
move @scrl_divs_dest,a2
|
||
cmp a1,a2 ;dest-cur
|
||
jreq #at_dest
|
||
jrgt #add
|
||
;#sub
|
||
movi DIVS_DELTA,a0
|
||
sub a0,a1
|
||
cmp a1,a2
|
||
jrle #set_divs
|
||
move a2,a1
|
||
jruc #set_divs
|
||
#add
|
||
movi DIVS_DELTA,a0
|
||
add a0,a1
|
||
cmp a1,a2
|
||
jrge #set_divs
|
||
move a2,a1
|
||
#set_divs
|
||
move a1,@scrl_divs_cur
|
||
#at_dest
|
||
|
||
|
||
|
||
#ball_free1
|
||
sll 16,a3 ;[int,frac]
|
||
subi [200,0],a3
|
||
|
||
move @cntl_team,a0 ;team in control (0,1 or -1)
|
||
jrn #ball_free
|
||
jrnz #team2
|
||
#team1
|
||
addi [SCRL_EDGE_OFF,0],a3
|
||
jruc #cont1
|
||
#team2
|
||
subi [SCRL_EDGE_OFF,0],a3
|
||
#cont1
|
||
#ball_free
|
||
|
||
move @cntl_team,a0
|
||
move @cntl_team_last,a1
|
||
cmp a0,a1
|
||
jreq #no_turnover2
|
||
move a0,@cntl_team_last
|
||
movi DIVS_RATE1,a0
|
||
move a0,@scrl_divs_cur
|
||
#no_turnover2
|
||
|
||
|
||
cmpi [WRLDMID-200-MAX_VIEW2,0],a3
|
||
jrge #sxok1
|
||
movi [WRLDMID-200-MAX_VIEW2,0],a3
|
||
move @scrl_divs_cur,a0
|
||
cmpi DIVS_RATE2,a0
|
||
jrhs #sxok1
|
||
movi DIVS_RATE2,a0
|
||
move a0,@scrl_divs_cur
|
||
move a0,@scrl_divs_dest
|
||
#sxok1
|
||
cmpi [WRLDMID-200+MAX_VIEW2,0],a3
|
||
jrle #sxok2
|
||
movi [WRLDMID-200+MAX_VIEW2,0],a3
|
||
move @scrl_divs_cur,a0
|
||
cmpi DIVS_RATE2,a0
|
||
jrhs #sxok2
|
||
movi DIVS_RATE2,a0
|
||
move a0,@scrl_divs_cur
|
||
move a0,@scrl_divs_dest
|
||
#sxok2
|
||
|
||
|
||
|
||
#do_scroll
|
||
move @scrl_divs_cur,a7
|
||
move @WORLDTLX,a1,L ;>Scroll world view
|
||
move a1,a5
|
||
sub a3,a5
|
||
jreq #no_scroll
|
||
jrlt #scroll_right
|
||
#scroll_left
|
||
subi [SCROLL_BUFFER,0],a5
|
||
jrle #no_scroll
|
||
divu a7,a5 ;/ divs rate x 256
|
||
sll 8,a5 ;x 256
|
||
sub a5,a1
|
||
cmpi [WRLDMID-200-MAX_VIEW1,0],a1
|
||
jrle #no_scroll
|
||
jruc #set_scroll
|
||
|
||
#scroll_right
|
||
abs a5
|
||
subi [SCROLL_BUFFER,0],a5
|
||
jrle #no_scroll
|
||
divu a7,a5 ;/ divs rate x 256
|
||
sll 8,a5 ;x 256
|
||
add a5,a1
|
||
cmpi [WRLDMID-200+MAX_VIEW1,0],a1
|
||
jrge #no_scroll
|
||
|
||
#set_scroll
|
||
;stiffen up scroller
|
||
move @inbound,a0
|
||
jrn #noinb
|
||
|
||
move @WORLDTLX,a0,L
|
||
sub a1,a0
|
||
abs a0
|
||
cmpi 1000h,a0
|
||
jrlt #no_scroll
|
||
#noinb
|
||
|
||
move a1,@WORLDTLX,L
|
||
subi [WRLDMID-200,0],a1
|
||
move a1,@gndx,L
|
||
#no_scroll
|
||
|
||
*************************************************************
|
||
|
||
|
||
|
||
move @ballpnum,a5 ;player who has ball (0-3 or -1)
|
||
move *a8(OZPOS),a14 ;>Set world Y
|
||
subi GZBASE,a14 ;-Base
|
||
jrge #zok2
|
||
clr a14
|
||
#zok2 move a14,a2
|
||
sra 1,a14 ;Z/2
|
||
sra 3,a2 ;Z/8
|
||
sub a2,a14 ;=Z/2.667
|
||
|
||
move *a8(OYPOS),a1
|
||
add a14,a1
|
||
addi 70,a1
|
||
|
||
move a5,a14
|
||
jrn #bfree ;Free from plyr?
|
||
sll 5,a14 ;x 32 bits
|
||
addi plyrproc_t,a14
|
||
move *a14,a14,L
|
||
move *a14(plyr_seqflgs),a2
|
||
btst DUNK_B,a2
|
||
jrz #bfree
|
||
|
||
move *a14(plyr_seq),a2 ;Current ani sequence #
|
||
cmpi DUNKU2_SEQ,a2 ;These dunks need different buffering
|
||
jrlt #1stdunks
|
||
addi 25-70,a1
|
||
move a1,a1
|
||
jrlt #byvis0
|
||
clr a1
|
||
#byvis0
|
||
move @WORLDTLY+16,a2
|
||
sub a2,a1
|
||
jreq #skipwy
|
||
sra 4,a1
|
||
jruc #setwy
|
||
|
||
#1stdunks
|
||
addi 45-70,a1
|
||
|
||
#bfree
|
||
move a1,a1
|
||
jrlt #byvis
|
||
clr a1
|
||
#byvis
|
||
move @WORLDTLY+16,a2
|
||
sub a2,a1
|
||
jreq #skipwy
|
||
sra 2,a1
|
||
#setwy jrnz #adjok
|
||
addk 1,a1
|
||
#adjok add a1,a2
|
||
cmpi -130,a2 ;110 ;125,;135
|
||
jrlt #skipwy ;Don't scroll higher?
|
||
move a2,@WORLDTLY+16
|
||
#skipwy
|
||
|
||
|
||
;----------
|
||
|
||
;>Check Z
|
||
move *a8(OZPOS),a0
|
||
move a5,a5
|
||
jrge #zok ;Plyr has ball?
|
||
move *a8(OZVEL),a1,L
|
||
jrn #zvneg
|
||
|
||
cmpi GZMAX,a0 ;-12
|
||
jrlt #zok
|
||
movi GZMAX,a0
|
||
jruc #zbad
|
||
|
||
#zvneg cmpi CZMIN,a0
|
||
jrge #zok
|
||
movi CZMIN,a0
|
||
|
||
#zbad move a0,*a8(OZPOS)
|
||
clr a1
|
||
move a1,*a8(OZVEL),L
|
||
#zok
|
||
|
||
subi CZMIN,a0 ;-Base
|
||
jrge #zge
|
||
clr a0
|
||
#zge srl 5,a0 ;/32
|
||
move *a13(ball_zsznum),a1
|
||
cmp a1,a0
|
||
jreq #ani ;Same Z range?
|
||
move a0,*a13(ball_zsznum)
|
||
sll 5,a0 ;*32
|
||
move a0,a1
|
||
addi #shad_t,a1 ;>Set new shadow img
|
||
move *a1,a2,L
|
||
move a2,*a9(OIMG),L
|
||
move *a2,a14,L
|
||
move a14,*a9(OSIZE),L
|
||
move *a2(ISAG),*a9(OSAG),L
|
||
move *a2(IANIOFFY),a1
|
||
neg a1
|
||
move a1,*a9(OYPOS)
|
||
|
||
move *a13(ball_onfire),a14
|
||
jrnz #onfire
|
||
addi #ani_t,a0
|
||
move *a0,a0,L
|
||
move a0,*a13(ball_ani1st_p),L
|
||
jruc #newz
|
||
|
||
#onfire
|
||
addi #anif_t,a0
|
||
move *a0,a0,L
|
||
move a0,*a13(ball_ani1st_p),L
|
||
jruc #newz
|
||
|
||
|
||
#ani
|
||
dsj a10,#skipa
|
||
|
||
move *a13(ball_onfire),a14
|
||
jrnz #movin ;On fire?
|
||
|
||
move *a8(OXVEL),a0,L
|
||
abs a0
|
||
srl 2,a0
|
||
jrnz #movin
|
||
movk 5,a10
|
||
move *a8(OZVEL),a0,L
|
||
abs a0
|
||
srl 2,a0
|
||
jrz #skipa
|
||
#movin
|
||
|
||
move *a13(ball_ani_p),a0,L
|
||
move *a0+,a1,L ;*Next img
|
||
jrnz #notend
|
||
|
||
move *a13(ball_ani1st_p),a0,L
|
||
#newz move *a0+,a1,L ;*1st img
|
||
|
||
#notend move *a0+,a10
|
||
move a0,*a13(ball_ani_p),L
|
||
|
||
move a1,*a8(OIMG),L ;>Set new img
|
||
move *a1,a2,L
|
||
move a2,*a8(OSIZE),L
|
||
move *a1(ISAG),*a8(OSAG),L
|
||
move *a1(IANIOFFX),a2
|
||
move *a1(IANIOFFY),*a13(ball_aniy)
|
||
move *a13(ball_anix),a1
|
||
move a2,*a13(ball_anix)
|
||
move *a8(OXPOS),a0
|
||
add a1,a0 ;Old ani X
|
||
sub a2,a0 ;-New ani X
|
||
move a0,*a8(OXPOS)
|
||
|
||
#skipa
|
||
move *a8(OYVEL),a2,L
|
||
|
||
move *a8(OYPOS),a1
|
||
move *a13(ball_aniy),a3
|
||
add a3,a1
|
||
jrlt #agnd ;Above gnd?
|
||
|
||
;MJT
|
||
clr a0
|
||
calla plyr_setshtdly
|
||
|
||
cmpi >4000,a2
|
||
jrlt #nosnd
|
||
movi bounce_snd,a0
|
||
calla snd_play1
|
||
|
||
#nosnd
|
||
neg a3
|
||
move a3,*a8(OYPOS) ;Set on gnd
|
||
neg a2
|
||
move a2,a3 ;75%
|
||
sra 2,a3 ;/4
|
||
sub a3,a2
|
||
#agnd addi GRAVB,a2
|
||
move a2,*a8(OYVEL),L
|
||
#nograv
|
||
move *a8(OXVAL),*a9(OXVAL),L ;>Align shadow
|
||
move *a8(OXANI),*a9(OXANI),L
|
||
move *a8(OZPOS),a0
|
||
subk 10,a0 ;Adjust
|
||
move a0,*a9(OZPOS)
|
||
|
||
callr ball_chkpcollide
|
||
|
||
#halted
|
||
SLOOP 1,#lp
|
||
|
||
|
||
#ani_t
|
||
.long #b1_l
|
||
.long #b1_l,#b2_l,#b2_l
|
||
.long #b3_l,#b3_l,#b4_l,#b4_l
|
||
.long #b5_l,#b5_l,#b6_l,#b6_l
|
||
.long #b7_l,#b7_l,#b8_l,#b8_l
|
||
.long #b9_l,#b9_l, #b9_l,#b9_l
|
||
.long #b9_l,#b9_l, #b9_l,#b9_l
|
||
.long #b9_l,#b9_l, #b9_l,#b9_l
|
||
.long #b9_l,#b9_l, #b9_l,#b9_l
|
||
.long #b9_l,#b9_l, #b9_l,#b9_l
|
||
|
||
.asg 5,D
|
||
|
||
#b1_l LW ball11,D
|
||
LW ball12,D
|
||
LWL0 ball13,D
|
||
|
||
#b2_l LW ball21,D
|
||
LW ball22,D
|
||
LWL0 ball23,D
|
||
|
||
#b3_l LW ball31,D
|
||
LW ball32,D
|
||
LWL0 ball33,D
|
||
|
||
#b4_l LW ball41,D
|
||
LW ball42,D
|
||
LWL0 ball43,D
|
||
|
||
#b5_l LW ball51,D
|
||
LW ball52,D
|
||
LWL0 ball53,D
|
||
|
||
#b6_l LW ball61,D
|
||
LW ball62,D
|
||
LWL0 ball63,D
|
||
|
||
#b7_l LW ball71,D
|
||
LW ball72,D
|
||
LWL0 ball73,D
|
||
|
||
#b8_l LW ball81,D
|
||
LW ball82,D
|
||
LWL0 ball83,D
|
||
|
||
#b9_l LW ball91,D
|
||
LW ball92,D
|
||
LWL0 ball93,D
|
||
|
||
|
||
#anif_t
|
||
.long #bf1_l
|
||
.long #bf1_l,#bf2_l,#bf2_l
|
||
.long #bf3_l,#bf3_l,#bf4_l,#bf4_l
|
||
.long #bf5_l,#bf5_l,#bf6_l,#bf6_l
|
||
.long #bf7_l,#bf7_l,#bf8_l,#bf8_l
|
||
.long #bf9_l,#bf9_l, #bf9_l,#bf9_l
|
||
.long #bf9_l,#bf9_l, #bf9_l,#bf9_l
|
||
.long #bf9_l,#bf9_l, #bf9_l,#bf9_l
|
||
.long #bf9_l,#bf9_l, #bf9_l,#bf9_l
|
||
.long #bf9_l,#bf9_l, #bf9_l,#bf9_l
|
||
|
||
.asg 4,D
|
||
|
||
#bf1_l LW ballf11,D
|
||
LW ballf12,D
|
||
LW ballf13,D
|
||
LW ballf14,D
|
||
LW ballf15,D
|
||
LWL0 ballf16,D
|
||
|
||
#bf2_l LW ballf21,D
|
||
LW ballf22,D
|
||
LW ballf23,D
|
||
LW ballf24,D
|
||
LW ballf25,D
|
||
LWL0 ballf26,D
|
||
|
||
#bf3_l LW ballf31,D
|
||
LW ballf32,D
|
||
LW ballf33,D
|
||
LW ballf34,D
|
||
LW ballf35,D
|
||
LWL0 ballf36,D
|
||
|
||
#bf4_l LW ballf41,D
|
||
LW ballf42,D
|
||
LW ballf43,D
|
||
LW ballf44,D
|
||
LW ballf45,D
|
||
LWL0 ballf46,D
|
||
|
||
#bf5_l LW ballf51,D
|
||
LW ballf52,D
|
||
LW ballf53,D
|
||
LW ballf54,D
|
||
LW ballf55,D
|
||
LWL0 ballf56,D
|
||
|
||
#bf6_l LW ballf61,D
|
||
LW ballf62,D
|
||
LW ballf63,D
|
||
LW ballf64,D
|
||
LW ballf65,D
|
||
LWL0 ballf66,D
|
||
|
||
#bf7_l LW ballf71,D
|
||
LW ballf72,D
|
||
LW ballf73,D
|
||
LW ballf74,D
|
||
LW ballf75,D
|
||
LWL0 ballf76,D
|
||
|
||
#bf8_l LW ballf81,D
|
||
LW ballf82,D
|
||
LW ballf83,D
|
||
LW ballf84,D
|
||
LW ballf85,D
|
||
LWL0 ballf86,D
|
||
|
||
#bf9_l LW ballf91,D
|
||
LW ballf92,D
|
||
LW ballf93,D
|
||
LW ballf94,D
|
||
LW ballf95,D
|
||
LWL0 ballf96,D
|
||
|
||
|
||
|
||
#shad_t
|
||
; .long ballshad12,ballshad12,ballshad11,ballshad11
|
||
; .long ballshad10,ballshad10,ballshad9,ballshad9
|
||
.long ballshad8,ballshad8,ballshad7,ballshad7
|
||
.long ballshad6,ballshad6,ballshad5,ballshad5
|
||
.long ballshad4,ballshad4,ballshad3,ballshad3
|
||
.long ballshad2,ballshad2,ballshad1,ballshad1
|
||
.long ballshad1,ballshad1,ballshad1,ballshad1
|
||
.long ballshad1,ballshad1,ballshad1,ballshad1
|
||
.long ballshad1,ballshad1,ballshad1,ballshad1
|
||
|
||
|
||
********************************
|
||
* Get shadow obj for ball
|
||
* A8=*Obj
|
||
* >A9=*Shadow obj
|
||
* Trashes scratch, A2-A7
|
||
|
||
SUBRP ball_getshadow
|
||
|
||
PUSH a8
|
||
|
||
move *a8(OXVAL),a0,L
|
||
movi [-2,0],a1
|
||
movi ballshad5,a2
|
||
move *a8(OZPOS),a3
|
||
subk 10,a3 ;Z
|
||
move *a8(OCTRL),a4
|
||
andi M_FLIPH|M_FLIPV,a4
|
||
ori DMAWNZ|M_3D|M_SHAD|M_NOCOLL,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
move a8,a9
|
||
movk 10,a0
|
||
move a0,*a8(OMISC) ;Z offset
|
||
|
||
PULL a8
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Check ball for collisions with backboard/hoop
|
||
* A6=Ball ani XPOS
|
||
* A8=*Ball obj
|
||
* A13=*Ball process
|
||
* Trashes scratch, B2-B3
|
||
|
||
SUBRP ball_bbcollision
|
||
|
||
PUSH a2,a3,a4,a5,a6,a7,a9,a10,a11
|
||
|
||
clr b2 ;B2=Rim collision flag
|
||
|
||
move @shot_distance,a14
|
||
cmpi >158,a14
|
||
jrlt #ok
|
||
;A long range shot, don't allow it to go in!
|
||
movi 200,a0
|
||
|
||
move @game_time,a1,L
|
||
cmpi >400,a1
|
||
jrgt #nohelp
|
||
movi 350,a0
|
||
#nohelp
|
||
calla RNDPER
|
||
jrhi #ok
|
||
;Point toward hoop with no score points!
|
||
movi lhoopl_t,a10
|
||
movi HOOPLX,b3 ;B3=Hoop X
|
||
cmpi WRLDMID,a6
|
||
jrlt #left
|
||
movi lhoopr_t,a10
|
||
movi HOOPRX,b3
|
||
jruc #left
|
||
|
||
#ok
|
||
movi hoopl_t,a10
|
||
movi HOOPLX,b3 ;B3=Hoop X
|
||
cmpi WRLDMID,a6
|
||
jrlt #left
|
||
movi hoopr_t,a10
|
||
movi HOOPRX,b3
|
||
#left
|
||
move *a8(OYPOS),a7 ;A7=Ball Y
|
||
move *a8(OSIZEY),a14
|
||
srl 1,a14 ;/2
|
||
add a14,a7 ;Center Y
|
||
cmpi HOOPY+20,a7
|
||
jrge #x ;Under all collision points?
|
||
|
||
|
||
move @ballscorezhit,a0
|
||
jrge #chkpts ;Haven't scored?
|
||
|
||
move *a8(OZVEL),a0,L ;>Slow XZ vel
|
||
sra 1,a0
|
||
move a0,*a8(OZVEL),L
|
||
|
||
move *a8(OYVEL),a0,L ;-1/4 Y
|
||
move a0,a14
|
||
sra 2,a14
|
||
sub a14,a0
|
||
move a0,*a8(OYVEL),L
|
||
|
||
|
||
move a6,a0 ;>Pull toward center
|
||
move b3,a14
|
||
sub a14,a0
|
||
sll 12,a0 ;/16
|
||
|
||
move *a8(OXVEL),a1,L
|
||
sub a0,a1
|
||
move a1,a14
|
||
sra 2,a14 ;/4
|
||
sub a14,a1
|
||
move a1,*a8(OXVEL),L
|
||
|
||
jruc #chkbb
|
||
|
||
|
||
#chkpts
|
||
move *a8(OZPOS),a5 ;A5=Ball Z
|
||
jruc #nxt
|
||
|
||
|
||
#lp move *a10+,a3 ;Y
|
||
move *a10+,a4 ;Z
|
||
move *a10+,a11 ;Mode
|
||
sub a6,a2
|
||
sub a7,a3
|
||
sub a5,a4
|
||
abs a2
|
||
abs a3
|
||
abs a4
|
||
|
||
cmp a3,a2 ;>Sort A2-A4 large to sml
|
||
jrge #20
|
||
SWAP a2,a3
|
||
|
||
#20 cmp a4,a3
|
||
jrge #sorted
|
||
SWAP a3,a4
|
||
|
||
cmp a3,a2
|
||
jrge #sorted
|
||
SWAP a2,a3
|
||
|
||
#sorted srl 1,a3 ;/2
|
||
srl 2,a4 ;/4
|
||
add a3,a2
|
||
add a4,a2
|
||
subk 5,a2
|
||
jrgt #nxt ;Too far?
|
||
|
||
|
||
move @sc_proc,a0,L
|
||
jrz #no24clock
|
||
clr a14
|
||
move a4,@sc_proc,L
|
||
; move *a0(PROCID),a14
|
||
; cmpi clockid,a14
|
||
; jrz #cont
|
||
; LOCKUP
|
||
;#cont
|
||
PUSH a7,a10
|
||
movi sclockx,a7
|
||
movi clockid,a1
|
||
move *a0(PA10),a10,L
|
||
calla XFERPROC
|
||
PULL a7,a10
|
||
#no24clock
|
||
|
||
clr a0
|
||
move a0,@ballgoaltcnt
|
||
|
||
movi 3*60+30,a0 ;Rebound stat can happen for next 3
|
||
move a0,@rebound_delay ;seconds
|
||
|
||
movk 8,a0
|
||
move a0,@ballsclastp ;Nobody
|
||
|
||
|
||
move a11,a11
|
||
jrle #notrim
|
||
;>Rim
|
||
|
||
move @ballscorezhit,a0
|
||
jrn #nxt ;Already scored?
|
||
|
||
move @ballrimhitcnt,a0
|
||
;RJR
|
||
jrnz #skipit
|
||
|
||
PUSH a0,a7,a11
|
||
|
||
move @ballpnumshot,a0
|
||
sll 4,a0 ;x 16
|
||
addi brick_count,a0
|
||
move *a0,a1 ;brick_count++
|
||
inc a1
|
||
move a1,*a0
|
||
|
||
move b3,a11 ;hoop x
|
||
CREATE NOG_PID,no_good_check
|
||
PULL a0,a7,a11
|
||
#skipit
|
||
addk 1,a0
|
||
move a0,@ballrimhitcnt
|
||
|
||
move b2,b2
|
||
jrnz #nomv ;Hit already?
|
||
addk 1,b2 ;Set flag
|
||
|
||
cmpi 3,a11
|
||
jrlt #nobend
|
||
|
||
clr a0 ;>Make rim bend a little
|
||
cmpi WRLDMID,a6
|
||
jrlt #netani
|
||
movk 1,a0
|
||
#netani movk 4,a1
|
||
calla net_ani
|
||
|
||
#nobend
|
||
move @PCNT,a0
|
||
sll 32-2,a0
|
||
srl 32-2-5,a0
|
||
addi rim_snds,a0
|
||
move *a0,a0,L
|
||
calla snd_play1
|
||
|
||
|
||
move a8,a1 ;>Move back
|
||
addi OXVAL,a1
|
||
move *a8(OXVEL),a0,L
|
||
move *a1,a2,L
|
||
sub a0,a2
|
||
move a2,*a1+,L
|
||
move *a8(OYVEL),a0,L
|
||
move *a1,a3,L
|
||
sub a0,a3
|
||
move a3,*a1+,L
|
||
move *a8(OZVEL),a0,L
|
||
move *a1,a4,L
|
||
sub a0,a4
|
||
move a4,*a1+,L
|
||
|
||
move *a13(ball_collcnt),a1
|
||
subk 3,a1
|
||
jrge #ballstuck
|
||
|
||
#nomv
|
||
subi 16*4,a10
|
||
move *a10+,a2
|
||
move *a10+,a3
|
||
move *a10+,a4
|
||
addk 16,a10
|
||
callr ball_deflect
|
||
|
||
move b2,b2
|
||
jrnz #nxt ;Hit already?
|
||
|
||
move *a13(ball_collcnt),a1
|
||
jrnz #nxt
|
||
|
||
move a11,a0 ;>Absorb some vel
|
||
subk 13,a0 ;-12 to -9
|
||
neg a0
|
||
move a8,a1
|
||
addk OXVEL,a1
|
||
move *a1,a3,L
|
||
mpys a0,a3
|
||
sra 5,a3 ;/32
|
||
move a3,*a1+,L
|
||
move *a1,a3,L
|
||
mpys a0,a3
|
||
sra 5,a3 ;/32
|
||
move a3,*a1+,L
|
||
move *a1,a3,L
|
||
mpys a0,a3
|
||
sra 5,a3 ;/32
|
||
move a3,*a1+,L
|
||
|
||
jruc #nxt
|
||
|
||
|
||
#ballstuck
|
||
callr ball_stuck
|
||
jruc #skip
|
||
|
||
#notrim
|
||
; jrn #score
|
||
; ;>Net (slow ball)
|
||
; move a8,a1
|
||
; addk OXVEL,a1
|
||
;
|
||
; move *a1,a0,L ;X
|
||
; move a0,a14
|
||
; sra 3,a14 ;/8
|
||
; sub a14,a0
|
||
; move a0,*a1+,L
|
||
;
|
||
; move *a1,a0,L ;Y
|
||
; move a0,a14
|
||
; sra 3,a14 ;/8
|
||
; sub a14,a0
|
||
; move a0,*a1+,L
|
||
;
|
||
; move *a1,a0,L ;Z
|
||
; move a0,a14
|
||
; sra 3,a14 ;/8
|
||
; sub a14,a0
|
||
; move a0,*a1+,L
|
||
;
|
||
; jruc #nxt
|
||
|
||
|
||
#score callr ball_score ;>Score if really a basket
|
||
|
||
|
||
#nxt move *a10+,a2 ;X
|
||
jrnz #lp
|
||
|
||
|
||
#skip clr a1
|
||
move b2,b2
|
||
jrz #svcol ;No rim collision?
|
||
move *a13(ball_collcnt),a1
|
||
addk 1,a1
|
||
#svcol move a1,*a13(ball_collcnt)
|
||
|
||
; move *a13(ball_collcnt),a1
|
||
; jrnz #chkbb
|
||
|
||
move b2,b2
|
||
jrz #chkbb ;No rim collision?
|
||
|
||
move *a8(OXVEL),a2,L ;>Limit max XZvel
|
||
move *a8(OZVEL),a3,L
|
||
move *a8(OYVEL),a4,L
|
||
move a2,a0
|
||
move a3,a1
|
||
abs a0
|
||
abs a1
|
||
cmp a0,a1
|
||
jrge #a1big
|
||
move a0,a1
|
||
#a1big
|
||
cmpi >12000,a1
|
||
jrle #chkyv ;XZ vel within max?
|
||
|
||
move a4,a14
|
||
sra 8,a14
|
||
|
||
#scldlp srl 1,a1 ;Scale down
|
||
sra 1,a2
|
||
sra 1,a3
|
||
add a14,a4 ;+1/8
|
||
#strtsc cmpi >12000,a1
|
||
jrgt #scldlp
|
||
|
||
move a2,*a8(OXVEL),L
|
||
move a3,*a8(OZVEL),L
|
||
|
||
#chkyv cmpi ->44000,a4
|
||
jrge #ymaxok
|
||
movi ->44000,a4
|
||
#ymaxok cmpi >30000,a4
|
||
jrle #ydnok
|
||
movi >30000,a4
|
||
#ydnok move a4,*a8(OYVEL),L
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#chkbb
|
||
subi CZMID,a5 ;>Check backboard
|
||
abs a5
|
||
cmpi 34,a5
|
||
jrge #x ;Z <> backboard Z?
|
||
subi HOOPY+5,a7
|
||
jrgt #x ;Y<bottom?
|
||
cmpi -56,a7
|
||
jrlt #x ;Y>top?
|
||
|
||
subi WRLDMID,a6
|
||
move a6,a2
|
||
abs a6
|
||
subi HOOPRX-WRLDMID+12,a6
|
||
jrlt #x ;In front of backboard?
|
||
|
||
move *a8(OXVEL),a0,L
|
||
abs a0
|
||
move a2,a2
|
||
jrn #lbb ;Left bb?
|
||
neg a0
|
||
#lbb move a0,*a8(OXVEL),L
|
||
move *a8(OXVAL),a1,L
|
||
add a0,a1
|
||
add a0,a1
|
||
move a1,*a8(OXVAL),L
|
||
|
||
abs a0
|
||
cmpi >1fff,a0
|
||
jrlt #softbbhit ;Soft?
|
||
movi hitbboard_snd,a0
|
||
calla snd_play1
|
||
#softbbhit
|
||
|
||
move @ballbbhitcnt,a0
|
||
addk 1,a0
|
||
move a0,@ballbbhitcnt
|
||
|
||
subk 7,a0 ;8
|
||
jrlt #x ;!Stuck?
|
||
movi >20000,a0 ;20000
|
||
move *a8(OZPOS),a1
|
||
cmpi CZMID,a1
|
||
jrgt #newzv
|
||
neg a0
|
||
#newzv
|
||
move a0,*a8(OZVEL),L ;Try to unstick
|
||
|
||
#x PULL a2,a3,a4,a5,a6,a7,a9,a10,a11
|
||
rets
|
||
|
||
|
||
.asg HOOPLX,X
|
||
.asg HOOPY,Y
|
||
.asg Y+7,NY
|
||
.asg CZMID,Z
|
||
hoopl_t .word X-8 ,Y ,Z ,1 ;Rim
|
||
.word X-6 ,Y ,Z-7 ,1
|
||
.word X ,Y ,Z-9 ,2
|
||
.word X+6 ,Y ,Z-7 ,3
|
||
.word X+8 ,Y ,Z ,4
|
||
.word X+6 ,Y ,Z+7 ,3
|
||
.word X ,Y ,Z+9 ,2
|
||
.word X-6 ,Y ,Z+7 ,1
|
||
.word X ,Y ,Z ,-1 ;Score spots
|
||
.word X ,Y+2 ,Z ,-1
|
||
.word X ,Y+6 ,Z ,-2
|
||
.word X-3 ,Y+8 ,Z ,-2
|
||
.word X ,Y+8 ,Z-3 ,-2
|
||
.word X+3 ,Y+8 ,Z ,-2
|
||
.word X ,Y+8 ,Z+3 ,-2
|
||
.word 0
|
||
|
||
.asg HOOPRX,X
|
||
hoopr_t .word X-8 ,Y ,Z ,4
|
||
.word X-6 ,Y ,Z-7 ,3
|
||
.word X ,Y ,Z-9 ,2
|
||
.word X+6 ,Y ,Z-7 ,1
|
||
.word X+8 ,Y ,Z ,1
|
||
.word X+6 ,Y ,Z+7 ,1
|
||
.word X ,Y ,Z+9 ,2
|
||
.word X-6 ,Y ,Z+7 ,3
|
||
.word X ,Y ,Z ,-1 ;Score spots
|
||
.word X ,Y+2 ,Z ,-1
|
||
.word X ,Y+6 ,Z ,-2
|
||
.word X-3 ,Y+8 ,Z ,-2
|
||
.word X ,Y+8 ,Z-3 ,-2
|
||
.word X+3 ,Y+8 ,Z ,-2
|
||
.word X ,Y+8 ,Z+3 ,-2
|
||
.word 0
|
||
|
||
;Long range shot tables
|
||
.asg HOOPLX,X
|
||
lhoopl_t
|
||
.word X-8 ,Y ,Z ,1 ;Rim
|
||
.word X-6 ,Y ,Z-7 ,1
|
||
.word X ,Y ,Z-9 ,2
|
||
.word X+6 ,Y ,Z-7 ,3
|
||
.word X+8 ,Y ,Z ,4
|
||
.word X+6 ,Y ,Z+7 ,3
|
||
.word X ,Y ,Z+9 ,2
|
||
.word X-6 ,Y ,Z+7 ,1
|
||
.word X ,Y ,Z ,1 ;Score spots
|
||
.word X ,Y+2 ,Z ,2
|
||
.word X ,Y+6 ,Z ,3
|
||
.word X-3 ,Y+8 ,Z ,4
|
||
.word X ,Y+8 ,Z-3 ,3
|
||
.word X+3 ,Y+8 ,Z ,2
|
||
.word X ,Y+8 ,Z+3 ,1
|
||
.word 0
|
||
|
||
.asg HOOPRX,X
|
||
lhoopr_t
|
||
.word X-8 ,Y ,Z ,4
|
||
.word X-6 ,Y ,Z-7 ,3
|
||
.word X ,Y ,Z-9 ,2
|
||
.word X+6 ,Y ,Z-7 ,1
|
||
.word X+8 ,Y ,Z ,1
|
||
.word X+6 ,Y ,Z+7 ,1
|
||
.word X ,Y ,Z+9 ,2
|
||
.word X-6 ,Y ,Z+7 ,3
|
||
.word X ,Y ,Z ,1 ;Score spots
|
||
.word X ,Y+2 ,Z ,2
|
||
.word X ,Y+6 ,Z ,3
|
||
.word X-3 ,Y+8 ,Z ,4
|
||
.word X ,Y+8 ,Z-3 ,3
|
||
.word X+3 ,Y+8 ,Z ,2
|
||
.word X ,Y+8 ,Z+3 ,1
|
||
.word 0
|
||
|
||
rim_snds
|
||
.long miss_snd,miss_snd,miss2_snd,miss3_snd
|
||
|
||
|
||
#*******************************
|
||
* Deflect ball from what it hit
|
||
* A2=Hit X
|
||
* A3=Hit Y
|
||
* A4=Hit Z
|
||
* A5=Ball Z
|
||
* A6=Ball X
|
||
* A7=Ball Y
|
||
* A8=*Ball obj
|
||
* Trashes scratch, A2-A4
|
||
|
||
SUBRP ball_deflect
|
||
|
||
PUSH a5,a6,a7,a9,a10,a11
|
||
|
||
sll 4,a2
|
||
sll 4,a3
|
||
sll 4,a4
|
||
sll 4,a5
|
||
sll 4,a6
|
||
sll 4,a7
|
||
|
||
PUSH a2,a3,a6,a7
|
||
|
||
move a6,a0 ;>Deflect XZ
|
||
move a5,a1
|
||
move a2,a6
|
||
move a4,a7
|
||
callr seekdir_xyxy128
|
||
move a0,a14
|
||
neg a0
|
||
addi >80,a0
|
||
callr sinecos_get
|
||
|
||
move *a8(OXVEL),a3,L
|
||
move *a8(OZVEL),a9,L
|
||
|
||
move a3,a5 ;>Rotate to 0
|
||
move a9,a11
|
||
mpys a1,a3 ;X*COS
|
||
mpys a0,a11 ;Z*SIN
|
||
sub a11,a3 ;X-Z
|
||
mpys a0,a5 ;X*SIN
|
||
mpys a1,a9 ;Z*COS
|
||
add a5,a9 ;X+Z
|
||
sra 12,a3
|
||
sra 12,a9
|
||
|
||
neg a9 ;Neg Z
|
||
|
||
move a14,a0
|
||
callr sinecos_get
|
||
|
||
move a3,a5 ;>Rotate back
|
||
move a9,a11
|
||
mpys a1,a3 ;X*COS
|
||
mpys a0,a11 ;Z*SIN
|
||
sub a11,a3 ;X-Z
|
||
mpys a0,a5 ;X*SIN
|
||
mpys a1,a9 ;Z*COS
|
||
add a5,a9 ;X+Z
|
||
sra 12,a3
|
||
sra 12,a9
|
||
|
||
move a3,*a8(OXVEL),L
|
||
move a9,*a8(OZVEL),L
|
||
|
||
PULL a2,a3,a6,a7
|
||
|
||
move a6,a0 ;>Deflect XY
|
||
move a7,a1
|
||
move a2,a6
|
||
move a3,a7
|
||
callr seekdir_xyxy128
|
||
move a0,a14
|
||
neg a0
|
||
addi >80,a0
|
||
callr sinecos_get
|
||
|
||
move *a8(OXVEL),a3,L
|
||
move *a8(OYVEL),a9,L
|
||
|
||
move a3,a5 ;>Rotate to 0
|
||
move a9,a11
|
||
mpys a1,a3 ;X*COS
|
||
mpys a0,a11 ;Z*SIN
|
||
sub a11,a3 ;X-Z
|
||
mpys a0,a5 ;X*SIN
|
||
mpys a1,a9 ;Z*COS
|
||
add a5,a9 ;X+Z
|
||
sra 12,a3
|
||
sra 12,a9
|
||
|
||
neg a9 ;Neg Y
|
||
|
||
move a14,a0
|
||
callr sinecos_get
|
||
|
||
move a3,a5 ;>Rotate back
|
||
move a9,a11
|
||
mpys a1,a3 ;X*COS
|
||
mpys a0,a11 ;Z*SIN
|
||
sub a11,a3 ;X-Z
|
||
mpys a0,a5 ;X*SIN
|
||
mpys a1,a9 ;Z*COS
|
||
add a5,a9 ;X+Z
|
||
sra 12,a3
|
||
sra 12,a9
|
||
|
||
move a3,*a8(OXVEL),L
|
||
move a9,*a8(OYVEL),L
|
||
|
||
|
||
PULL a5,a6,a7,a9,a10,a11
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Ball stuck on rim, try to unstick
|
||
* A8=*Ball obj
|
||
* B3=Hoop X
|
||
* Trashes scratch, A2,A3
|
||
|
||
SUBRP ball_stuck
|
||
|
||
PUSH a6,a7
|
||
|
||
move b3,a6 ;>Give vel towards or away from center
|
||
movi CZMID,a7
|
||
callr seekdirdist_obxz128
|
||
|
||
srl 3,a0 ;Dir 0-15
|
||
sll 4,a0 ;*16
|
||
addi #dx_t,a0
|
||
move *a0,a2
|
||
move *a0(#dz_t-#dx_t),a3
|
||
subk 10,a1
|
||
jrle #tcent ;Towards center?
|
||
neg a2
|
||
neg a3
|
||
sra 1,a2 ;/2
|
||
sra 1,a3
|
||
#tcent
|
||
sll 3,a2 ;*8
|
||
sll 3,a3
|
||
move a2,*a8(OXVEL),L
|
||
move a3,*a8(OZVEL),L
|
||
|
||
move *a8(OXVAL),a0,L
|
||
add a2,a0
|
||
move a0,*a8(OXVAL),L
|
||
move *a8(OZVAL),a0,L
|
||
add a3,a0
|
||
move a0,*a8(OZVAL),L
|
||
|
||
move @HCOUNT,a14
|
||
btst 0,a14
|
||
jrz #noyvc ;Skip yvel change?
|
||
|
||
movi -GRAVB*7,a1
|
||
move *a8(OYPOS),a0
|
||
cmpi HOOPY+6,a0
|
||
jrlt #abv ;Ball above rim?
|
||
neg a1
|
||
#abv move a1,*a8(OYVEL),L
|
||
|
||
#noyvc
|
||
clr a1
|
||
move a1,*a13(ball_collcnt)
|
||
|
||
PULL a6,a7
|
||
rets
|
||
|
||
|
||
#dz_t
|
||
.word -16384,-15137,-11585,-6270
|
||
#dx_t
|
||
.word 0,6270,11585,15137,16384,15137,11585,6270
|
||
.word 0,-6269,-11585,-15137, -16384,-15137,-11585,-6270
|
||
|
||
|
||
#*******************************
|
||
* Ball touching score zone, score if valid
|
||
* A8=*Ball obj
|
||
* A11=-1/-2 (upper spot / lower spot)
|
||
* Trashes scratch
|
||
|
||
SUBRP ball_score
|
||
|
||
PUSH a2,a3,a4,a5,a6,a7,a10,a11
|
||
|
||
|
||
move *a8(OYVEL),a0,L
|
||
jrle #x ;Moving up?
|
||
|
||
addk 1,a11
|
||
jrne #low
|
||
|
||
movk 1,a0 ;Upper zone hit
|
||
move a0,@ballscorezhit
|
||
jruc #x
|
||
|
||
#low
|
||
move @ballscorezhit,a0
|
||
jrle #x ;No top hit?
|
||
|
||
movi -1,a0
|
||
move a0,@ballscorezhit
|
||
|
||
;RJR
|
||
movi NOG_PID,a0 ;kill no good process
|
||
calla KIL1C
|
||
|
||
move @ballptsforshot,a1
|
||
jrz #x ;Goaltending?
|
||
|
||
|
||
clr a10
|
||
|
||
|
||
movk 16,a0 ;Team 2
|
||
clr a2
|
||
move *a8(OXPOS),a14
|
||
cmpi WRLDMID,a14
|
||
jrlt #left
|
||
clr a0 ;Team 1
|
||
movk 32,a2
|
||
#left
|
||
addi scores,a0 ;+Base
|
||
move @ballptsforshot,a1
|
||
move a1,a3
|
||
calla score_add
|
||
|
||
clr a0
|
||
move a0,@rebound_delay
|
||
|
||
callr plyr_setptsdown
|
||
|
||
subk 2,a3
|
||
jrne #3ptr
|
||
movk PS_2PTS_MADE,a0 ;>Inc made shot stat
|
||
jruc #2ptr
|
||
#3ptr
|
||
movk PS_3PTS_MADE,a0
|
||
|
||
#2ptr move @ballpnumshot,a1
|
||
calla inc_player_stat
|
||
|
||
; calla scored_speech
|
||
calla prt_top_scores ;Update scores at scrn top
|
||
|
||
CREATE0 score_showtvpanel
|
||
|
||
move a2,a11
|
||
|
||
|
||
;When testing dunks - TAKE OUT!
|
||
CREATE0 plyr_takeoutball
|
||
|
||
|
||
|
||
movi TSEC*1,a0
|
||
calla plyr_setshtdly
|
||
|
||
movi P1DATA,a10
|
||
calla stick_number
|
||
movi P2DATA,a10
|
||
calla stick_number
|
||
movi P3DATA,a10
|
||
calla stick_number
|
||
movi P4DATA,a10
|
||
calla stick_number
|
||
|
||
;>Do a net animation
|
||
move @ballpnumshot,a0
|
||
;RJR
|
||
move a0,a14
|
||
sll 4,a14 ;x 16
|
||
addi brick_count,a14
|
||
clr a1
|
||
move a1,*a14
|
||
|
||
movi ballpnumscored,a3
|
||
move *a3,a14
|
||
cmp a0,a14
|
||
jreq #smpl ;Same guy?
|
||
|
||
movk 1,a1 ;1st
|
||
move *a3(16),a4 ;# times
|
||
|
||
|
||
move @fire_flags,a5
|
||
btst a14,a5
|
||
jrz #normfire2
|
||
;4 shots to get on fire if already on fire
|
||
cmpi 4,a4
|
||
jruc #nrmf2
|
||
|
||
#normfire2
|
||
cmpi 3,a4
|
||
#nrmf2
|
||
|
||
jrlt #diffpl ;Last guy not hot?
|
||
|
||
move a0,a4
|
||
srl 1,a4
|
||
srl 1,a14
|
||
cmp a4,a14
|
||
jrz #nochg ;Different team?
|
||
move a1,*a3(16)
|
||
movi -1,a1
|
||
move a1,@plyrnumonfire
|
||
jruc #nochg ;Don't messup teammate
|
||
|
||
#smpl
|
||
move *a3(16),a1 ;# times
|
||
addk 1,a1
|
||
cmpi 8,a1 ;7
|
||
jrlt #diffpl
|
||
movi -1,a1
|
||
move a1,@plyrnumonfire ;Cap out on fire capability
|
||
movk 1,a1
|
||
#diffpl move a1,*a3(16)
|
||
#nochg
|
||
move a0,*a3
|
||
|
||
sll 5,a0 ;*32
|
||
addi plyrproc_t,a0
|
||
move *a0,a10,L
|
||
move *a10(plyr_seqflgs),a6
|
||
|
||
move a2,a0
|
||
movk 1,a1 ;Bend from dunk
|
||
|
||
movi dunk_snd,a11 ;Sound for dunk
|
||
btst DUNK_B,a6
|
||
jrnz #neta
|
||
|
||
CREATE0 plyr_jscrowdsnd ;For good jump shot
|
||
|
||
movi swish_snd,a11 ;Sound for swish
|
||
|
||
clr a1 ;Normal swish
|
||
move *a8(OXVEL),a14,L
|
||
sra 15,a14
|
||
move a2,a0
|
||
jrnz #rnet
|
||
neg a14 ;Reverse
|
||
#rnet subk 4,a14
|
||
jrlt #xvsml
|
||
movk 3,a1 ;Angled swish
|
||
#xvsml
|
||
move *a8(OYVEL+16),a14
|
||
subk 2,a14
|
||
jrge #yvlrg
|
||
clr a1
|
||
#yvlrg
|
||
#neta
|
||
move *a3(16),a4 ;# times
|
||
move @ballpnumscored,a14
|
||
move @fire_flags,a2
|
||
btst a14,a2
|
||
jrz #nor2
|
||
cmpi 4,a4
|
||
jruc #nor3
|
||
|
||
#nor2
|
||
cmpi 3,a4
|
||
#nor3
|
||
|
||
|
||
|
||
|
||
jrlt #nothot
|
||
movk 6,a1 ;Burn net
|
||
#nothot
|
||
calla net_ani
|
||
|
||
move a11,a0
|
||
calla snd_play1 ;Net sound
|
||
|
||
|
||
;RJR
|
||
; .if 0
|
||
; subk 2,a4
|
||
; jrlt #cold ;The scorer is cold?
|
||
; movi heatup_snd,a0
|
||
; subk 3-2,a4
|
||
; jrlt #hsnd
|
||
; movi onfire_snd,a0
|
||
;#hsnd
|
||
; move @ballpnumshot,a1
|
||
; move @ballpnumscored,a14
|
||
; cmp a1,a14
|
||
; jrne #cold ;Teammates the hot one?
|
||
; calla snd_play1
|
||
;#cold
|
||
; .endif
|
||
|
||
|
||
move *a8(OXVEL),a0,L ;>Slow XZ vel
|
||
sra 1,a0
|
||
move a0,*a8(OXVEL),L
|
||
move *a8(OZVEL),a0,L
|
||
sra 1,a0
|
||
move a0,*a8(OZVEL),L
|
||
|
||
|
||
btst DUNK_B,a6
|
||
jrz #noshake ;!dunk?
|
||
btst LAYUP_B,a6
|
||
jrnz #noshake ;!dunk?
|
||
|
||
movk PS_DUNKS_MADE,a0
|
||
move @ballpnumshot,a1
|
||
move a1,a2
|
||
calla inc_player_stat
|
||
srl 1,a2 ;0-1
|
||
move a2,a3
|
||
XORK 1,a2
|
||
move a2,@inbound ;Inbounding team (0-1)
|
||
|
||
sll 4,a3 ;*16
|
||
addi t1dunkcnt,a3
|
||
move *a3,a0
|
||
addk 1,a0
|
||
jrnc #noshat ;No overflow?
|
||
|
||
move *a10(plyr_seq),a0
|
||
movi #dunk_t,a1
|
||
#dlp move *a1+,a14
|
||
jrn #noshat2 ;End of table?
|
||
cmp a14,a0
|
||
jrne #dlp ;Wimpy dunk?
|
||
|
||
move @PSTATUS,a0 ;Plyr start bits 0-3
|
||
move @ballpnumshot,a1
|
||
btst a1,a0
|
||
jrz #noshat2 ;Drone?
|
||
|
||
;Fix!!!
|
||
; LOCKUP
|
||
|
||
move @bbshatter,a0 ;Already happened
|
||
jrnz #noshat2
|
||
|
||
jruc #noshat2 ;THE NBA SUCKS!
|
||
|
||
.ref gmqrtr
|
||
move @gmqrtr,a0
|
||
cmpi 3,a0
|
||
jrlt #noshat2
|
||
|
||
move *a10(plyr_attrib_p),a0,L
|
||
move *a0(PAT_DUNKSKILL),a0
|
||
cmpi 9,a0
|
||
jrlt #noshat2
|
||
|
||
clr a0
|
||
move a0,*a3 ;Reset cnt
|
||
move a0,@t1dunkcnt
|
||
move a0,@t2dunkcnt
|
||
|
||
movk 32,a0
|
||
cmpi 2,a1
|
||
jrlt tm1
|
||
;Knock down team 1
|
||
move @plyrproc_t,a1,L
|
||
move a0,*a1(plyr_stagcnt)
|
||
move @plyrproc_t+32,a1,L
|
||
move a0,*a1(plyr_stagcnt)
|
||
jruc #doit
|
||
tm1
|
||
move @plyrproc_t+64,a1,L
|
||
move a0,*a1(plyr_stagcnt)
|
||
move @plyrproc_t+96,a1,L
|
||
move a0,*a1(plyr_stagcnt)
|
||
#doit
|
||
CREATE0 board_shatter
|
||
movi HOOP_PID,a0
|
||
calla KIL1C
|
||
move a2,a0
|
||
movk 5,a1 ;Big rim bend
|
||
calla net_ani
|
||
movk 18,a10 ;Big shake
|
||
jruc #shake
|
||
#noshat
|
||
move a0,*a3
|
||
#noshat2
|
||
movk 15,a10
|
||
#shake calla SHAKER
|
||
#noshake
|
||
|
||
|
||
; move @movieshown,a0
|
||
;; jrnz #x
|
||
; jruc #x
|
||
;
|
||
; movk 7,a0
|
||
; callr rnd
|
||
; jrnz #x
|
||
;
|
||
; movk 1,a0
|
||
; move a0,@movieshown
|
||
;
|
||
; CREATE0 movie_test
|
||
|
||
calla scored_speech
|
||
|
||
#x PULL a2,a3,a4,a5,a6,a7,a10,a11
|
||
rets
|
||
|
||
;Turmell
|
||
#dunk_t .word DUNKP_SEQ,DUNKA_SEQ,DUNKB_SEQ,DUNKC_SEQ,DUNKD_SEQ
|
||
.word DUNKE_SEQ,DUNKE2_SEQ,DUNKD2_SEQ
|
||
.word DUNKL_SEQ,DUNKL2_SEQ,DUNKL3_SEQ,DUNKL4_SEQ
|
||
.word DUNKP2_SEQ
|
||
.word DUNKP3_SEQ
|
||
.word DUNKR_SEQ
|
||
.word DUNKR2_SEQ
|
||
.word DUNKT5_SEQ
|
||
.word DUNKU2_SEQ
|
||
.word DUNKU3_SEQ
|
||
.word DUNKU4_SEQ
|
||
.word DUNKU5_SEQ
|
||
.word DUNKU6_SEQ
|
||
.word DUNKX_SEQ
|
||
.word DUNKX2_SEQ
|
||
.word DUNKX3_SEQ
|
||
.word DUNKY_SEQ
|
||
.word DUNKY2_SEQ
|
||
.word DUNKZ_SEQ
|
||
.word DUNKZ2_SEQ
|
||
.word DUNKZ3_SEQ
|
||
.word DUNKT2_SEQ
|
||
.word DUNKT3_SEQ
|
||
.word DUNKT4_SEQ
|
||
.word DUNKT_SEQ
|
||
.word DUNKU_SEQ
|
||
.word DUNKF_SEQ,DUNKJ_SEQ,DUNKO_SEQ
|
||
.word DUNKK_SEQ,DUNKK2_SEQ,DUNKJ2_SEQ
|
||
.word DUNKQ_SEQ
|
||
.word DUNKQ3_SEQ
|
||
.word DUNKO2_SEQ
|
||
.word DUNKW3_SEQ
|
||
.word DUNKW2_SEQ
|
||
.word DUNKW_SEQ
|
||
|
||
.word -1
|
||
|
||
|
||
********************************
|
||
* Get sine and cosine
|
||
* A0=Angle (0-127) (Not neg!)
|
||
* >A0=Sine (0-4096)
|
||
* >A1=Cos (0-4096)
|
||
* Preserves A14
|
||
|
||
SUBR sinecos_get
|
||
|
||
sll 32-7,a0
|
||
srl 32-7-4,a0 ;*16
|
||
addi sine_t,a0
|
||
move *a0(cos_t-sine_t),a1
|
||
move *a0,a0
|
||
rets
|
||
|
||
sine_t
|
||
.word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857
|
||
.word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035
|
||
.word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751
|
||
.word -1567,-1380,-1189,-995,-799,-601,-401,-201
|
||
cos_t
|
||
.word 0,201,401,601,799,995,1189,1380
|
||
.word 1567,1751,1931,2106,2275,2440,2598,2751
|
||
.word 2896,3035,3166,3290,3406,3513,3612,3703
|
||
.word 3784,3857,3920,3973,4017,4052,4076,4091
|
||
|
||
.word 4096,4091,4076,4052,4017,3973,3920,3857
|
||
.word 3784,3703,3612,3513,3406,3290,3166,3035
|
||
.word 2896,2751,2598,2440,2275,2106,1931,1751
|
||
.word 1567,1380,1189,995,799,601,401,201
|
||
|
||
.word 0,-200,-401,-601,-799,-995,-1189,-1380
|
||
.word -1567,-1751,-1931,-2105,-2275,-2440,-2598,-2750
|
||
.word -2896,-3035,-3166,-3290,-3406,-3513,-3612,-3703
|
||
.word -3784,-3857,-3920,-3973,-4017,-4052,-4076,-4091
|
||
|
||
.word -4096,-4091,-4076,-4052,-4017,-3973,-3920,-3857
|
||
.word -3784,-3703,-3612,-3513,-3406,-3290,-3166,-3035
|
||
.word -2896,-2751,-2598,-2440,-2275,-2106,-1931,-1751
|
||
.word -1567,-1380,-1189,-995,-799,-601,-401,-201
|
||
|
||
|
||
|
||
#*******************************
|
||
* Check for ball collision with a player
|
||
* A8=*Ball obj
|
||
* Trashes scratch
|
||
|
||
SUBR ball_chkpcollide
|
||
|
||
PUSH a2,a3,a4,a5,a6,a7,a10,a11
|
||
|
||
movk 4,a7
|
||
move *a8(OXPOS),a4
|
||
move *a8(OXANI+16),a14
|
||
add a14,a4 ;A4=Center X
|
||
move *a8(OZPOS),a6 ;A6=Z
|
||
movi plyrobj_t,a5
|
||
|
||
movk 18,a10 ;A10=Z coll radius
|
||
move *a8(OYPOS),a0
|
||
cmpi -28,a0
|
||
jrlt #lp
|
||
move *a8(OYVEL),a0,L
|
||
abs a0
|
||
cmpi >c000,a0
|
||
jrgt #lp
|
||
movi 35,a10 ;Larger radius
|
||
|
||
#lp move *a5+,a11,L
|
||
|
||
move *a11(OPLINK),a2,L
|
||
move *a2(plyr_attrib_p),a2,L
|
||
move *a2(PAT_DEFSKILL),a2
|
||
sll 4,a2
|
||
subk 18,a10
|
||
jrz #tbl1
|
||
addi tbl2,a2
|
||
jruc #tbo
|
||
#tbl1
|
||
addi tbl1,a2
|
||
#tbo move *a2,a10
|
||
|
||
|
||
move *a11(OZPOS),a2 ;>Chk Z
|
||
sub a6,a2
|
||
abs a2
|
||
sub a10,a2
|
||
jrge #nxt
|
||
|
||
move *a11(OXPOS),a1 ;>Chk box X
|
||
move *a11(OXANI+16),a14
|
||
add a14,a1
|
||
move *a11(OSIZEX),a14
|
||
srl 1,a14 ;/2
|
||
sub a14,a1
|
||
cmp a1,a4
|
||
jrle #nxt ;Center X <= lft?
|
||
sll 1,a14
|
||
add a14,a1
|
||
cmp a1,a4
|
||
jrge #nxt ;Center X >= rgt?
|
||
|
||
move *a11(OYPOS),a1
|
||
move *a8(OYPOS),a0
|
||
addk 3,a0
|
||
move *a13(plyr_seq),a14
|
||
cmpi RUNDRIBTURB_SEQ,a14
|
||
jrhi #handhi ;Hand higher than shoulder?
|
||
|
||
;MJT
|
||
move *a11(OPLINK),a14,L
|
||
move *a14(plyr_attrib_p),a14,L
|
||
move *a14(PAT_DEFSKILL),a14
|
||
sll 4,a14
|
||
addi tbl3,a14
|
||
move *a14,a14
|
||
add a14,a0
|
||
; addk 15,a0
|
||
|
||
|
||
#handhi cmp a1,a0
|
||
jrlt #nxt ;Too hi?
|
||
|
||
move *a11(OPLINK),a3,L
|
||
move *a3(plyr_shtdly),a14
|
||
jrgt #nxt5 ;Can't touch?
|
||
|
||
move @ballpnum,b0 ;a14
|
||
jrn #ok
|
||
|
||
;Ball is owned by someone
|
||
|
||
sll 5,b0 ;a14
|
||
addi plyrproc_t,b0 ;a14
|
||
move *b0,b0,L ;a14,a14,L
|
||
move b0,a14
|
||
cmp a14,a3
|
||
jrz #skpz
|
||
move *b0(plyr_seqflgs),b0 ;a14 a6
|
||
btst LAYUP_B,b0
|
||
jrnz #guydunking
|
||
btst DUNK_B,b0
|
||
jrnz #guydunking
|
||
#skpz
|
||
move *a14(plyr_seq),a14
|
||
cmpi SHOOT_SEQ,a14
|
||
jrnz #ok
|
||
jruc #nxt5
|
||
|
||
takedunk_t
|
||
.word 0,0,0,0,0,0,0,0,0,0,0,50,100,150,300,400,500,600,700,800,999,999
|
||
|
||
#guydunking
|
||
;Guy with ball is dunking!
|
||
PUSH a0,a1
|
||
|
||
move *a14(plyr_num),a0
|
||
move @plyr_maxpower,a1
|
||
btst a14,a1
|
||
jrz #nochng
|
||
;This guy has max power! Can't take ball!
|
||
movk 9,a0
|
||
jruc #maxp
|
||
#nochng
|
||
move *a14(plyr_attrib_p),a14,L
|
||
move *a14(PAT_POWER),a0 ;Guy trying to dunk ball
|
||
#maxp
|
||
|
||
|
||
|
||
move *a11(OPLINK),a14,L
|
||
move *a14(plyr_attrib_p),a14,L
|
||
move *a14(PAT_POWER),a14 ;Guy trying to take ball
|
||
cmpi 3,a14
|
||
jrle #nxt0z ;3 power can't take ball!
|
||
|
||
sub a14,a0 ;a0=-10 thru 10
|
||
addk 10,a0
|
||
sll 4,a0
|
||
addi takedunk_t,a0
|
||
move *a0,a0
|
||
jrz #ok0
|
||
calla RNDPER
|
||
jrls #ok0
|
||
#nxt0z ;3 power can't take ball!
|
||
PULL a0,a1
|
||
jruc #nxt ;To big, don't lose ball!
|
||
#ok0
|
||
PULL a0,a1
|
||
#ok
|
||
move *a3(plyr_jmpcnt),a14
|
||
jrle #ongnd
|
||
move *a3(plyr_aniy),a14
|
||
add a14,a1
|
||
sra 2,a14 ;/4
|
||
sub a14,a1 ;75% down from top
|
||
cmp a1,a0
|
||
jrge #nxt3 ;Ball too low?
|
||
#ongnd
|
||
|
||
move *a3(plyr_seqflgs),a14
|
||
btst BLOCKREB_B,a14
|
||
jrz #nobr ;No?
|
||
|
||
addk 18-12,a2
|
||
jrge #nxt2 ;Too far from Z?
|
||
;>Chk box X
|
||
move *a11(OIMG),a2,L
|
||
move *a2(IANI2X),a0
|
||
|
||
move *a11(OCTRL),a14
|
||
btst B_FLIPH,a14
|
||
jrz #nof ;No flip?
|
||
|
||
move *a2,a2 ;ISIZEX
|
||
subk 1,a2
|
||
neg a0
|
||
add a2,a0 ;+size
|
||
#nof
|
||
move *a11(OXPOS),a14
|
||
add a14,a0
|
||
sub a4,a0
|
||
abs a0
|
||
|
||
;MJT
|
||
move *a11(OPLINK),a14,L
|
||
move *a14(plyr_attrib_p),a14,L
|
||
move *a14(PAT_DEFSKILL),a14
|
||
sll 4,a14
|
||
addi tbl4,a14
|
||
move *a14,a14
|
||
sub a14,a0
|
||
; subk 12,a0
|
||
|
||
jrge #nxt4 ;Too far from X?
|
||
|
||
|
||
move @ballpnum,a1
|
||
jrn #noow ;No owner?
|
||
move *a3(plyr_num),a14
|
||
cmp a1,a14
|
||
jreq #nxt ;I own?
|
||
|
||
srl 1,a1
|
||
srl 1,a14
|
||
cmp a1,a14
|
||
jreq #nxt ;Teammate owns?
|
||
|
||
|
||
;MJT
|
||
move *a3(plyr_num),a0
|
||
move @plyrnumonfire,a1
|
||
cmp a0,a1
|
||
jrz #noow ;If on fire, don't miss as often
|
||
|
||
move *a11(OPLINK),a14,L
|
||
move *a14(plyr_attrib_p),a14,L
|
||
move *a14(PAT_DEFSKILL),a14
|
||
sll 4,a14
|
||
addi tbl5,a14
|
||
move *a14,a0
|
||
calla RNDPER
|
||
jrhi #nxt
|
||
|
||
; movk 1,a0
|
||
; callr rnd
|
||
; jrnz #nxt5 ;50% skip?
|
||
|
||
#noow
|
||
PUSH a7
|
||
CREATE0 fix_airb
|
||
PULL a7
|
||
|
||
; movk 1,a0
|
||
; move a0,@plyrairballoff ;Shut off eventual airball snd
|
||
|
||
move @ballprcv_p,a2,L
|
||
cmp a3,a2
|
||
jreq #rcvok ;The receiver is touching it?
|
||
|
||
|
||
move @ballgoaltcnt,a0 ;>Chk goaltending
|
||
jrle #skipgt
|
||
move @ballpnumshot,a1
|
||
move *a3(plyr_num),a14
|
||
srl 1,a1
|
||
srl 1,a14
|
||
cmp a1,a14
|
||
jreq #nxt ;Same team?
|
||
|
||
;Turmell, allow ball to be blocked at peak of arc
|
||
move *a8(OYVEL),a0,L
|
||
move a0,a2
|
||
sra 14,a0
|
||
jrle #nogt
|
||
;Turmell
|
||
|
||
move *a3(plyr_num),a0
|
||
move @plyrnumonfire,a1
|
||
cmp a0,a1
|
||
jrz #nogt
|
||
|
||
;Try #goalt
|
||
move *a3(plyr_ptsdown),a0
|
||
|
||
subk 5,a0
|
||
jrlt #normgt ;I'm losing by 5?
|
||
; cmpi [3,8000h],a2
|
||
cmpi [3,0000h],a2
|
||
jrlt #nogt
|
||
jruc #gt
|
||
#normgt
|
||
; cmpi [2,8000h],a2
|
||
cmpi [2,0000h],a2
|
||
jrlt #nogt
|
||
|
||
#gt
|
||
movk 6,a0
|
||
calla rnd
|
||
jrnz #nxt
|
||
|
||
move @plyrairballoff,a0
|
||
jrn #nogt
|
||
move @shot_percentage,a0
|
||
jrn #nogt
|
||
|
||
|
||
move *a3(plyr_num),a0
|
||
sll 4,a0 ;Secret goaltend
|
||
.ref p1taps
|
||
addi p1taps,a0
|
||
move *a0,a0
|
||
cmpi 24,a0
|
||
jrnz #nosec1
|
||
|
||
movi 700,a0 ;Let this guy get away with GT
|
||
calla RNDPER
|
||
jrhi #nogt
|
||
|
||
; jruc #nogt
|
||
|
||
#nosec1
|
||
move a7,a2
|
||
CREATE0 plyr_goaltending ;Pass A11
|
||
move a2,a7
|
||
jruc #skipgt
|
||
#nogt
|
||
movk PS_BLOCKS,a0 ;It's a block
|
||
move *a3(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
;call rejected speech here
|
||
calla rejected_speech
|
||
|
||
movi steal_snd,a0
|
||
calla snd_play1
|
||
PUSH a7,a10
|
||
move a3,a10
|
||
calla arw_on1plyr ;Guy who picks up ball gets arw
|
||
PULL a7,a10
|
||
|
||
#skipgt
|
||
|
||
callr flash_ball
|
||
movi cheer_snd,a0
|
||
calla snd_play1
|
||
callr get_swat
|
||
|
||
move *a3(plyr_seq),a2
|
||
cmpi REBOUND_SEQ,a2
|
||
jreq #agiveball
|
||
cmpi REBOUNDA_SEQ,a2
|
||
jrnz #fix
|
||
|
||
|
||
#agiveball
|
||
PUSH a3
|
||
|
||
;call rebound speech here
|
||
move @ballpnum,a0
|
||
jrn #ballfree
|
||
|
||
movi stealsb,a0 ;steals the ball
|
||
calla snd_play1ovrp
|
||
; calla stolen_speech
|
||
|
||
jruc #skiprbnd
|
||
#ballfree
|
||
move @ballgoaltcnt,a0 ;>Chk goaltending
|
||
jrgt #skiprbnd
|
||
move @ballprcv_p,a0,L
|
||
jrz #isreb
|
||
calla intercepted_speech
|
||
jruc #skiprbnd
|
||
#isreb
|
||
move *a3(plyr_num),a14
|
||
move a14,@ballpnum
|
||
clr a0
|
||
move a0,*a3(plyr_dribmode) ;Reset dribble
|
||
|
||
move @inbound,a0
|
||
jrnn #skiprbnd
|
||
|
||
move @gmqrtr,a0
|
||
jrnz #okr
|
||
move @game_time,a0,L
|
||
cmpi >2050400,a0
|
||
jrgt #nor
|
||
|
||
#okr
|
||
calla rebound_speech
|
||
#nor
|
||
movi 80,a0
|
||
move a0,@pushing_delay
|
||
movi 15,a0
|
||
calla plyr_setshtdly
|
||
PULL a3
|
||
|
||
jruc #x
|
||
|
||
fix_airb
|
||
movk 1,a0
|
||
move a0,@plyrairballoff ;Shut off eventual airball snd
|
||
DIE
|
||
|
||
#skiprbnd
|
||
movi 80,a0
|
||
move a0,@pushing_delay
|
||
movi 15,a0
|
||
calla plyr_setshtdly
|
||
PULL a3
|
||
jruc #giveball
|
||
#fix
|
||
subk BLOCKREJ_SEQ,a2
|
||
jreq #rej
|
||
|
||
movk 3,a0 ;>Regular block
|
||
callr rnd
|
||
|
||
;This is for a block dunk, but if a player jumps in front of a pass
|
||
;this code is also executed. And ball has a chance of bouncing back at
|
||
;full speed toward passer!
|
||
|
||
jrnz #glance_off
|
||
|
||
movi steal_snd,a0
|
||
calla snd_play1
|
||
movi 80,a0
|
||
move a0,@pushing_delay
|
||
PUSH a7,a10
|
||
move a3,a10
|
||
calla arw_on1plyr
|
||
PULL a7,a10
|
||
|
||
;Block dunk stat
|
||
movk PS_BLOCKS,a0 ;It's a block
|
||
move *a3(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
;dunk rejected speech here!
|
||
;FIX, this is where bogus rejected speech calls come from
|
||
calla rejected_dnk_speech
|
||
; LOCKUP
|
||
;Go into rebound sequence to make spear look better
|
||
jruc #giveball
|
||
|
||
#glance_off
|
||
PUSH a3
|
||
movi 15,a0
|
||
calla plyr_setshtdly
|
||
PULL a3
|
||
|
||
move @ballgoaltcnt,a0
|
||
jrgt #ablk
|
||
|
||
;This is when a pass or sometimes when a dunk gets rejected!
|
||
;This also happens when a player jumps on a ball which is sitting on ground!
|
||
|
||
move *a8(OYPOS),a0
|
||
addk 30,a0 ;Not if ball near ground
|
||
jrgt #x
|
||
|
||
move *a3(plyr_dir),a0
|
||
callr sinecos_get
|
||
sll 5,a0 ;*32
|
||
sll 5,a1
|
||
move a0,*a8(OZVEL),L
|
||
move a1,*a8(OXVEL),L
|
||
|
||
movi -GRAV*22,a1 ;Towards roof
|
||
|
||
move a1,*a8(OYVEL),L
|
||
|
||
;New, 1/22/93
|
||
move @PCNT,a0
|
||
ANDK 7,a0
|
||
jrnz #x
|
||
|
||
movk 25,a0
|
||
move a0,*a3(plyr_shtdly)
|
||
;dunk rejected speech here! (plyr doesn't have ball though)
|
||
calla rejected_dnk_speech
|
||
|
||
jruc #x
|
||
|
||
#ablk
|
||
;2/3/92
|
||
clr a0
|
||
move a0,@ballgoaltcnt
|
||
|
||
; LOCKUP
|
||
|
||
;2/3/92
|
||
movi -GRAV*15,a1 ;Towards roof
|
||
move a1,*a8(OYVEL),L
|
||
|
||
|
||
movk >1f,a0
|
||
callr rnd
|
||
btst 0,a0
|
||
jrz #noxf
|
||
move *a8(OXVEL),a2,L
|
||
neg a2
|
||
move a2,*a8(OXVEL),L
|
||
#noxf
|
||
btst 1,a0
|
||
jrz #nxt
|
||
move *a8(OZVEL),a2,L
|
||
neg a2
|
||
move a2,*a8(OZVEL),L
|
||
|
||
; clr a0
|
||
; move a0,@ballgoaltcnt
|
||
|
||
jruc #nxt
|
||
|
||
#rej
|
||
movk PS_BLOCKS,a0 ;It's a block
|
||
move *a3(plyr_num),a1
|
||
calla inc_player_stat
|
||
move *a3(plyr_dir),a0
|
||
callr sinecos_get
|
||
sll 5,a0 ;*32
|
||
sll 5,a1
|
||
move a0,*a8(OZVEL),L
|
||
move a1,*a8(OXVEL),L
|
||
movi -GRAV*21,a1 ;Towards roof ;18
|
||
move a1,*a8(OYVEL),L
|
||
movk 15,a0
|
||
move a0,*a3(plyr_shtdly)
|
||
|
||
callr def_play_reward ;Good defensive play reward
|
||
|
||
clr a0
|
||
move a0,@ballgoaltcnt
|
||
jruc #nxt
|
||
|
||
#nobr
|
||
move @ballpnum,a2
|
||
jrlt #giveball ;No owner?
|
||
move *a3(plyr_num),a14
|
||
cmp a2,a14
|
||
jreq #nxt ;I already have it?
|
||
|
||
move *a3(plyr_seq),a0
|
||
subi STEAL_SEQ,a0
|
||
jrne #nxt
|
||
|
||
;Shawn, we should probably adjust this % based upon ptsdown!
|
||
;200 is if you are losing, but if you are winning, slowly reduce %
|
||
|
||
;Turmell
|
||
move *a3(plyr_attrib_p),a0,L
|
||
move *a0(PAT_STLSKILL),a0
|
||
sll 4,a0
|
||
addi stl1,a0
|
||
move *a0,a0
|
||
; movi 190,a0 ;120
|
||
|
||
calla RNDPER
|
||
jrls #nxt ;No steal?
|
||
|
||
sll 5,a2 ;*32
|
||
addi plyrproc_t,a2
|
||
move *a2,a2,L
|
||
|
||
move *a2(plyr_seqflgs),a0
|
||
btst NOSTEAL_B,a0
|
||
jrnz #nxt ;Ball can't be stolen?
|
||
|
||
|
||
move @steals_off,a0
|
||
jrnz #nxt
|
||
|
||
movk PS_STEALS,a0
|
||
move *a3(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
move *a3(plyr_attrib_p),a0,L
|
||
move *a0(PAT_STLSKILL),a0
|
||
sll 4,a0
|
||
addi stl2,a0
|
||
move *a0,a0
|
||
; movi 180,a0
|
||
|
||
calla RNDPER
|
||
jrhi #giveballflsh ;20% give him the ball?
|
||
|
||
movk 15,a0 ;>Knock it away
|
||
move a0,*a2(plyr_shtdly)
|
||
move a0,*a3(plyr_shtdly)
|
||
|
||
movi -1,a0
|
||
move a0,@ballpnum
|
||
move a0,@ballpnumlast
|
||
callr ball_convfmprel2
|
||
|
||
movi >1ffff,a2 ;>Give rnd velocity
|
||
movi >10000,a3
|
||
move a2,a0
|
||
callr rnd
|
||
add a3,a0
|
||
btst 0,a0
|
||
jrz #xpos
|
||
neg a0
|
||
#xpos move a0,*a8(OXVEL),L
|
||
move a2,a0
|
||
callr rnd
|
||
add a3,a0
|
||
btst 0,a0
|
||
jrz #ypos
|
||
neg a0
|
||
#ypos move a0,*a8(OZVEL),L
|
||
|
||
callr flash_ball
|
||
callr get_swat
|
||
movi cheer_snd,a0
|
||
calla snd_play1
|
||
|
||
jruc #nxt
|
||
|
||
stl1 .word 160,170,180,195,200
|
||
.word 205,215,245,260,285
|
||
.word 300
|
||
|
||
stl2 .word 160,170,180,195,200
|
||
.word 205,215,225,230,235
|
||
.word 250
|
||
|
||
|
||
#giveballflsh
|
||
|
||
;steals ball speech (ball sticks to player)
|
||
calla stolen_speech
|
||
|
||
movk 30,a0
|
||
move a0,@steals_off
|
||
movk 25,a0
|
||
move a0,@pass_off
|
||
movi 80,a0
|
||
move a0,@pushing_delay
|
||
callr flash_ball
|
||
callr get_swat
|
||
movi cheer_snd,a0
|
||
calla snd_play1
|
||
|
||
|
||
#giveball
|
||
move @ballprcv_p,a2,L
|
||
jrz #norcvr ;No pass receiver?
|
||
cmp a3,a2
|
||
jreq #rcvok ;The receiver has it?
|
||
|
||
movi 99,a0
|
||
callr rndrng0
|
||
|
||
clr a14
|
||
move *a3(plyr_ptsdown),a1
|
||
jrle #normint ;!Losing?
|
||
|
||
cmpi 15,a1
|
||
jrle #maxpts2
|
||
movk 15,a1
|
||
|
||
#maxpts2
|
||
movi 150,a14 ;Secret steal power!
|
||
move *a3(plyr_num),a6
|
||
.ref stlpower
|
||
move @stlpower,a4
|
||
btst a6,a4
|
||
jrnz #normint
|
||
|
||
sll 4,a1
|
||
addi #int_t,a1
|
||
move *a1,a14
|
||
|
||
#normint
|
||
move @ballpasstime,a1
|
||
subk 3,a1
|
||
abs a1
|
||
srl 1,a1 ;/2
|
||
add a14,a1
|
||
addk 1,a1 ;1% to 100%
|
||
cmp a1,a0
|
||
jrge #nxt ;% failed?
|
||
|
||
;Still too many steals
|
||
|
||
movi 400,a0 ;650 ,450
|
||
calla RNDPER
|
||
jrls #nxt ;br=nope
|
||
|
||
|
||
PUSH a2,a8
|
||
|
||
move *a8(OXVAL),a6,L ;Figure out where ball was 4 ticks ago
|
||
move *a8(OZVAL),a7,L
|
||
|
||
move *a8(OXVEL),a1,L
|
||
sll 2,a1
|
||
sub a1,a6
|
||
move *a8(OZVEL),a1,L
|
||
sll 2,a1
|
||
sub a1,a7
|
||
|
||
sra 16,a6
|
||
sra 16,a7
|
||
|
||
move a11,a8
|
||
|
||
calla seekdirdist_obxz128
|
||
move a0,*a3(plyr_newdir) ;Turn toward ball
|
||
|
||
PULL a2,a8
|
||
|
||
move *a2(plyr_rcvpass),a0
|
||
jrle #rcvok0 ;Already caught?
|
||
|
||
clr a14 ;Intercepted
|
||
move a14,*a2(plyr_rcvpass)
|
||
move *a2(plyr_jmpcnt),a0
|
||
jrnz #inair ;Jumping?
|
||
move a14,*a2(plyr_nojoy)
|
||
#inair
|
||
|
||
|
||
;Shawn, Sometimes the ball can be intercepted and you do not fall thru
|
||
;this ball flash, etc. code (Below). I moved the flash/snd stuff up
|
||
;in front of the code which checks if ball has already been caught, but then
|
||
;when an errant pass is picked up, it does the flash stuff.
|
||
|
||
callr def_play_reward ;Good defensive play reward
|
||
|
||
movi 40,a0 ;2% of intercepts are just deflects
|
||
calla RNDPER
|
||
jrls #nope
|
||
|
||
;Sometimes, just have ball bounce off the defender
|
||
|
||
movi intercept,a0
|
||
calla snd_play1ovrp
|
||
|
||
move *a3(plyr_dir),a0
|
||
callr sinecos_get
|
||
sll 5,a0 ;*32
|
||
sll 5,a1
|
||
move a0,*a8(OZVEL),L
|
||
move a1,*a8(OXVEL),L
|
||
movi -GRAV*25,a1 ;Towards roof
|
||
move a1,*a8(OYVEL),L
|
||
movk PS_STEALS,a0
|
||
move *a3(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
;Turmell
|
||
;2/4/92
|
||
jruc #x ;#nxt
|
||
|
||
#nope
|
||
|
||
;intercepted speech call here
|
||
|
||
move @ballprcv_p,a0,L ;*Plyr proc who gets this pass or 0
|
||
jrz #nopass
|
||
|
||
move @ballpasstime,a0 ;# ticks since passed
|
||
cmpi 6,a0
|
||
jrle #cntstl ;#nopass
|
||
|
||
calla intercepted_speech
|
||
jruc #cntstl
|
||
|
||
#nopass
|
||
calla stolen_speech
|
||
|
||
#cntstl
|
||
|
||
movk PS_STEALS,a0
|
||
move *a3(plyr_num),a1
|
||
calla inc_player_stat
|
||
jruc #rcvok
|
||
|
||
#rcvok0
|
||
PUSH a7,a10
|
||
move a3,a10
|
||
calla arw_on1plyr ;Guy who picks up ball gets arw
|
||
PULL a7,a10
|
||
|
||
#rcvok
|
||
clr a14
|
||
move a14,@ballprcv_p,L
|
||
|
||
#norcvr
|
||
move *a3(plyr_num),a14
|
||
move a14,@ballpnum
|
||
clr a0
|
||
move a0,*a3(plyr_dribmode) ;Reset dribble
|
||
|
||
move *a11(OIMG),a0,L
|
||
cmpi w1blok3,a0
|
||
jrz #ahha
|
||
cmpi w2blok3,a0
|
||
jrz #ahha
|
||
cmpi w4blok3,a0
|
||
jrz #ahha
|
||
cmpi w5blok3,a0
|
||
jrz #ahha
|
||
cmpi w1blok2,a0
|
||
jrz #ahha
|
||
cmpi w2blok2,a0
|
||
jrz #ahha
|
||
cmpi w4blok2,a0
|
||
jrz #ahha
|
||
cmpi w5blok2,a0
|
||
jrnz #x
|
||
|
||
#ahha
|
||
; LOCKUP
|
||
;Player is spearing the ball!
|
||
movk NOSPEAR_SEQ,a0
|
||
move *a3(plyr_dir),a7
|
||
PUSH a13
|
||
move a3,a13
|
||
calla plyr_setseq
|
||
movk 1,a0
|
||
move a0,*a13(PA10),L
|
||
PULL a13
|
||
|
||
; movi swat3_snd,a0
|
||
; calla snd_play1
|
||
|
||
jruc #x
|
||
|
||
#nxt5
|
||
; LOCKUP
|
||
nop
|
||
nop
|
||
#nxt2
|
||
nop
|
||
nop
|
||
#nxt3
|
||
nop
|
||
nop
|
||
#nxt4
|
||
nop
|
||
nop
|
||
|
||
|
||
#nxt dsj a7,#lp
|
||
|
||
|
||
#x PULL a2,a3,a4,a5,a6,a7,a10,a11
|
||
rets
|
||
|
||
tbl1 .word 16,17,18,18,18,18,18,19,20,21,22,23
|
||
;tbl1 .word 18,18,18,18,18,18,18,18,18,18,18,18
|
||
tbl2 .word 32,33,34,35,35,35,35,36,37,38,39,40
|
||
;tbl2 .word 35,35,35,35,35,35,35,35,35,35,35,35
|
||
tbl3 .word 15,15,15,15,15,15,15,15,15,15,15,15
|
||
tbl4 .word 11,12,12,12,12,12,12,13,14,15,16,17
|
||
;tbl4 .word 12,12,12,12,12,12,12,12,12,12,12,12
|
||
;tbl5 .word 500,500,500,500,500,500,500,500,400,300,200,200
|
||
tbl5 .word 500,500,500,500,500,500,500,500,500,500,500,500
|
||
|
||
|
||
#goalt_t
|
||
;Extra % chance of allowing losing team to get away with a goaltend
|
||
;1 pt down up to 15 & over down
|
||
.word 0,35,45,55,60,65,70,75,75
|
||
.word 75,80,90,90,90,90,90
|
||
|
||
#int_t
|
||
;Bonus % of losing team getting an intercept
|
||
;1 pt down up to 15 & over down
|
||
;Turmell
|
||
.word 0,4,7,10,12,15,19,20,20,20
|
||
.word 20,20,22,25,27,30
|
||
|
||
|
||
********************************
|
||
* Random swat sound
|
||
|
||
SUBR get_swat
|
||
movi swat_snd,a0
|
||
calla snd_play1
|
||
rets
|
||
|
||
|
||
; movk 3,a0
|
||
; callr rndrng0
|
||
; sll 5,a0
|
||
; addi #swtsnds,a0
|
||
; move *a0,a0,L
|
||
; calla snd_play1
|
||
; rets
|
||
;
|
||
;#swtsnds
|
||
; .long swat_snd,swat_snd,swat_snd,swat_snd
|
||
|
||
|
||
********************************
|
||
* Good defensive play reward
|
||
|
||
SUBR def_play_reward
|
||
|
||
callr flash_ball
|
||
|
||
movi steal_snd,a0
|
||
calla snd_play1
|
||
callr get_swat
|
||
movi cheer_snd,a0
|
||
calla snd_play1
|
||
|
||
PUSH a7,a10
|
||
move a3,a10
|
||
calla arw_on1plyr ;Guy who picks up ball gets arw
|
||
PULL a7,a10
|
||
|
||
rets
|
||
|
||
|
||
SUBR flash_reward
|
||
|
||
callr flash_ball
|
||
|
||
movi cheer_snd,a0
|
||
calla snd_play1
|
||
callr get_swat
|
||
rets
|
||
|
||
|
||
|
||
#*******************************
|
||
* Flash ball
|
||
|
||
SUBRP flash_ball
|
||
|
||
move @inbound,a0
|
||
jrnn #x
|
||
move @ballflash,a0
|
||
jrnz #x
|
||
PUSH a7
|
||
CREATE0 ball_flash
|
||
PULL a7
|
||
#x rets
|
||
|
||
|
||
ball_flash
|
||
movk 1,a0
|
||
move a0,@ballflash
|
||
|
||
move @ballobj_p,a8,L ;Basketball obj
|
||
|
||
movi 1010h,a2
|
||
move a2,*a8(OCONST)
|
||
|
||
movk 4,a10
|
||
#again
|
||
setf 4,0,0
|
||
movk M_CONNON,a0 ;Replace non-zero data with constant
|
||
move a0,*a8(OCTRL) ;Write 4 low bits
|
||
setf 16,1,0
|
||
|
||
SLEEPK 3
|
||
|
||
setf 4,0,0
|
||
movk M_WRNONZ,a0
|
||
move a0,*a8(OCTRL) ;Write 4 low bits
|
||
setf 16,1,0
|
||
|
||
SLEEPK 3
|
||
|
||
; move @inbound,a0
|
||
; jrnn #die
|
||
|
||
dsj a10,#again
|
||
|
||
#die clr a0
|
||
move a0,@ballflash
|
||
|
||
DIE
|
||
|
||
|
||
|
||
#*******************************
|
||
* Jump shot crowd sounds (process)
|
||
|
||
SUBR plyr_jscrowdsnd
|
||
|
||
SLEEPK 10
|
||
movi cheer1_snd,a0
|
||
calla snd_play1
|
||
movi cheer2_snd,a0
|
||
calla snd_play1
|
||
SLEEP 76
|
||
movk 9,a0
|
||
callr rndrng0
|
||
subk 7,a0
|
||
jalt SUCIDE ;70%
|
||
|
||
movi cheer3_snd,a0
|
||
calla snd_play1
|
||
; movi cheer2_snd,a0
|
||
; calla snd_play1
|
||
; movi cheer3_snd,a0
|
||
; calla snd_play1
|
||
; movi cheer4_snd,a0
|
||
; calla snd_play1
|
||
; SLEEP 150
|
||
; movi cheer5_snd,a0
|
||
; calla snd_play1
|
||
; movi cheer6_snd,a0
|
||
; calla snd_play1
|
||
DIE
|
||
|
||
|
||
#*******************************
|
||
* Convert ball from player relative
|
||
* Trashes scratch
|
||
|
||
SUBR ball_convfmprel
|
||
|
||
move @ballobj_p,a0,L
|
||
|
||
move *a0(OIMG),a1,L ;>Convert ball from player relative
|
||
move *a1(IANIOFFX),a1
|
||
sll 16,a1
|
||
move *a0(OXANI),a14,L
|
||
move a1,*a0(OXANI),L
|
||
sub a14,a1 ;Ani difference
|
||
|
||
; sra 16-5,a1
|
||
; move *a0(OZPOS),a14 ;894 to 1379 (Z range 486)
|
||
; addi (819-GZBASE),a14 ;768 to ?
|
||
; mpys a14,a1
|
||
; move a1,a14
|
||
; sra 2,a14 ;/4
|
||
; sub a14,a1
|
||
; sra 1,a14 ;/2
|
||
; sub a14,a1
|
||
; sll 16-(14+1),a1 ;*64k /16k /2
|
||
;
|
||
; move *a0(OXVAL),a14,L ;Adjust X
|
||
; sub a1,a14
|
||
; move a14,*a0(OXVAL),L
|
||
|
||
rets
|
||
|
||
#*******************************
|
||
* Convert ball from player relative
|
||
* Trashes scratch
|
||
|
||
SUBR ball_convfmprel2
|
||
|
||
move @ballobj_p,a0,L
|
||
|
||
move *a0(OIMG),a1,L ;>Convert ball from player relative
|
||
move *a1(IANIOFFX),a1
|
||
sll 16,a1
|
||
move *a0(OXANI),a14,L
|
||
move a1,*a0(OXANI),L
|
||
sub a14,a1 ;Ani difference
|
||
|
||
sra 16-5,a1
|
||
move *a0(OZPOS),a14 ;894 to 1379 (Z range 486)
|
||
addi (819-GZBASE),a14 ;768 to ?
|
||
mpys a14,a1
|
||
move a1,a14
|
||
sra 2,a14 ;/4
|
||
sub a14,a1
|
||
sra 1,a14 ;/2
|
||
sub a14,a1
|
||
sll 16-(14+1),a1 ;*64k /16k /2
|
||
|
||
move *a0(OXVAL),a14,L ;Adjust X
|
||
sub a1,a14
|
||
move a14,*a0(OXVAL),L
|
||
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Set ptsdown for each plyr
|
||
* Trashes scratch
|
||
|
||
.ref assistance_off
|
||
|
||
SUBR plyr_setptsdown
|
||
|
||
PUSH a2,a3,a4,a5,a6
|
||
|
||
movi scores,a14
|
||
move *a14+,a0
|
||
move *a14+,a4
|
||
sub a0,a4 ;+ if losing, - if winning
|
||
|
||
move @PSTATUS,a5
|
||
|
||
movi plyrproc_t,a6
|
||
movk 4,a3
|
||
|
||
#lp
|
||
move a4,a2
|
||
srl 1,a5
|
||
jrnc #set ;Drone?
|
||
|
||
move @PSTATUS,a0
|
||
move a0,a1
|
||
sll 32-2,a0
|
||
jrz #set ;Drone team?
|
||
ANDK >c,a1
|
||
jrz #set ;Drone team?
|
||
|
||
move @assistance_off,a0
|
||
jrnz #noset
|
||
|
||
movk ADJCOMPASS,a0 ;Computer assistance
|
||
calla GET_ADJ ;0-1
|
||
jrz #set ;On?
|
||
#noset
|
||
clr a2
|
||
#set
|
||
move *a6+,a0,L
|
||
move a2,*a0(plyr_ptsdown)
|
||
|
||
cmpi 3,a3
|
||
jrne #nxt
|
||
neg a4
|
||
|
||
#nxt dsj a3,#lp
|
||
|
||
PULL a2,a3,a4,a5,a6
|
||
rets
|
||
|
||
|
||
|
||
#*******************************
|
||
* Shatter backboard (Process)
|
||
|
||
SUBRP board_shatter
|
||
|
||
movi explode_snd,a0
|
||
calla snd_play1ovr
|
||
|
||
movi ohmy,a0 ;oh my!
|
||
calla snd_play1ovr
|
||
|
||
CREATE0 board_glssnd
|
||
movk 10,a1
|
||
move a1,*a0(PTIME)
|
||
|
||
move @ballpnumshot,a11
|
||
movk 10,a8
|
||
move a11,a0
|
||
subk 2,a0
|
||
jrnz #n0
|
||
addk 1,a0
|
||
#n0 move a0,@bbshatter
|
||
#shlp
|
||
movk 13,a2
|
||
#shlp2 CREATE0 board_shard
|
||
dsj a2,#shlp2
|
||
SLEEPK 1
|
||
dsj a8,#shlp
|
||
|
||
DIE
|
||
|
||
board_glssnd
|
||
;Turmell
|
||
SLEEPK 10
|
||
movi explode_snd,a0
|
||
calla snd_play1ovr
|
||
; SLEEPK 20
|
||
; movi glass_snd,a0
|
||
; calla snd_play1ovr
|
||
DIE
|
||
|
||
********************************
|
||
* Flying shard of glass (Process)
|
||
* A11=Plyr # who shot the ball (0-3)
|
||
|
||
STRUCTPD
|
||
APTR shd_ani1st_p ;*1st ani_l pos
|
||
|
||
SUBRP board_shard
|
||
|
||
movk 10,a0
|
||
callr rndrng0
|
||
sll 5,a0 ;*32
|
||
addi #shard_t,a0
|
||
move *a0,a9,L
|
||
move *a9+,a0,L
|
||
PUSHP a0
|
||
move a9,*a13(shd_ani1st_p),L
|
||
|
||
movk >f,a0
|
||
callr rnd
|
||
subk 5,a0
|
||
move a0,a6
|
||
sll 13,a6 ;XVel
|
||
|
||
movk 3,a0
|
||
callr rnd
|
||
jrnz #xnorm
|
||
sll 2,a6 ;*4
|
||
#xnorm
|
||
movk >f,a0
|
||
callr rnd
|
||
subk 6,a0
|
||
move a0,a7
|
||
sll 14,a7 ;YVel
|
||
|
||
movk 3,a0
|
||
callr rnd
|
||
jrnz #ynorm
|
||
sll 2,a7 ;*4
|
||
#ynorm
|
||
|
||
movi 36,a0
|
||
callr rndrng0
|
||
move a0,a1
|
||
neg a1 ;Y offset
|
||
|
||
movi HOOPLX-13,a0
|
||
subk 2,a11
|
||
jrge #p23
|
||
movi HOOPRX+13,a0
|
||
neg a6
|
||
#p23
|
||
sll 16,a0
|
||
addi HOOPY,a1
|
||
sll 16,a1
|
||
movi shard1_1,a2
|
||
movi CZMID,a3
|
||
movi DMAWNZ|M_3D|M_NOSCALE,a4
|
||
movi CLSDEAD,a5
|
||
calla BEGINOBJ2
|
||
|
||
movk 7,a0
|
||
callr rnd
|
||
subk 4,a0
|
||
sll 16,a0
|
||
move a0,*a8(OZVEL),L
|
||
|
||
movk 1,a0
|
||
callr rnd
|
||
addk 1,a0
|
||
move a0,a11
|
||
jruc #strt
|
||
|
||
#lp dsj a10,#noani
|
||
#strt
|
||
move a11,a10
|
||
; move *a9+,a10
|
||
; jrz #x
|
||
move *a9+,a0,L
|
||
jrnz #ani
|
||
move *a13(shd_ani1st_p),a9,L
|
||
move *a9+,a0,L
|
||
#ani
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
#noani
|
||
SLEEPK 1
|
||
move *a8(OYVEL),a2,L
|
||
addi GRAV,a2
|
||
move a2,*a8(OYVEL),L
|
||
jrn #lp ;Going up?
|
||
move *a8(OYVAL),a1,L
|
||
jrlt #lp ;Above gnd?
|
||
clr a1
|
||
move a1,*a8(OYVAL),L
|
||
move @HCOUNT,a14
|
||
sll 32-2,a14
|
||
jrz #shatter
|
||
neg a2
|
||
sra 2,a2
|
||
move a2,*a8(OYVEL),L
|
||
cmpi -(GRAV*2),a2
|
||
jrlt #lp
|
||
|
||
#shatter
|
||
clr a0
|
||
move a0,*a8(OXVEL),L
|
||
move a0,*a8(OYVEL),L
|
||
move a0,*a8(OZVEL),L
|
||
|
||
; movk 3,a0
|
||
; callr rnd
|
||
; sll 5,a0 ;*32
|
||
; addi #shat_t,a0
|
||
; move *a0,a9,L
|
||
PULLP a9
|
||
movk 3,a10
|
||
jruc #strt2
|
||
|
||
#lp2
|
||
; dsj a10,#noani2
|
||
; movk 2,a10
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
#noani2
|
||
SLEEPK 1
|
||
#strt2 move *a9+,a0,L
|
||
jrnz #lp2
|
||
|
||
|
||
jauc DELOBJDIE
|
||
|
||
|
||
#shard_t
|
||
.long s1_t,s2_t,s3_t,s4_t,s5_t,s6_t,s7_t,s8_t
|
||
.long s1_t,s6_t,s8_t
|
||
|
||
s1_t
|
||
.long st4_t
|
||
.long shard1_1
|
||
.long shard1_2
|
||
.long shard1_3
|
||
.long shard1_4
|
||
.long shard1_5
|
||
.long shard1_6
|
||
.long shard1_7
|
||
.long shard1_8
|
||
.long 0
|
||
s2_t
|
||
.long st3_t
|
||
.long shard2_1
|
||
.long shard2_2
|
||
.long shard2_3
|
||
.long shard2_4
|
||
.long shard2_5
|
||
.long shard2_6
|
||
.long shard2_7
|
||
.long shard2_8
|
||
.long 0
|
||
s3_t
|
||
.long st2_t
|
||
.long shard3_1
|
||
.long shard3_2
|
||
.long shard3_3
|
||
.long shard3_4
|
||
.long shard3_5
|
||
.long shard3_6
|
||
.long shard3_7
|
||
.long shard3_8
|
||
.long shard3_9
|
||
.long shard3_10
|
||
.long shard3_11
|
||
.long shard3_12
|
||
.long 0
|
||
s4_t
|
||
.long st1_t
|
||
.long shard4_1
|
||
.long shard4_2
|
||
.long shard4_3
|
||
.long shard4_4
|
||
.long shard4_5
|
||
.long shard4_6
|
||
.long shard4_7
|
||
.long shard4_8
|
||
.long shard4_9
|
||
.long shard4_10
|
||
.long 0
|
||
s5_t
|
||
.long st2_t
|
||
.long shard5_1
|
||
.long shard5_2
|
||
.long shard5_3
|
||
.long shard5_4
|
||
.long shard5_5
|
||
.long shard5_6
|
||
.long shard5_7
|
||
.long shard5_8
|
||
.long 0
|
||
s6_t
|
||
.long st4_t
|
||
.long shard6_1
|
||
.long shard6_2
|
||
.long shard6_3
|
||
.long shard6_4
|
||
.long shard6_5
|
||
.long shard6_6
|
||
.long shard6_7
|
||
.long shard6_8
|
||
.long 0
|
||
s7_t
|
||
.long st2_t
|
||
.long shard7_1
|
||
.long shard7_2
|
||
.long shard7_3
|
||
.long shard7_4
|
||
.long shard7_5
|
||
.long shard7_6
|
||
.long shard7_7
|
||
.long shard7_8
|
||
.long shard7_9
|
||
.long shard7_10
|
||
.long 0
|
||
s8_t
|
||
.long st4_t
|
||
.long shard8_1
|
||
.long shard8_2
|
||
.long shard8_3
|
||
.long shard8_4
|
||
.long shard8_5
|
||
.long shard8_6
|
||
.long shard8_7
|
||
.long shard8_8
|
||
.long shard8_9
|
||
.long shard8_10
|
||
.long 0
|
||
|
||
;#shat_t
|
||
; .long st1_t,st2_t,st3_t,st4_t
|
||
st1_t .long shat1_1
|
||
.long shat1_2
|
||
.long shat1_3
|
||
.long shat1_4
|
||
.long shat1_5
|
||
.long 0
|
||
st2_t .long shat2_1
|
||
.long shat2_2
|
||
.long shat2_3
|
||
.long shat2_4
|
||
.long shat2_5
|
||
.long 0
|
||
st3_t .long shat3_1
|
||
.long shat3_2
|
||
.long shat3_3
|
||
.long shat3_4
|
||
.long shat3_5
|
||
.long 0
|
||
st4_t .long shat4_1
|
||
.long shat4_2
|
||
.long shat4_3
|
||
.long shat4_4
|
||
.long shat4_5
|
||
.long 0
|
||
|
||
|
||
********************************
|
||
* 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
|
||
|
||
|
||
|
||
|
||
****************************************************************
|
||
* Sequence code may trash scratch, A2-A5
|
||
|
||
********************************
|
||
* Sequence - stand
|
||
* A11=*PxCTRL
|
||
* >B4=*Start of seq list
|
||
|
||
SUBR seq_stand
|
||
|
||
clr a0
|
||
move a0,*a13(plyr_nojoy)
|
||
|
||
movk STND_SEQ,a0 ;Set stand sequence
|
||
move *a13(plyr_ownball),a1
|
||
jrle #set
|
||
|
||
|
||
move *a13(plyr_num),a2
|
||
srl 1,a2
|
||
XORK 1,a2
|
||
sll 6,a2 ;*64
|
||
addi plyrproc_t,a2
|
||
move *a2+,a4,L
|
||
move *a2+,a5,L
|
||
move *a13(plyr_o1dist),a0
|
||
cmpi 60,a0
|
||
jrge #chko2 ;Too far?
|
||
subk 30,a0
|
||
jrlt #doelbo ;In close?
|
||
move *a4(plyr_seq),a14
|
||
subi STEAL_SEQ,a14
|
||
jreq #doelbo
|
||
subk PUSH_SEQ-STEAL_SEQ,a14
|
||
jreq #doelbo
|
||
#chko2
|
||
move *a13(plyr_o2dist),a0
|
||
cmpi 60,a0
|
||
jrge #stndwb ;Too far?
|
||
subk 30,a0
|
||
jrlt #doelbo ;In close?
|
||
move *a5(plyr_seq),a14
|
||
subi STEAL_SEQ,a14
|
||
jreq #doelbo
|
||
subk PUSH_SEQ-STEAL_SEQ,a14
|
||
jrne #stndwb
|
||
#doelbo
|
||
move *a13(plyr_autoctrl),a14
|
||
jrnz #stndwb
|
||
|
||
move @game_time,a1,L ;If under 2 secs, no elbow
|
||
cmpi >200,a1
|
||
jrle #stndwb
|
||
|
||
movi ELBO_SEQ,a0
|
||
move *a13(plyr_seq),a14
|
||
cmp a0,a14
|
||
jrne #setnostl ;!In elbo?
|
||
move *a11,a1
|
||
sll 32-6,a1
|
||
jrz #set ;No buttons?
|
||
|
||
|
||
#stndwb movk STNDWB_SEQ,a0
|
||
#set calla plyr_setseq
|
||
|
||
move *a13(plyr_ani1st_p),a0,L
|
||
move a0,b4
|
||
rets
|
||
|
||
|
||
|
||
#setnostl
|
||
calla plyr_setseq
|
||
|
||
move *a13(plyr_ani1st_p),a0,L
|
||
move a0,b4
|
||
|
||
movi 140,a0
|
||
move a0,@steals_off ;Don't allow steals for 60 ticks
|
||
movi 80,a0
|
||
move a0,@pushing_delay
|
||
rets
|
||
|
||
|
||
|
||
********************************
|
||
* Sequence - See if we should stand from steal
|
||
* A6=Button bits
|
||
|
||
SUBR seq_stealstand
|
||
|
||
;Turmell
|
||
move *a13(plyr_ownball),a0
|
||
jrp seq_stand
|
||
|
||
btst 5,a6
|
||
jrz seq_stand
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Sequence - Set new direction (for dunks)
|
||
* B4=*Next data in seq list
|
||
* >A7=New dir
|
||
|
||
SUBR seq_newdir
|
||
|
||
move *b4+,b0
|
||
move b0,a7
|
||
move *a13(plyr_anirevff),a0
|
||
jrz #x
|
||
srl 4,a7
|
||
sll 3,a7
|
||
addi #t,a7
|
||
movb *a7,a7
|
||
#x move a7,*a13(plyr_dir)
|
||
rets
|
||
|
||
#t .byte 0,7*16,6*16,5*16,4*16,3*16,2*16,1*16
|
||
|
||
|
||
#*******************************
|
||
* Sequence - Keep falling player from finishing his get up animation until
|
||
* he is on the ground
|
||
|
||
SUBR seq_stayinair
|
||
|
||
move *a13(plyr_jmpcnt),a0
|
||
jrz #x
|
||
subi 2*32+3*16,b4
|
||
#x rets
|
||
|
||
#*******************************
|
||
* Sequence - Keep zx vel for later skid on butt
|
||
|
||
SUBR seq_keepzx
|
||
|
||
move *a8(OXVEL),a0,L
|
||
sla 1,a0
|
||
move a0,*a13(plyr_kpxvel),L
|
||
move *a8(OZVEL),a0,L
|
||
sla 1,a0
|
||
move a0,*a13(plyr_kpzvel),L
|
||
rets
|
||
|
||
#*******************************
|
||
* Sequence - set injury for this player
|
||
|
||
SUBR seq_injury
|
||
|
||
movk PS_INJURY,a0 ;>Inc try shot stat
|
||
move *a13(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
rets
|
||
|
||
#*******************************
|
||
* Sequence - Restore zx vel for skid on butt
|
||
|
||
SUBR seq_stuffzx
|
||
|
||
move *a13(plyr_kpxvel),a0,L
|
||
move a0,*a8(OXVEL),L
|
||
move *a13(plyr_kpzvel),a0,L
|
||
move a0,*a8(OZVEL),L
|
||
|
||
rets
|
||
|
||
#*******************************
|
||
* Sequence - Change into fire pal
|
||
|
||
SUBR seq_strtfire
|
||
|
||
;WORD plyr_keeppal ;Keep pal for reuse upon finish of flames
|
||
|
||
move *a13(plyr_keeppal),a0
|
||
jrnz #x
|
||
move *a8(OPAL),a0
|
||
move a0,*a13(plyr_keeppal)
|
||
movi FIREFALP,a0
|
||
calla pal_getf
|
||
move a0,*a8(OPAL)
|
||
;Do head also
|
||
move *a13(plyr_headobj_p),a1,L
|
||
move *a1(OPAL),a14
|
||
move a14,*a13(plyr_hdkeeppal)
|
||
move a0,*a1(OPAL)
|
||
#x
|
||
rets
|
||
|
||
#*******************************
|
||
* Sequence - Change back from fire pal
|
||
|
||
SUBR seq_stopfire
|
||
|
||
move *a13(plyr_keeppal),a0
|
||
jrz #x
|
||
move a0,*a8(OPAL)
|
||
;Do head also
|
||
move *a13(plyr_hdkeeppal),a0
|
||
move *a13(plyr_headobj_p),a1,L
|
||
move a0,*a1(OPAL)
|
||
clr a0
|
||
move a0,*a13(plyr_keeppal)
|
||
#x
|
||
rets
|
||
|
||
#*******************************
|
||
* Sequence - Start smoke
|
||
|
||
SUBR seq_smoke
|
||
|
||
.ref plyr_smoketrail2
|
||
CREATE0 plyr_smoketrail2
|
||
move a13,*a0(PA10),L
|
||
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Sequence - Call a sound
|
||
* B4=*Next data in seq list
|
||
|
||
SUBR seq_snd
|
||
|
||
move *b4+,b0,L
|
||
move b0,a0
|
||
jauc snd_play1
|
||
|
||
#*******************************
|
||
* Sequence - Turn off the NOBALL flag
|
||
|
||
SUBR seq_noballoff
|
||
|
||
move *a13(plyr_seqflgs),a0
|
||
andni NOBALL_M,a0
|
||
move a0,*a13(plyr_seqflgs)
|
||
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Sequence - reset seq, in case dir changed
|
||
|
||
SUBR seq_resetseq
|
||
|
||
clr a0
|
||
move a0,*a13(plyr_nojoy)
|
||
|
||
move *a13(plyr_seq),a0
|
||
move a6,a1
|
||
sll 32-4,a1
|
||
jrnz #set ;Pushing joy?
|
||
|
||
movk STNDDEF_SEQ,a0 ;>Setup stand sequence
|
||
move *a13(plyr_ownball),a14
|
||
jrle #set
|
||
movk STNDDRIBDEF_SEQ,a1
|
||
|
||
#set jruc plyr_setseq
|
||
|
||
|
||
#*******************************
|
||
* Sequence - Start of run
|
||
* B4=*Next data in seq list
|
||
|
||
SUBR seq_run
|
||
|
||
move b4,a0
|
||
addi 4*16,a0
|
||
move a0,*a13(plyr_ani1st_p),L
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Sequence - jump
|
||
* A6=Button bits
|
||
|
||
SUBR seq_jump
|
||
|
||
move *a13(plyr_seq),a14
|
||
cmpi LAYUP_SEQ,a14
|
||
jreq #jmp
|
||
cmpi HOOK_SEQ,a14
|
||
jreq #jmp
|
||
cmpi HOOK2_SEQ,a14
|
||
jreq #jmp
|
||
|
||
;No head fake if under 4 secs
|
||
|
||
move @game_time,a0,L
|
||
cmpi >400,a0
|
||
jrlt #jmp
|
||
|
||
btst 4,a6 ;But1 (Shoot/block)
|
||
jrnz seq_jump2 ;Fake?
|
||
SOUND1 fake_snd
|
||
jruc seq_stand ;Fake?
|
||
|
||
fake_snd .word >f981,60,>816e,0 ;Head fake
|
||
|
||
|
||
SUBR seq_jump2
|
||
|
||
#jmp
|
||
movk 1,a0 ;Start jump
|
||
move a0,*a13(plyr_jmpcnt)
|
||
|
||
move *a8(OXVEL),a2,L ;>Reduce vel
|
||
move *a8(OZVEL),a3,L
|
||
sra 2,a2
|
||
sra 2,a3
|
||
|
||
move *a13(plyr_seq),a0
|
||
cmpi LAYUP_SEQ,a0
|
||
jrz #nodesp
|
||
|
||
move *a13(plyr_turbon),a5
|
||
|
||
move *a13(plyr_num),a14
|
||
move @plyrnumonfire,a0
|
||
cmp a0,a14
|
||
jrnz #fire1 ;If on fire, don't do turbo jump!
|
||
clr a5
|
||
jruc #fire
|
||
#fire1
|
||
|
||
;MJT
|
||
move *a13(plyr_PDATA_p),a1,L ;If lotsa turbo, still do tall jump!
|
||
move *a1(ply_turbo),a1
|
||
cmpi 24,a1
|
||
jrlt #fire ;Turbo too low?
|
||
|
||
move *a13(plyr_turbon),a5
|
||
jrnz #turb ;Br=taller jump!
|
||
#fire
|
||
sra 1,a2
|
||
sra 1,a3
|
||
#turb
|
||
move *a13(plyr_seq),a0
|
||
subk SHOOTDESP3_SEQ,a0
|
||
jrne #nodesp
|
||
movi >20000,a2 ;For this desperation shot, we
|
||
move *a13(plyr_num),a0 ;need some x velocity
|
||
subk 2,a0
|
||
jrlt #nodesp
|
||
movi ->20000,a2
|
||
#nodesp
|
||
|
||
|
||
move a2,*a8(OXVEL),L
|
||
move a3,*a8(OZVEL),L
|
||
|
||
|
||
move *a8(OZPOS),a14 ;894 to 1379 (Z range 486)
|
||
subi 400,a14
|
||
movi ->70,a1
|
||
mpys a14,a1
|
||
addi ->24000,a1
|
||
|
||
move a5,a5
|
||
jrz #notur
|
||
addi ->8000,a1
|
||
#notur
|
||
move *a13(plyr_seq),a0
|
||
cmpi LAYUP_SEQ,a0
|
||
jreq #noly2
|
||
addi ->8000,a1
|
||
#noly2
|
||
move *a13(plyr_seqflgs),a0
|
||
btst SHOOT_B,a0
|
||
jrz #notsh
|
||
move a1,a0 ;-1/16
|
||
sra 4,a0
|
||
sub a0,a1
|
||
|
||
move *a13(plyr_seq),a14
|
||
cmpi QSHOOT_SEQ,a14
|
||
jrnz #notsh
|
||
sra 1,a1
|
||
|
||
#notsh
|
||
move a1,*a8(OYVEL),L
|
||
|
||
rets
|
||
|
||
|
||
|
||
#*******************************
|
||
* Sequence - start block jump
|
||
* B4=*Next data in seq list
|
||
|
||
SUBR seq_block
|
||
|
||
PUSH a6,a7,a9
|
||
|
||
movk 1,a0 ;Start jump
|
||
move a0,*a13(plyr_jmpcnt)
|
||
|
||
|
||
move @ballobj_p,a5,L ;>Calc where ball is headed
|
||
|
||
move @ballpnum,a14
|
||
jrn #binair ;Ball in air?
|
||
|
||
|
||
move *a13(plyr_myhoopx),a0
|
||
movi CZMID,a1
|
||
|
||
sll 5,a14
|
||
addi plyrproc_t,a14
|
||
move *a14,a14,L
|
||
move *a14(plyr_seqflgs),a2
|
||
btst DUNK_B,a2
|
||
jrz #nodunk
|
||
|
||
move a0,a6 ;>Jump at rim
|
||
move a1,a7
|
||
movi -200<<16,a9
|
||
addk 6,a6
|
||
cmpi WRLDMID,a6
|
||
jrlt #calcintercept
|
||
subk 6+6,a6
|
||
jruc #calcintercept
|
||
|
||
|
||
#nodunk
|
||
move *a13(plyr_seq),a14
|
||
subk BLOCK_SEQ,a14
|
||
jrne #noblk
|
||
addk 32,b4 ;Skip
|
||
|
||
|
||
PULL a6,a7,a9
|
||
|
||
;If not near ball, jump lower and ignore turbo jump!
|
||
|
||
move *a13(plyr_balldist),a0
|
||
cmpi >100,a0 ;About 10 feet away from ball
|
||
jrlt seq_jump2
|
||
|
||
movk 1,a0 ;Start jump
|
||
move a0,*a13(plyr_jmpcnt)
|
||
|
||
clr a0
|
||
move a0,*a8(OXVEL),L ;Zero vel
|
||
move a0,*a8(OZVEL),L
|
||
|
||
move *a8(OZPOS),a14 ;894 to 1379 (Z range 486)
|
||
subi 400,a14
|
||
movi ->30,a1 ;Smaller vertical jump
|
||
mpys a14,a1
|
||
addi ->24000,a1
|
||
|
||
move a1,*a8(OYVEL),L
|
||
|
||
rets
|
||
|
||
#noblk
|
||
move *a5(OXPOS),a6 ;>In front of plyr between basket
|
||
move *a5(OXANI+16),a14
|
||
add a14,a6
|
||
move *a5(OZPOS),a7
|
||
movi -200<<16,a9
|
||
|
||
sub a6,a0
|
||
sub a7,a1
|
||
move a0,a2
|
||
move a1,a3
|
||
abs a2
|
||
abs a3
|
||
cmp a3,a2
|
||
jrge #scl
|
||
move a3,a2
|
||
jruc #scl
|
||
|
||
#scllp sra 1,a0 ;Scale down
|
||
sra 1,a1
|
||
srl 1,a2
|
||
#scl cmpi 22,a2
|
||
jrgt #scllp
|
||
|
||
add a0,a6
|
||
add a1,a7
|
||
|
||
jruc #calcintercept
|
||
|
||
#binair
|
||
move *a5(OXVAL),a6,L
|
||
move *a5(OXANI),a0,L
|
||
add a0,a6
|
||
move *a5(OZVAL),a7,L
|
||
move *a5(OYVAL),a9,L
|
||
|
||
move *a5(OXVEL),a0,L
|
||
move *a5(OZVEL),a1,L
|
||
move *a5(OYVEL),a2,L
|
||
movk 30,b0
|
||
#newblp
|
||
add a0,a6
|
||
add a1,a7
|
||
add a2,a9
|
||
addi GRAVB,a2
|
||
dsj b0,#newblp
|
||
|
||
sra 16,a6
|
||
sra 16,a7
|
||
|
||
#calcintercept
|
||
|
||
move *b4+,b0,L
|
||
move b0,a2 ;*Key img
|
||
|
||
movk 30,a4
|
||
|
||
clr a3
|
||
clr a5
|
||
move @ballprcv_p,a0,L
|
||
cmp a13,a0
|
||
jreq #setvel ;I'm receiving?
|
||
|
||
|
||
move *a2(IANIOFFX),a1
|
||
move *a2(IANI2X),a14
|
||
sub a14,a1
|
||
movi 850,a0
|
||
mpys a0,a1
|
||
sra 10,a1 ;/1024
|
||
|
||
move *a13(plyr_newdir),a14
|
||
jrge #ndok
|
||
move *a13(plyr_dir),a14
|
||
#ndok addk 8,a14
|
||
sll 32-7,a14
|
||
srl 32-7+4,a14
|
||
subk 4,a14
|
||
jrle #nof ;No flip?
|
||
neg a1
|
||
#nof
|
||
add a1,a6
|
||
|
||
|
||
move a6,a3
|
||
move a7,a5
|
||
|
||
move *a8(OXPOS),a1
|
||
move *a8(OXANI+16),a14
|
||
add a14,a1
|
||
sub a1,a3 ;X delta
|
||
|
||
; move *a13(plyr_dir),a14
|
||
; addk 8,a14 ;Round up
|
||
; srl 4,a14 ;Lose frac
|
||
; sll 4,a14 ;*16
|
||
; addi #z_t,a14
|
||
; move *a14,a5
|
||
|
||
move *a8(OZPOS),a1
|
||
sub a1,a5 ;Z delta
|
||
|
||
movk 30,a1 ;Max delta
|
||
move *a13(plyr_seq),a14
|
||
subk REBOUND_SEQ,a14
|
||
jrne #noreb
|
||
addk 20,a1
|
||
|
||
#noreb cmp a1,a3
|
||
jrlt #x1ok
|
||
move a1,a3
|
||
#x1ok
|
||
cmp a1,a5
|
||
jrlt #z1ok
|
||
move a1,a5
|
||
#z1ok
|
||
neg a1
|
||
cmp a1,a3
|
||
jrgt #x2ok
|
||
move a1,a3
|
||
#x2ok
|
||
cmp a1,a5
|
||
jrgt #z2ok
|
||
move a1,a5
|
||
#z2ok
|
||
|
||
sll 16,a3
|
||
sll 16,a5
|
||
divs a4,a3
|
||
divs a4,a5
|
||
#setvel
|
||
move a3,*a8(OXVEL),L
|
||
move a5,*a8(OZVEL),L
|
||
|
||
movi -GRAV/2,a1
|
||
mpys a4,a1
|
||
move *a8(OYVAL),a3,L ;Adjust for hgt difference
|
||
sub a9,a3 ;- if above
|
||
divs a4,a3
|
||
sub a3,a1
|
||
cmpi ->3c000,a1
|
||
jrlt #minok
|
||
movi ->3c000,a1 ;Min
|
||
#minok
|
||
|
||
move *a13(plyr_num),a14
|
||
move @plyrnumonfire,a6
|
||
cmp a14,a6
|
||
jrnz #nofire
|
||
|
||
;This guy on fire, let him jump higher!
|
||
cmpi ->50200,a1 ;4a200
|
||
jrgt #maxok
|
||
movi ->50200,a1
|
||
jruc #maxok
|
||
#nofire
|
||
cmpi ->4b200,a1 ;4a200
|
||
jrgt #maxok
|
||
movi ->4b200,a1
|
||
#maxok
|
||
move a1,*a8(OYVEL),L
|
||
|
||
|
||
#x PULL a6,a7,a9
|
||
rets
|
||
|
||
|
||
#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8
|
||
.word CZMID-12,CZMID-8,CZMID,CZMID+8
|
||
.word CZMID+12
|
||
|
||
|
||
#*******************************
|
||
* Sequence - Auto rebound jump
|
||
* B4=*Next data in seq list
|
||
|
||
SUBR seq_rebounda
|
||
|
||
move @ballpnum,a14
|
||
jrge seq_stand ;Someone grabbed ball?
|
||
|
||
|
||
PUSH a6,a7,a9
|
||
|
||
|
||
movk 1,a0 ;Start jump
|
||
move a0,*a13(plyr_jmpcnt)
|
||
|
||
|
||
move @ballobj_p,a5,L ;>Calc where ball is headed
|
||
|
||
move *a5(OXVAL),a6,L
|
||
move *a5(OXANI),a0,L
|
||
add a0,a6
|
||
move *a5(OZVAL),a7,L
|
||
move *a5(OYVAL),a9,L
|
||
|
||
move *a5(OXVEL),a0,L
|
||
move *a5(OZVEL),a1,L
|
||
move *a5(OYVEL),a2,L
|
||
movk 20,b0
|
||
movi GRAVB,a14
|
||
#newblp
|
||
add a0,a6
|
||
add a1,a7
|
||
add a2,a9
|
||
add a14,a2
|
||
dsj b0,#newblp
|
||
|
||
sra 16,a6
|
||
sra 16,a7
|
||
|
||
|
||
move *b4+,b0,L
|
||
move b0,a2 ;*Key img
|
||
|
||
movk 20,a4
|
||
|
||
|
||
move *a2(IANIOFFX),a1
|
||
move *a2(IANI2X),a14
|
||
sub a14,a1
|
||
movi 850,a0
|
||
mpys a0,a1
|
||
sra 10,a1 ;/1024
|
||
|
||
move *a13(plyr_newdir),a14
|
||
jrge #ndok
|
||
move *a13(plyr_dir),a14
|
||
#ndok addk 8,a14
|
||
sll 32-7,a14
|
||
srl 32-7+4,a14
|
||
subk 4,a14
|
||
jrle #nof ;No flip?
|
||
neg a1
|
||
#nof
|
||
add a1,a6
|
||
|
||
|
||
move a6,a3
|
||
move a7,a5
|
||
|
||
move *a8(OXPOS),a1
|
||
move *a8(OXANI+16),a14
|
||
add a14,a1
|
||
sub a1,a3 ;X delta
|
||
|
||
|
||
move *a8(OZPOS),a1
|
||
sub a1,a5 ;Z delta
|
||
|
||
movi 50,a1 ;Max delta (was 30)
|
||
cmp a1,a3
|
||
jrlt #x1ok
|
||
move a1,a3
|
||
#x1ok
|
||
cmp a1,a5
|
||
jrlt #z1ok
|
||
move a1,a5
|
||
#z1ok
|
||
neg a1
|
||
cmp a1,a3
|
||
jrgt #x2ok
|
||
move a1,a3
|
||
#x2ok
|
||
cmp a1,a5
|
||
jrgt #z2ok
|
||
move a1,a5
|
||
#z2ok
|
||
|
||
sll 16,a3
|
||
sll 16,a5
|
||
divs a4,a3
|
||
divs a4,a5
|
||
#setvel
|
||
move a3,*a8(OXVEL),L
|
||
move a5,*a8(OZVEL),L
|
||
|
||
movi -GRAV/2,a1
|
||
mpys a4,a1
|
||
move *a8(OYVAL),a3,L ;Adjust for hgt difference
|
||
sub a9,a3 ;- if above
|
||
divs a4,a3
|
||
sub a3,a1
|
||
cmpi ->1c000,a1
|
||
jrlt #minok
|
||
movi ->1c000,a1 ;Min
|
||
#minok
|
||
; cmpi ->4a000,a1
|
||
; jrgt #maxok
|
||
|
||
; LOCKUP
|
||
; PULL a6,a7,a9
|
||
; jruc seq_stand
|
||
|
||
#maxok move a1,*a8(OYVEL),L
|
||
|
||
|
||
PULL a6,a7,a9
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Sequence - start dunk jump
|
||
* B4=*Next data in seq list
|
||
|
||
SUBR seq_strtdunk
|
||
|
||
move *b4+,b0,L
|
||
move b0,a2 ;*Slam img
|
||
|
||
move *b4+,b0
|
||
move b0,a4 ;#ticks till we reach rim
|
||
|
||
; sra 1,a4
|
||
|
||
movk 1,a0 ;Start jump
|
||
move a0,*a13(plyr_jmpcnt)
|
||
|
||
|
||
move *a13(plyr_ohoopx),a3
|
||
|
||
move *a2(IANIOFFX),a1
|
||
move *a2(IANI2X),a14
|
||
sub a14,a1
|
||
movi 850,a0
|
||
mpys a0,a1
|
||
sra 10,a1 ;/1024
|
||
|
||
; move *a13(plyr_dir),a14
|
||
; addk 8,a14
|
||
; sll 32-7,a14
|
||
; srl 32-7+4,a14
|
||
; subk 4,a14
|
||
; jrle #nof ;No flip?
|
||
; neg a1
|
||
;#nof
|
||
|
||
move *a8(OCTRL),a14
|
||
btst B_FLIPH,a14
|
||
jrz #nof
|
||
neg a1
|
||
#nof
|
||
add a1,a3
|
||
|
||
|
||
move *a8(OXPOS),a1
|
||
move *a8(OXANI+16),a14
|
||
add a14,a1
|
||
sub a1,a3 ;X delta
|
||
|
||
move *a13(plyr_dir),a14
|
||
addk 8,a14 ;Round up
|
||
srl 4,a14 ;Lose frac
|
||
sll 4,a14 ;*16
|
||
addi #z_t,a14
|
||
move *a14,a5
|
||
move *a8(OZPOS),a1
|
||
sub a1,a5 ;Y delta
|
||
|
||
sll 16,a3
|
||
sll 16,a5
|
||
divs a4,a3
|
||
divs a4,a5
|
||
|
||
move *a13(plyr_seqflgs),a0
|
||
btst LAYUP_B,a0
|
||
jrz #nolay
|
||
|
||
movk LAY_UP,a0
|
||
move a0,@shot_type
|
||
|
||
movk 3,a14
|
||
move a3,a7
|
||
divs a14,a7
|
||
sub a7,a3
|
||
|
||
move a5,a7
|
||
divs a14,a7
|
||
sub a7,a5
|
||
|
||
; sra 1,a3
|
||
; sra 1,a5
|
||
jruc #layin
|
||
#nolay
|
||
movk PS_DUNKS_TRY,a0 ;>Inc dunk stats
|
||
move *a13(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
#layin
|
||
move a3,*a8(OXVEL),L
|
||
move a5,*a8(OZVEL),L
|
||
|
||
movi -GRAV/2,a1
|
||
mpys a4,a1
|
||
move *a8(OYVAL),a3,L ;Adjust for hgt difference
|
||
subi (HOOPY+12)<<16,a3 ;- if above
|
||
divs a4,a3
|
||
sub a3,a1
|
||
move a1,*a8(OYVEL),L
|
||
|
||
clr a0
|
||
move a0,@plyrcharge
|
||
move a0,@slamming
|
||
|
||
movi PS_2PTS_TRY,a0
|
||
move *a13(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
cmpi 62,a4 ;60
|
||
jrlt #nofl
|
||
|
||
PUSH a10
|
||
clr a10
|
||
cmpi 48h,a4
|
||
jrlt #nosnd
|
||
movi 20,a0 ;2% do bogus snd
|
||
callr RNDPER
|
||
jrls #nosnd
|
||
movk 1,a10
|
||
#nosnd
|
||
move a7,a2
|
||
CREATE0 plyr_camflash
|
||
move a2,a7
|
||
PULL a10
|
||
|
||
#nofl
|
||
rets
|
||
|
||
|
||
#z_t .word CZMID+12,CZMID+8,CZMID,CZMID-8
|
||
.word CZMID-12,CZMID-8,CZMID,CZMID+8
|
||
.word CZMID+12
|
||
|
||
|
||
#*******************************
|
||
* Flash cameras in crowd
|
||
|
||
.ref gndpos_t
|
||
|
||
SUBR plyr_camflash
|
||
|
||
movk 7,a0
|
||
callr rnd
|
||
addk 17,a0
|
||
move a0,a8
|
||
#lp CREATE0 plyr_cflsh
|
||
move a10,a10
|
||
jrz #nosnd
|
||
CREATE0 plyr_cflsh_snd
|
||
#nosnd
|
||
movk 4,a0 ;7
|
||
callr rnd
|
||
addk 2,a0
|
||
calla PRCSLP
|
||
dsj a8,#lp
|
||
DIE
|
||
|
||
plyr_cflsh_snd
|
||
movk 3,a0
|
||
callr rndrng0
|
||
sll 5,a0
|
||
addi flsh_t,a0
|
||
move *a0,a0,L
|
||
#s1 calla snd_play1
|
||
DIE
|
||
|
||
flsh_t .long flsh1_snd,flsh1_snd,flsh2_snd,flsh2_snd
|
||
|
||
flsh1_snd .word >fabe,5,>80a8,0
|
||
flsh2_snd .word >fbbe,8,>80a9,0
|
||
|
||
plyr_cflsh
|
||
movi 110,a0
|
||
callr rndrng0
|
||
subi 50,a0
|
||
move a0,a2
|
||
|
||
movi 399,a0
|
||
callr rndrng0
|
||
move @WORLDTLX+16,a14
|
||
subi >2000-200,a14
|
||
add a14,a0
|
||
sll 16,a0 ;X
|
||
|
||
move a2,a1
|
||
sll 16,a1 ;Y
|
||
|
||
movi flash1,a2
|
||
movi 290,a3
|
||
movi DMAWNZ|M_3DQ|M_NOCOLL|M_NOSCALE,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
movi gndpos_t,a1
|
||
move a1,*a8(ODATA_p),L
|
||
|
||
movi #f_l,a9
|
||
movk 1,a0
|
||
callr rnd
|
||
jrnz #1
|
||
movi #f2_l,a9
|
||
#1
|
||
SLEEPK 2
|
||
jauc FRQDELDIE
|
||
|
||
|
||
#f_l LW flash2,2
|
||
LW flash3,2
|
||
LW flash3a,2
|
||
LW flash3,2
|
||
LW flash2,2
|
||
LWL0 flash1,2
|
||
|
||
#f2_l LW flash4,2
|
||
LW flash5,1
|
||
LW flash6,1
|
||
LW flash5,1
|
||
LWL0 flash4,2
|
||
|
||
|
||
#*******************************
|
||
* Sequence - slam ball through hoop (dunk)
|
||
* B4=*Next data in seq list
|
||
|
||
SUBR seq_slamball
|
||
|
||
|
||
move @ballpnum,a0
|
||
move *a13(plyr_num),a1
|
||
cmp a0,a1
|
||
jrne #x ;I don't have it?
|
||
|
||
movk 1,a0
|
||
move a0,@slamming
|
||
|
||
move @ballobj_p,a5,L
|
||
|
||
move *a5(OIMG),a1,L ;>Convert ball from player relative
|
||
move *a1(IANIOFFX),a1
|
||
sll 16,a1
|
||
move a1,*a5(OXANI),L
|
||
|
||
|
||
;Shawn, the ball isn't lined up for players scoring on left side of court
|
||
|
||
move *a13(plyr_ohoopx),a7 ;>Set ball over rim
|
||
subk 6,a7
|
||
|
||
; move *a13(plyr_seq),a0
|
||
; cmpi DUNKT6_SEQ,a0
|
||
; jrz #yes
|
||
|
||
movi 35,a0
|
||
calla RNDPER
|
||
jrls #noadjst
|
||
|
||
#yes
|
||
move *a13(plyr_num),a0
|
||
cmpi 2,a0
|
||
jrlt #nofix
|
||
addk 9,a7
|
||
#nofix
|
||
subk 6,a7
|
||
|
||
#noadjst
|
||
|
||
move a7,*a5(OXPOS)
|
||
|
||
movi HOOPY-8,a14
|
||
move a14,*a5(OYPOS)
|
||
movi CZMID,a14
|
||
move a14,*a5(OZPOS)
|
||
|
||
; movk >1f,a0 ;3%
|
||
; callr rnd
|
||
; jrnz #dunknorm
|
||
|
||
movi 25,a0
|
||
calla RNDPER
|
||
jrls #dunknorm
|
||
;>Missed dunk
|
||
move *a13(plyr_ptsdown),a0
|
||
subk 2,a0
|
||
jrge #dunknorm ;I'm loosing by 5?
|
||
|
||
;MJT
|
||
; move *a13(plyr_num),a0
|
||
|
||
move @plyrnumonfire,a14
|
||
|
||
; cmp a0,a14
|
||
; jrz #dunknorm
|
||
|
||
jrnn #dunknorm
|
||
|
||
movi missd1_snd,a0
|
||
calla snd_play1
|
||
movi boo1_snd,a0
|
||
calla snd_play1
|
||
movi cheer1_snd,a0
|
||
calla snd_play1
|
||
|
||
movi >3ffff,a0
|
||
callr rnd
|
||
subi >20000,a0
|
||
move a0,a2
|
||
movi >1ffff,a0
|
||
callr rnd
|
||
addi >4000,a0
|
||
move *a13(plyr_num),a1
|
||
subk 2,a1
|
||
jrge #t2
|
||
neg a0
|
||
#t2 movi -GRAVB*40,a3 ;Up
|
||
jruc #setxyz
|
||
|
||
#dunknorm
|
||
|
||
;Deliver a facial?
|
||
move *a13(plyr_o1dist),a0
|
||
cmpi 35,a0
|
||
jrlt #dlvr
|
||
move *a13(plyr_o2dist),a0
|
||
cmpi 35,a0
|
||
jrgt #nodlvr
|
||
#dlvr
|
||
move *a13(plyr_num),a0
|
||
cmpi 2,a0
|
||
jrlt #cktm2
|
||
;check tm1
|
||
|
||
;MJT - Start opponent on fire here!
|
||
|
||
move @plyrproc_t,a0,L
|
||
move *a0(plyr_stagcnt),a1
|
||
move @plyrproc_t+32,a2,L
|
||
move *a2(plyr_stagcnt),a2
|
||
add a2,a1
|
||
cmpi 13,a1
|
||
jrlt #nodlvr
|
||
jruc #dlv
|
||
#cktm2
|
||
move @plyrproc_t+64,a0,L
|
||
move *a0(plyr_stagcnt),a1
|
||
move @plyrproc_t+96,a2,L
|
||
move *a2(plyr_stagcnt),a2
|
||
add a2,a1
|
||
cmpi 13,a1
|
||
jrlt #nodlvr
|
||
#dlv
|
||
movi 350,a0
|
||
calla RNDPER
|
||
jrhi #nodlvr
|
||
movi facial_snd,a0
|
||
calla snd_play1ovrp
|
||
#nodlvr
|
||
|
||
CREATE0 #dunk_cheer
|
||
clr a0
|
||
clr a2
|
||
movi GRAVB*4,a3
|
||
#setxyz move a0,*a5(OXVEL),L
|
||
move a2,*a5(OZVEL),L
|
||
move a3,*a5(OYVEL),L
|
||
|
||
|
||
move *a8(OXVEL),a1,L
|
||
move *a8(OZVEL),a2,L
|
||
|
||
move *b4+,b0 ;Get # ticks we hang
|
||
move b0,a0
|
||
move a0,*a13(plyr_hangcnt)
|
||
subk 2,a0
|
||
jrlt #nohang
|
||
move *a13(plyr_seq),a1
|
||
cmpi DUNKX3_SEQ,a1
|
||
jrnz #dck1
|
||
;Align dunkkx3
|
||
move *a8(OYPOS),a1
|
||
addk 5,a1
|
||
move a1,*a8(OYPOS)
|
||
move *a8(OXPOS),a1
|
||
move *a8(OXVEL),a2,L
|
||
jrnn #fix1
|
||
subi >2e,a1 ;2c
|
||
#fix1 addi >16,a1
|
||
move a1,*a8(OXPOS)
|
||
jruc #fix2
|
||
#dck1
|
||
cmpi DUNKX_SEQ,a1
|
||
jrnz #dck2
|
||
;Align dunkkx
|
||
move *a8(OYPOS),a1
|
||
addk 9,a1
|
||
move a1,*a8(OYPOS)
|
||
move *a8(OXPOS),a1
|
||
move *a8(OXVEL),a2,L
|
||
jrnn #fix1a
|
||
subi >2e,a1 ;2c
|
||
#fix1a addi >18,a1
|
||
move a1,*a8(OXPOS)
|
||
jruc #fix2
|
||
#dck2
|
||
cmpi DUNKX2_SEQ,a1
|
||
jrnz #dck3
|
||
;Align dunkkx
|
||
move *a8(OYPOS),a1
|
||
subk 2,a1
|
||
move a1,*a8(OYPOS)
|
||
move *a8(OXPOS),a1
|
||
move *a8(OXVEL),a2,L
|
||
jrnn #fix1b
|
||
subi >2e,a1 ;2c
|
||
#fix1b addi >16,a1
|
||
move a1,*a8(OXPOS)
|
||
jruc #fix2
|
||
#dck3
|
||
|
||
#fix2
|
||
clr a1 ;0 velocity
|
||
clr a2
|
||
move a1,*a8(OYVEL),L
|
||
#nohang sra 1,a1
|
||
sra 1,a2
|
||
move a1,*a8(OXVEL),L
|
||
move a2,*a8(OZVEL),L
|
||
|
||
move *a13(plyr_num),a1
|
||
move a1,@ballpnumshot
|
||
move a1,@ballpnumlast
|
||
movi -1,a0
|
||
move a0,@ballpnum ;No owner
|
||
clr a0
|
||
move a0,@ballscorezhit
|
||
move a0,@ballrimhitcnt
|
||
move a0,@ballbbhitcnt
|
||
move a0,*a13(plyr_ownball)
|
||
movi TSEC+20,a0
|
||
move a0,*a13(plyr_shtdly)
|
||
|
||
rets
|
||
|
||
#x addk 16,b4
|
||
rets
|
||
|
||
#dunk_cheer
|
||
SLEEPK 15
|
||
movi cheer1_snd,a0
|
||
calla snd_play1
|
||
movi cheer2_snd,a0
|
||
calla snd_play1
|
||
|
||
SLEEP 5*60
|
||
|
||
clr a0
|
||
move a0,@slamming
|
||
|
||
DIE
|
||
|
||
|
||
|
||
#*******************************
|
||
* Sequence - push opponent in front of me
|
||
|
||
SUBR seq_push
|
||
|
||
;We have to make the accuracy dependent upon ptsdown! Except when pushing
|
||
;my own teammate, then keep it easy.
|
||
|
||
PUSH a11
|
||
|
||
move *a13(plyr_dir),a3
|
||
|
||
move *a13(plyr_o1dist),a14
|
||
subi 50,a14
|
||
jrgt #o1far ;Too far?
|
||
clr a5 ;O1
|
||
move *a13(plyr_o1dir),a2
|
||
sub a3,a2
|
||
abs a2
|
||
cmpi >40,a2
|
||
jrle #o1dsml
|
||
subi >80,a2
|
||
abs a2
|
||
#o1dsml subk 32,a2 ;16
|
||
jrlt #pusho ;In front of me?
|
||
|
||
#o1far
|
||
|
||
move *a13(plyr_o2dist),a14
|
||
subi 50,a14
|
||
jrgt #o2far ;Too far?
|
||
movk 32,a5 ;O2
|
||
move *a13(plyr_o2dir),a2
|
||
sub a3,a2
|
||
abs a2
|
||
cmpi >40,a2
|
||
jrle #o2dsml
|
||
subi >80,a2
|
||
abs a2
|
||
#o2dsml subk 32,a2 ;16
|
||
jrlt #pusho
|
||
#o2far
|
||
|
||
;Checking for teammate also
|
||
|
||
move *a13(plyr_num),a14
|
||
move @PSTATUS,a0
|
||
btst a14,a0
|
||
jrz #x ;I am a stupid drone? Drones never
|
||
;push human teammate!
|
||
|
||
move *a13(plyr_tmdist),a14
|
||
subi 50,a14
|
||
jrgt #x ;Too far?
|
||
movi -1,a5
|
||
move *a13(plyr_tmdir),a2
|
||
sub a3,a2
|
||
abs a2
|
||
cmpi >40,a2
|
||
jrle #tmdsml
|
||
subi >80,a2
|
||
abs a2
|
||
#tmdsml subk 16,a2
|
||
jrlt #push
|
||
jruc #x
|
||
|
||
;Make it harder to push team who is down by 5 or more pnts
|
||
;The CMOS game difficulty setting should also check this.
|
||
|
||
#pusho
|
||
|
||
;Fix up, make it harder, not impossible!
|
||
|
||
; move *a13(plyr_num),a0
|
||
; srl 1,a0
|
||
; sll 4,a0
|
||
; move a0,a1
|
||
; XORK 16,a1
|
||
; addi scores,a0
|
||
; move *a0,a0
|
||
; addi scores,a1
|
||
; move *a1,a1
|
||
; subk 5,a0
|
||
; cmp a0,a1
|
||
; jrge #push
|
||
;
|
||
;;Maybe ignore this successful push of an opponent (Teammate can always get it!)
|
||
;;50% of time
|
||
; movk 1,a0
|
||
; callr rnd
|
||
; jrz #x
|
||
|
||
#push
|
||
move @inbound,a0
|
||
jrnn #x
|
||
|
||
move *a13(plyr_num),a0 ;>Nail him
|
||
|
||
move a5,a5
|
||
jrnn #push_op ;Pushing opponent
|
||
|
||
XORK 1,a0 ;Get teammate
|
||
sll 5,a0
|
||
addi plyrproc_t,a0
|
||
jruc #get_prc
|
||
|
||
#push_op
|
||
|
||
; PUSH a0
|
||
; movi 100,a0
|
||
; calla RNDPER
|
||
; jrls #no_facial
|
||
; movi facial_snd,a0
|
||
; calla snd_play1
|
||
;#no_facial
|
||
; PULL a0
|
||
|
||
srl 1,a0
|
||
XORK 1,a0
|
||
sll 6,a0 ;*64
|
||
addi plyrproc_t,a0
|
||
add a5,a0
|
||
|
||
#get_prc
|
||
move *a0,a5,L ;A5=*O proc
|
||
|
||
move *a5(plyr_seqflgs),a14
|
||
movi 300,a0
|
||
btst LAYUP_B,a14
|
||
jrnz #xz2
|
||
|
||
move *a5(plyr_seq),a14
|
||
cmpi ELBO_SEQ,a14
|
||
jrz #xz
|
||
cmpi ELBO2_SEQ,a14
|
||
jrz #xz
|
||
cmpi REBOUND_SEQ,a14
|
||
jrz #xz
|
||
cmpi REBOUNDA_SEQ,a14
|
||
jrnz #skpck
|
||
|
||
#xz
|
||
movi 150,a0 ;200
|
||
#xz2 ;Layups 30%
|
||
calla RNDPER
|
||
jrls #x ;br=nope
|
||
#skpck
|
||
|
||
move *a5(PA8),a2,L
|
||
move *a2(OYPOS),a0
|
||
move *a8(OYPOS),a1
|
||
sub a0,a1
|
||
|
||
cmpi >54,a1 ;>60,5c,58
|
||
jrgt #x ;Too far above me?
|
||
|
||
;player pushed speech here
|
||
|
||
|
||
move *a13(plyr_num),a14
|
||
move @plyr_maxpower,a0
|
||
btst a14,a0
|
||
jrz #nochng
|
||
;This guy has max power! Don't knock him down!
|
||
movk 9,a3
|
||
jruc #maxp
|
||
#nochng
|
||
move *a13(plyr_attrib_p),a0,L
|
||
move *a0(PAT_POWER),a3
|
||
#maxp
|
||
move a3,@last_power ;For later analysis
|
||
|
||
move *a13(plyr_dir),a0
|
||
move a0,a1
|
||
addi >40,a1
|
||
sll 32-7,a1
|
||
srl 32-7,a1
|
||
move a1,*a5(plyr_newdir)
|
||
callr sinecos_get
|
||
|
||
sll 4,a0 ;*128
|
||
sll 4,a1
|
||
|
||
move *a5(plyr_attrib_p),a14,L
|
||
move *a14(PAT_POWER),a14
|
||
sub a3,a14
|
||
move a14,a3
|
||
cmpi 6,a14
|
||
|
||
;If the pusher is smaller than pushee, fly
|
||
;back just a short distance.
|
||
|
||
jrge #shortfal
|
||
|
||
sll 2,a0 ;*128
|
||
sll 2,a1
|
||
jruc #sh1
|
||
#shortfal
|
||
PUSH a0,a1
|
||
movi push1_snd,a0
|
||
calla snd_play1
|
||
PULL a0,a1
|
||
#sh1
|
||
move a0,a11
|
||
move a0,*a2(OZVEL),L
|
||
move a1,*a2(OXVEL),L
|
||
move *a5(plyr_jmpcnt),a0
|
||
jrnz #injmp
|
||
movk 1,a0
|
||
move a0,*a5(plyr_jmpcnt)
|
||
;MJT
|
||
movi -GRAVB*18,a0 ;Up ;19
|
||
move @HCOUNT,a14
|
||
andi 07,a14
|
||
jrnz #notlow
|
||
movi -GRAVB*14,a0 ;Up
|
||
#notlow
|
||
move a0,*a2(OYVEL),L
|
||
#injmp
|
||
movk 32,a0
|
||
cmpi 7,a3
|
||
jrlt #notsml
|
||
|
||
movi 650,a0
|
||
calla RNDPER
|
||
jrhi #notsml
|
||
|
||
;35% of time, do small push away
|
||
; move @HCOUNT,a3
|
||
; btst 0,a3
|
||
; jrz #notsml
|
||
|
||
movi -GRAVB*8,a0 ;7
|
||
move a0,*a2(OYVEL),L
|
||
movk 16,a0 ;16
|
||
#notsml
|
||
|
||
move *a5(plyr_num),a14
|
||
move @plyr_maxpower,a1
|
||
btst a14,a1
|
||
jrz #nochng1
|
||
;This guy has max power! Don't knock him down!
|
||
movi -GRAVB*8,a0 ;7
|
||
move a0,*a2(OYVEL),L
|
||
move *a2(OZVEL),a0,L
|
||
sra 2,a0
|
||
move a0,*a2(OZVEL),L
|
||
move *a2(OXVEL),a0,L
|
||
sra 2,a0
|
||
move a0,*a2(OXVEL),L
|
||
|
||
movi push1_snd,a0
|
||
calla snd_play1
|
||
|
||
movk 16,a0
|
||
move @HCOUNT,a1
|
||
btst 0,a1
|
||
jrz #nochng1
|
||
movk 24,a0 ;16
|
||
#nochng1
|
||
move a0,*a5(plyr_stagcnt)
|
||
|
||
move @ballpnum,a0
|
||
move *a5(plyr_num),a1
|
||
cmp a0,a1
|
||
jrne #nobl ;Doesn't have ball?
|
||
|
||
;Sometimes have pushed player keep ball!
|
||
|
||
movk PS_STEALS,a0
|
||
move *a13(plyr_num),a1
|
||
calla inc_player_stat
|
||
|
||
move @ballobj_p,a4,L
|
||
movi >1ffff,a2 ;>Give rnd velocity
|
||
movi >10000,a3
|
||
move a2,a0
|
||
callr rnd
|
||
sub a3,a0
|
||
move a0,*a4(OXVEL),L
|
||
move a2,a0
|
||
callr rnd
|
||
sub a3,a0
|
||
|
||
;If pushed over scorers table, have ball drift down screen
|
||
|
||
move *a5(plyr_num),a14
|
||
sll 5,a14
|
||
addi plyrobj_t,a14
|
||
move *a14,a14,L
|
||
move *a14(OZPOS),a1
|
||
cmpi >410,a1
|
||
jrgt #not_rear
|
||
|
||
movi 40,a0
|
||
move a0,*a5(plyr_shtdly) ;can't scoop up ball
|
||
|
||
movi -1,a0
|
||
move a0,@ballpnum
|
||
move a0,@ballpnumlast
|
||
|
||
movi [2,0],a0
|
||
#not_rear
|
||
move a0,*a4(OZVEL),L
|
||
#nobl
|
||
move *a5(plyr_num),a14
|
||
sll 5,a14
|
||
addi plyrobj_t,a14
|
||
move *a14,a14,L
|
||
move *a14(OZPOS),a1
|
||
cmpi >410,a1
|
||
jrgt #not_rear2
|
||
|
||
move a11,a11
|
||
jrnn #not_rear2
|
||
|
||
movi intostands,a0
|
||
calla snd_play1
|
||
|
||
#not_rear2
|
||
|
||
move *a13(plyr_num),a0 ;If on fire, don't use turbo on push
|
||
move @plyrnumonfire,a1
|
||
cmp a0,a1
|
||
jrz #x
|
||
|
||
move *a13(plyr_PDATA_p),a2,L
|
||
move *a2(ply_turbo),a1
|
||
cmpi 10,a1
|
||
jrlt #clrbl
|
||
subk 7,a1
|
||
move a1,*a2(ply_turbo)
|
||
move *a2(ply_meter_imgs+40h),a0,L
|
||
move *a0(OFSET),a1 ;Shrink meter
|
||
addk 7,a1
|
||
move a1,*a0(OFSET)
|
||
jruc #x
|
||
|
||
#clrbl
|
||
move *a13(plyr_PDATA_p),a2,L
|
||
move *a2(ply_turbo),a14
|
||
clr a0
|
||
move a0,*a2(ply_turbo)
|
||
move *a2(ply_meter_imgs+40h),a0,L
|
||
move *a0(OFSET),a1 ;Shrink meter
|
||
add a14,a1
|
||
move a1,*a0(OFSET)
|
||
|
||
|
||
#x PULL a11
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Sequence - elbo opponents around me
|
||
|
||
SUBR seq_elbo
|
||
|
||
move *a13(plyr_num),a4
|
||
srl 1,a4
|
||
XORK 1,a4
|
||
sll 6,a4 ;*64
|
||
addi plyrproc_t,a4
|
||
|
||
move *a13(plyr_o1dist),a14
|
||
subi 40,a14
|
||
jrge #o1far ;Too far?
|
||
|
||
move @HCOUNT,a14
|
||
btst 0,a14
|
||
jrz #o1far ;Skip? (50%)
|
||
|
||
move *a4,a5,L ;A5=*O proc
|
||
move *a13(plyr_o1dir),a0
|
||
callr #elbo
|
||
#o1far
|
||
|
||
move *a13(plyr_o2dist),a14
|
||
subi 40,a14
|
||
jrge #x ;Too far?
|
||
|
||
move @HCOUNT,a14
|
||
btst 0,a14
|
||
jrz #x ;Skip? (50%)
|
||
|
||
addk 32,a4
|
||
move *a4,a5,L ;A5=*O proc
|
||
move *a13(plyr_o2dir),a0
|
||
callr #elbo
|
||
|
||
#x rets
|
||
|
||
|
||
#elbo
|
||
move *a5(PA8),a2,L ;>Make opponent fly
|
||
|
||
move a0,a1
|
||
addi >40,a1
|
||
sll 32-7,a1
|
||
srl 32-7,a1
|
||
move a1,*a5(plyr_newdir)
|
||
callr sinecos_get
|
||
|
||
;Possibly elbos toss should be shorter?
|
||
sll 5,a0 ;*32
|
||
sll 5,a1
|
||
move a0,*a2(OZVEL),L
|
||
move a1,*a2(OXVEL),L
|
||
move *a5(plyr_jmpcnt),a0
|
||
jrnz #injmp
|
||
movk 1,a0
|
||
move a0,*a5(plyr_jmpcnt)
|
||
movi -GRAVB*12,a0 ;Up 15
|
||
move a0,*a2(OYVEL),L
|
||
|
||
move *a5(plyr_num),a14
|
||
move @plyr_maxpower,a1
|
||
btst a14,a1
|
||
jrz #injmp
|
||
;This guy has max power! Don't knock him down!
|
||
movi -GRAVB*8,a0 ;7
|
||
move a0,*a2(OYVEL),L
|
||
movk 24,a0 ;16
|
||
move @HCOUNT,a1
|
||
btst 0,a1
|
||
jrz #ko
|
||
movk 16,a0 ;16
|
||
#ko
|
||
move a0,*a5(plyr_stagcnt)
|
||
rets
|
||
|
||
#injmp
|
||
movk 32,a0
|
||
move a0,*a5(plyr_stagcnt)
|
||
|
||
rets
|
||
|
||
#*****************************************************************************
|
||
; a8 = * ball object
|
||
; a11 = hoop x
|
||
|
||
|
||
GAME_QTR equ PDATA
|
||
|
||
.asg 22,DIAM
|
||
|
||
SUBRP no_good_check
|
||
|
||
move @gmqrtr,a0
|
||
move a0,*a13(GAME_QTR)
|
||
|
||
#loop
|
||
SLEEPK 1
|
||
|
||
move @game_time,a0,L ;If at beginning of
|
||
cmpi >2050400,a0 ;qrtr, no speech!
|
||
jrgt #snuffit
|
||
|
||
move @gmqrtr,a0
|
||
move *a13(GAME_QTR),a1
|
||
cmp a0,a1
|
||
jrne #snuffit
|
||
|
||
move *a8(OYPOS),a0
|
||
cmpi HOOPY+15,a0
|
||
jrgt #no_good
|
||
|
||
move *a8(OXPOS),a0
|
||
move *a8(OXANI+10h),a1
|
||
add a1,a0
|
||
sub a11,a0
|
||
abs a0
|
||
subk DIAM,a0
|
||
jrgt #no_good
|
||
|
||
|
||
move *a8(OZPOS),a0
|
||
subi CZMID,a0 ;>Check backboard
|
||
abs a0
|
||
subk DIAM,a0
|
||
jrgt #no_good
|
||
|
||
jruc #loop
|
||
|
||
|
||
#no_good
|
||
calla nogood_speech
|
||
|
||
#snuffit
|
||
DIE
|
||
|
||
******************************************************************************
|
||
.end
|
||
|