4422 lines
71 KiB
NASM
Executable File
4422 lines
71 KiB
NASM
Executable File
**************************************************************
|
||
*
|
||
* Software: Mark Turmell
|
||
* Initiated: 7/17/90
|
||
*
|
||
* Modified: Shawn Liptak, 11/13/91 -Insert coin fix, clean up
|
||
* Shawn Liptak, 2/18/92 -Basketball
|
||
*
|
||
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 3/19/93 13:07
|
||
**************************************************************
|
||
.file "score.asm"
|
||
.title "score stuff"
|
||
.width 132
|
||
.option b,d,l,t
|
||
.mnolist
|
||
|
||
|
||
.include "mproc.equ"
|
||
.include "disp.equ"
|
||
.include "gsp.equ"
|
||
.include "sys.equ"
|
||
.include "imgtbl.glo"
|
||
.include "imgtbl2.glo"
|
||
.include "game.equ"
|
||
.include "shawn.hdr"
|
||
.include "mac2.asm"
|
||
.include "audit.equ"
|
||
.include "leds.tbl"
|
||
.include "city.tbl"
|
||
.include "arrow.tbl"
|
||
.asg 0,SEQT
|
||
.include "plyr.equ"
|
||
|
||
;sounds
|
||
.ref cntdown_snd,tune2_snd,snd_play1ovr
|
||
.ref musicoff_snd
|
||
.ref horn_snd
|
||
|
||
showtm .word >fca1,73,>812c,0 ;showtime
|
||
;tuneend_snd .word >f3ff,>8,>800a,0 ;End quarter 1 tune
|
||
tuneq2_snd .word >f3ff,>8,>8006,0 ;Quarter 2 tune
|
||
tuneq3_snd .word >f3ff,>8,>8007,0 ;Quarter 3 tune
|
||
tuneq4_snd .word >f3ff,>8,>8008,0 ;Quarter 4 tune
|
||
tuneot_snd .word >f3ff,>8,>800b,0 ;Quarter o.t. tune
|
||
intoot_snd .word >f990,40,>8180,0 ;Into o.t.
|
||
tick_snd .word >f3f7,>18,>8090,0 ;Tick snd
|
||
tock_snd .word >f3f7,>18,>8091,0 ;Tock snd
|
||
|
||
minute_snd
|
||
;RJR
|
||
.word >f97f,1,>81fe,1 ;silence
|
||
.word >f9f0,80,>8193,0 ;One minute speech call
|
||
|
||
alert_snd .word >f3f7,>8,>8092,0 ;Alert snd
|
||
warn_snd .word >fbf7,>18,>80a0,0 ;Warning on shot clock
|
||
infoex_snd .word >f3ff,>8,>8097,0 ;Info box exit
|
||
whstle_snd .word >f9f5,>30,>8148,0 ;Ref whistle at game start
|
||
|
||
;symbols externally defined
|
||
|
||
.ref RNDRNG0
|
||
.ref lighten1
|
||
.ref lighten2
|
||
.ref lighten3
|
||
.ref lighten4
|
||
.ref lighten5
|
||
.ref lighten6
|
||
.ref lighten7
|
||
|
||
.ref strongmen
|
||
.ref get_but_val_down
|
||
.ref get_start_cur
|
||
.ref special_heads
|
||
.ref plyrnumonfire
|
||
.ref qtr_purchased,idiot_box
|
||
.ref update_shoes
|
||
.ref flash_bigtxt
|
||
.ref setup_message,print_string_C2,print_string
|
||
.ref copy_string,print_string_C
|
||
.ref dec_to_asc
|
||
.ref osgemd_ascii,sgmd8_ascii,osgmd8_ascii
|
||
.ref lgmd_ascii,omlgmd_ascii,ogmd10_ascii
|
||
.ref mess_line_spacing
|
||
.ref mess_cursy
|
||
.ref TWOPLAYERS
|
||
.ref mess_objid
|
||
|
||
.ref inc_player_stat
|
||
.ref assist_plyr
|
||
.ref blink_plyr
|
||
.ref msg_ram
|
||
.ref get_but_val_cur
|
||
.ref start_animate
|
||
.ref plyr_endofqrtr,WFLG
|
||
.ref ballgoaltcnt
|
||
.ref ballflash
|
||
.ref PALRAM,PCNT,pal_clean
|
||
.ref CRED_P,BINBCD,GAMSTATE,CR_STRTP,GET_ADJ,PSTATUS
|
||
.ref P1DATA,P2DATA,P3DATA,P4DATA,OBJON,OBJOFF
|
||
.ref init_t1a,init_t2a,init_t3a,init_t4a
|
||
.ref timertcnt,prt_status
|
||
.ref names,name_flop,name_cnt
|
||
.ref plyrobj_t,PSTATUS2
|
||
.ref anipt_getsclxy
|
||
.ref CR_CONTP,inbound
|
||
.ref HALT
|
||
.ref OWINDOW,RD15FONT,AUD,WNDWON
|
||
.ref CWINDOW,GETCPNT,LOWZ
|
||
.ref HEXTOASC,WIPEOUT
|
||
.ref STRCNRMO
|
||
.ref plyrproc_t,pal_getf
|
||
.ref team1,team2
|
||
.ref gndpos_t
|
||
.ref plyr_takeoutball3
|
||
.ref ballpnumshot,ballpnum
|
||
.ref pal_find
|
||
.ref ballobj_p
|
||
.ref get_all_buttons_down
|
||
.ref get_all_starts_down
|
||
.ref AUD1
|
||
.ref baby_flag
|
||
|
||
|
||
;symbols defined in this file
|
||
|
||
.def LED_00,last_score,tvpanelon,LED_MAX
|
||
.def sclockx
|
||
.def arrow1t,arrow2t,arrow3t,arrow4t
|
||
.def arrow1r,arrow2r,arrow3r,arrow4r
|
||
.def arrow1r2p,arrow2r2p
|
||
|
||
;uninitialized ram definitions
|
||
|
||
|
||
; BSSX already_on,4*32 ;arw on hd 0=no or proc pntr
|
||
BSSX conttimers,16*4 ;Continue timer value. 4 players
|
||
.bss shotram,3*32
|
||
BSSX shotimer,32
|
||
.bss temp,16
|
||
BSSX game_time,32 ;mins,secs,10ths of sec each 8 bits
|
||
BSSX clock_speed,16
|
||
BSSX gmqrtr,16 ;0-5 4=overtime,5=final score
|
||
.bss bclok_imgs,32*4 ;images for big clock at botm of scrn
|
||
.bss clock_imgs,32*4 ;images for main clock at top of scrn
|
||
.bss score_imgs,32*2 ;*Imgs for score table score (Must follow^)
|
||
BSSX scores,16*2 ;scores for both teams
|
||
.bss tvpanelon,32 ;!0=TV panel displayed, or proc pntr
|
||
|
||
.bss msg_flop,16 ;Flop message variable 0 or 1
|
||
BSSX BTIME,16
|
||
BSSX cntrs_delay,16 ;Delay, for Jamies cntdwn
|
||
.bss flsh_ptrs,6*32 ;Bigscr imgs for red flash
|
||
.bss last_score,32 ;#scores for red flash
|
||
BSSX clock_active,16 ;0=clock tick down, 1=hold clock
|
||
BSSX sc_proc,32 ;0if not shot clock on scrn, proc ptr
|
||
BSSX _4plyrsingame,16 ;1=no stay on machine, 0=stay on
|
||
|
||
BSSX p1taps,16 ;Keep in order
|
||
BSSX p2taps,16
|
||
BSSX p3taps,16
|
||
BSSX p4taps,16
|
||
BSSX show_shot,16
|
||
BSSX assistance_off,16 ;1=turn help off
|
||
BSSX plyr_tourn,16 ;*4
|
||
BSSX plyr_maxpower,16 ;Powerup power - can't be pushed down
|
||
|
||
;equates first originated in this file
|
||
|
||
BUYTICK .EQU 110 ;60
|
||
SCRNTOP .EQU 100
|
||
BRGHT .EQU >2c2c ;GREEN IN SCOREPAL
|
||
COLORS .EQU >0909 ;WHITE IN SCOREPAL
|
||
COLORA .EQU >3E3E ;COLOR CYCLE IN SCOREPAL
|
||
|
||
|
||
GND_Y .equ 116-40
|
||
GZBASE .equ 894
|
||
|
||
LEDOCTRL .equ DMAWNZ|>3000 ;3 bits per pixel (In BB.asm)
|
||
MSGOCTRL .equ DMAWNZ|>6000
|
||
|
||
|
||
.text
|
||
|
||
**************************
|
||
;game timer fractions
|
||
|
||
timer_table
|
||
; .word 0e000h
|
||
; .word 0e000h
|
||
; .word 0e000h
|
||
; .word 0e000h
|
||
; .word 0e000h
|
||
|
||
; .asg 4f00h,BASETM
|
||
;MJT 12/16/93
|
||
.asg 5100h,BASETM
|
||
|
||
.word BASETM-BASETM*30/100 ;1 (slowest)
|
||
.word BASETM-BASETM*15/100 ;2 (slower)
|
||
.word BASETM ;3 (default) ;Approx 10 minutes
|
||
.word BASETM+BASETM*15/100 ;4 (faster)
|
||
.word BASETM+BASETM*30/100 ;5 (fastest)
|
||
|
||
|
||
#******************************************************************
|
||
* Player is off screen for too long - put up an arrow pointing him out
|
||
*
|
||
*a8=0-3 for plyr #
|
||
|
||
SUBR plyr_lost
|
||
|
||
move a8,a9
|
||
clr a0
|
||
move a0,*a13(PDATA) ;lost cntr
|
||
move a0,*a13(PDATA+64),L ;Current red/white shoe pal
|
||
move a0,*a13(PDATA+96),W ;lft/rgt 0=lft
|
||
move a0,*a13(PDATA+112),W ;minimum duration
|
||
SLEEP 3*60 ;Make sure plyr gets started
|
||
|
||
sll 5,a8
|
||
movi plyrproc_t,a0 ;*player process (4)
|
||
add a8,a0
|
||
move *a0,a0,L
|
||
move a0,*a13(PDATA+32),L ;Keep player proc around
|
||
|
||
addi plyrobj_t,a8
|
||
move *a8,a8,L
|
||
|
||
sll 6,a9
|
||
move a9,a11
|
||
move a9,*a13(PDATA+128),W ;keep a9 around
|
||
|
||
|
||
#top
|
||
SLEEPK 3 ;15
|
||
calla update_shoes
|
||
SLEEPK 3
|
||
calla update_shoes
|
||
|
||
callr maybe_replenish
|
||
|
||
move *a8(OXPOS),a0
|
||
|
||
movi lft_lst,a10 ;off lft side
|
||
|
||
move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players
|
||
jrz #not2
|
||
movi lft2_lst,a10 ;off lft side
|
||
#not2
|
||
|
||
move @WORLDTLX+16,a7
|
||
addk 10,a7 ;0
|
||
cmp a0,a7
|
||
jrgt #offsc
|
||
|
||
movi rgt_lst,a10 ;off rgt side
|
||
|
||
move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players
|
||
jrz #not2a
|
||
movi rgt2_lst,a10 ;off lft side
|
||
#not2a
|
||
|
||
|
||
addi 15eh-10,a7 ;164
|
||
cmp a0,a7
|
||
jrlt #offsc
|
||
clr a0
|
||
move a0,*a13(PDATA) ;zero lost cntr
|
||
jruc #top
|
||
|
||
maybe_replenish
|
||
PUSH A9
|
||
move *a13(PDATA+128),a9
|
||
move @PSTATUS,a0
|
||
move a9,a1
|
||
srl 6,a1
|
||
btst a1,a0
|
||
; jrz #no_refill
|
||
|
||
move *a13(PDATA+32),a0,L ;player proc
|
||
move *a0(plyr_PDATA_p),a0,L
|
||
move *a0(used_turbo),a2
|
||
jrle #ok
|
||
subk 1,a2
|
||
move a2,*a0(used_turbo)
|
||
jruc #no_refill
|
||
|
||
#ok callr replenish_turbo
|
||
|
||
#no_refill
|
||
PULL a9
|
||
rets
|
||
|
||
#offsc
|
||
;Off scrn for x seconds!
|
||
;Turn on proper img/ lft or rgt arw!
|
||
|
||
add a9,a10
|
||
move *a10+,a2,L ;get proper arw dir & # img
|
||
move *a10,a0,L ;get x
|
||
|
||
move a8,a10
|
||
|
||
movi [100,0],a1
|
||
clr a3
|
||
movi DMAWNZ|M_SCRNREL|M_NOCOLL,a4
|
||
;9/20/93
|
||
movi arwid,a5
|
||
; movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
|
||
;Give arrow correct player pal!
|
||
|
||
; move *a13(PDATA+32),a0,L
|
||
; move *a0(PA8),a0,L
|
||
; move *a0(OPAL),*a8(OPAL)
|
||
|
||
move a8,a9
|
||
move a10,a8 ;player img to stick to
|
||
|
||
#metop inc a10
|
||
move a10,a0
|
||
andi 03h,a0 ;7 ;replenish rate when off scrn
|
||
jrnz #me1
|
||
|
||
callr maybe_replenish
|
||
|
||
#me1
|
||
move *a8(OXPOS),a0
|
||
|
||
move @WORLDTLX+16,a7
|
||
cmp a0,a7
|
||
jrgt #offsc2l
|
||
addi 164h,a7
|
||
cmp a0,a7
|
||
jrlt #offsc2r
|
||
;minimum time
|
||
move *a13(PDATA+112),a0 ;minimum duration
|
||
inc a0
|
||
move a0,*a13(PDATA+112)
|
||
cmpi 15,a0
|
||
jrle #zo
|
||
move a9,a0
|
||
calla DELOBJ
|
||
clr a0
|
||
move a0,*a13(PDATA) ;zero lost cntr
|
||
move a0,*a13(PDATA+112)
|
||
move a11,a9
|
||
;Now turn on a over hd arw for this guy coming back onto the scrn
|
||
|
||
move *a13(PDATA+32),a10,L
|
||
callr arw_on1plyr
|
||
|
||
move *a13(PDATA+32),a3,L
|
||
clr a2
|
||
move a2,*a3(plyr_offtime)
|
||
|
||
jruc #top
|
||
|
||
#offsc2l
|
||
sub a0,a7
|
||
sra 3,a7
|
||
|
||
movi 40,a0 ;move *a9(OXPOS),a0
|
||
sub a7,a0
|
||
|
||
move *a13(PDATA+32),a3,L
|
||
move *a3(plyr_num),a2
|
||
|
||
move @PSTATUS,a14
|
||
btst a2,a14
|
||
jrz #nohelp
|
||
|
||
move *a3(plyr_offtime),a2
|
||
inc a2
|
||
move a2,*a3(plyr_offtime)
|
||
cmpi 3*50*2+20-20,a2 ;*1
|
||
jrlt #nohelp
|
||
|
||
move @gmqrtr,a2
|
||
jrnz #nohelp
|
||
|
||
move @inbound,a0
|
||
jrnn #nohelp0
|
||
|
||
clr a2
|
||
move a2,*a3(plyr_offtime)
|
||
|
||
;This plyr is an idiot! Insult him.
|
||
PUSH a0,a1
|
||
movk 2,a0
|
||
move *a3(plyr_num),a1
|
||
calla idiot_box
|
||
PULL a0,a1
|
||
|
||
#nohelp0
|
||
clr a2
|
||
move a2,*a3(plyr_offtime)
|
||
|
||
#nohelp
|
||
;If plyr 2 or 3 and other team has ball, spd him up
|
||
|
||
move @ballpnum,a3
|
||
jrn #noow ;No owner?
|
||
|
||
move *a13(PDATA+32),a3,L
|
||
move *a3(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball
|
||
jrnz #noow
|
||
|
||
move *a3(plyr_num),a14
|
||
subk 2,a14
|
||
jrlt #noow
|
||
;Does other team own ball?
|
||
;Okay, this guy is in trouble, spd him up
|
||
movk 1,a2
|
||
move a2,*a3(plyr_offscrn) ;Player is offscrn, spd him up
|
||
|
||
#noow
|
||
|
||
move *a13(PDATA+96),a2
|
||
sub a0,a2
|
||
abs a2
|
||
cmpi 2,a2
|
||
jrle #offo
|
||
|
||
move *a9(OXPOS),a1
|
||
cmp a0,a1
|
||
jrz #offo
|
||
jrlt #off0
|
||
cmpi 0,a1
|
||
jrz #off1
|
||
|
||
subk 1,a1
|
||
jruc #off1
|
||
#off0 addk 1,a1
|
||
#off1 move a1,*a9(OXPOS)
|
||
move a1,*a13(PDATA+96)
|
||
jruc #offo
|
||
|
||
#offsc2r
|
||
sub a7,a0
|
||
sra 3,a0
|
||
|
||
movi 325,a7 ;move *a9(OXPOS),a7
|
||
add a7,a0
|
||
|
||
|
||
move *a13(PDATA+32),a3,L
|
||
move *a3(plyr_offtime),a2
|
||
inc a2
|
||
move a2,*a3(plyr_offtime)
|
||
|
||
|
||
cmpi 3*50*2+20-20,a2 ;*1
|
||
jrlt #nohelp1
|
||
|
||
move @gmqrtr,a2
|
||
jrnz #nohelp1
|
||
|
||
move @inbound,a0
|
||
jrnn #nohelp01
|
||
|
||
|
||
; cmpi 3*50,a2
|
||
; jrlt #nohelp1
|
||
;
|
||
; move @gmqrtr,a2
|
||
; jrnz #nohelp1
|
||
|
||
clr a2
|
||
move a2,*a3(plyr_offtime)
|
||
|
||
;This plyr is an idiot! Insult him.
|
||
PUSH a0,a1
|
||
movk 2,a0
|
||
move *a3(plyr_num),a1
|
||
calla idiot_box
|
||
PULL a0,a1
|
||
|
||
#nohelp01
|
||
clr a2
|
||
move a2,*a3(plyr_offtime)
|
||
#nohelp1
|
||
|
||
|
||
;If plyr 0 or 1 and other team has ball, spd him up
|
||
|
||
move @ballpnum,a3
|
||
jrn #noow1 ;No owner?
|
||
|
||
move *a13(PDATA+32),a3,L
|
||
move *a3(plyr_ownball),a14 ;-=Teammate, 0=Neither, +=I have ball
|
||
jrnz #noow
|
||
|
||
move *a3(plyr_num),a14
|
||
subk 2,a14
|
||
jrge #noow1
|
||
;Does other team own ball?
|
||
;Okay, this guy is in trouble, spd him up
|
||
movk 1,a2
|
||
move a2,*a3(plyr_offscrn) ;Player is offscrn, spd him up
|
||
|
||
#noow1
|
||
|
||
move *a13(PDATA+96),a2
|
||
sub a0,a2
|
||
abs a2
|
||
cmpi 2,a2
|
||
jrle #offo
|
||
|
||
move *a9(OXPOS),a1
|
||
cmp a0,a1
|
||
jrz #offo
|
||
jrlt #bff0
|
||
|
||
subk 1,a1
|
||
jruc #bff1
|
||
#bff0
|
||
cmpi 365,a1
|
||
jrz #bff1
|
||
addk 1,a1
|
||
#bff1 move a1,*a9(OXPOS)
|
||
move a1,*a13(PDATA+96)
|
||
|
||
#offo
|
||
move *a13(PDATA+112),a0 ;minimum duration
|
||
inc a0
|
||
move a0,*a13(PDATA+112)
|
||
|
||
move *a8(OZPOS),a6
|
||
; addk 10,a6
|
||
move a6,*a9(OZPOS)
|
||
|
||
subi GZBASE,a6 ;-Base
|
||
jrge #zok
|
||
clr a6
|
||
#zok
|
||
move a6,a3
|
||
sra 1,a6 ;Z/2
|
||
sra 3,a3 ;Z/8
|
||
sub a3,a6 ;=Z/2.667
|
||
addi GND_Y,a6
|
||
subi 34h,a6
|
||
|
||
move @WORLDTLY+16,a0
|
||
abs a0
|
||
add a0,a6
|
||
|
||
move a6,*a9(OYPOS)
|
||
|
||
#zo SLEEPK 1 ;2
|
||
move @HALT,a0
|
||
jrnz #zo
|
||
jruc #metop
|
||
|
||
|
||
lft_lst .long arrow1l,[40,0] ;4's
|
||
.long arrow2l,[40,0]
|
||
.long arrow3l,[40,0]
|
||
.long arrow4l,[40,0]
|
||
|
||
rgt_lst .long arrow1r,[325,0] ;360's
|
||
.long arrow2r,[325,0]
|
||
.long arrow3r,[325,0]
|
||
.long arrow4r,[325,0]
|
||
|
||
lft2_lst
|
||
.long arrow1l2p,[40,0] ;4's
|
||
.long arrow1l2p,[40,0]
|
||
.long arrow2l2p,[40,0]
|
||
.long arrow2l2p,[40,0]
|
||
|
||
rgt2_lst
|
||
.long arrow1r2p,[325,0] ;360's
|
||
.long arrow1r2p,[325,0]
|
||
.long arrow2r2p,[325,0]
|
||
.long arrow2r2p,[325,0]
|
||
|
||
#******************************************************************
|
||
*
|
||
* Turn on a player arrow/# on top of his head
|
||
* Individual #
|
||
*
|
||
* a10=plyr proc of whom to stick an arrow on
|
||
|
||
SUBR arw_on1plyr
|
||
|
||
;Stick player number on top of player
|
||
|
||
PUSH a7,a8,a9,a11
|
||
move @GAMSTATE,a0
|
||
subk INAMODE,a0
|
||
jrz #x
|
||
|
||
move *a10(plyr_PDATA_p),a0,L ;*PxDATA
|
||
move *a0(head_arw_img),a0,L
|
||
move *a0(OPLINK),a0,L
|
||
|
||
;9/20/93
|
||
movi ARWPID,a1
|
||
; clr a1
|
||
movi arwon,a7
|
||
move *a0(PA8),a8,L
|
||
move *a0(PA9),a9,L
|
||
movi 2*60+15,a11 ;1
|
||
calla XFERPROC
|
||
|
||
#x
|
||
PULL a7,a8,a9,a11
|
||
rets
|
||
|
||
|
||
#******************************************************************
|
||
*
|
||
* Turn on a player arrow/# on top of his head
|
||
*
|
||
* a10=PxDATA ram
|
||
|
||
SUBR stick_number
|
||
|
||
;Stick player number on top of player
|
||
|
||
PUSH a7,a8,a9,a11
|
||
move @GAMSTATE,a0
|
||
subk INAMODE,a0
|
||
jrz #x
|
||
|
||
move *a10(head_arw_img),a9,L
|
||
move *a9(OPLINK),a0,L
|
||
|
||
.if DEBUG
|
||
calla process_exist
|
||
jrnz #ok
|
||
LOCKUP
|
||
#ok
|
||
.endif
|
||
|
||
;9/20/93
|
||
movi ARWPID,a1
|
||
; clr a1
|
||
movi arwon,a7
|
||
move *a0(PA8),a8,L
|
||
move *a0(PA9),a9,L
|
||
movi 4*60,a11
|
||
calla XFERPROC
|
||
|
||
#x
|
||
PULL a7,a8,a9,a11
|
||
rets
|
||
|
||
|
||
#******************************************************************
|
||
*
|
||
* Turn on a player arrow/# on top of his head
|
||
*
|
||
* a10=PxDATA ram
|
||
|
||
SUBR stick_numbers
|
||
|
||
;Stick player number on top of player
|
||
|
||
clr a3
|
||
movi [-100,0],a1 ;95
|
||
movi plyrobj_t,a11
|
||
movi arrow1t,a2
|
||
move @plyrproc_t,a0,L
|
||
move a0,*a13(PDATA+32),L ;Keep player proc around
|
||
cmpi P1DATA,a10
|
||
jrz #yup
|
||
|
||
movk 1,a3
|
||
movi plyrobj_t+32,a11
|
||
movi arrow2t,a2
|
||
|
||
|
||
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
|
||
jrz #not2
|
||
movi arrow1t2p,a2
|
||
#not2
|
||
|
||
|
||
move @plyrproc_t+32,a0,L
|
||
move a0,*a13(PDATA+32),L ;Keep player proc around
|
||
cmpi P2DATA,a10
|
||
jrz #yup
|
||
|
||
movk 2,a3
|
||
movi plyrobj_t+64,a11
|
||
movi arrow3t,a2
|
||
|
||
|
||
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
|
||
jrz #not2a
|
||
movi arrow2t2p,a2
|
||
#not2a
|
||
|
||
|
||
|
||
move @plyrproc_t+64,a0,L
|
||
move a0,*a13(PDATA+32),L ;Keep player proc around
|
||
cmpi P3DATA,a10
|
||
jrz #yup
|
||
|
||
movk 3,a3
|
||
movi plyrobj_t+96,a11
|
||
movi arrow4t,a2
|
||
|
||
|
||
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
|
||
jrz #not2b
|
||
movi arrow2t2p,a2
|
||
#not2b
|
||
|
||
|
||
move @plyrproc_t+96,a0,L
|
||
move a0,*a13(PDATA+32),L ;Keep player proc around
|
||
#yup
|
||
move a3,*a13(PDATA+64) ;Plyr num
|
||
; move a2,*a13(PDATA+80),L ;arw img
|
||
clr a3
|
||
movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4
|
||
movi arwid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
move a8,a0
|
||
calla OBJOFF
|
||
|
||
move a8,*a10(head_arw_img),L
|
||
|
||
move *a13(PDATA+32),a0,L ;Give arrow correct player pal!
|
||
|
||
move a8,a9
|
||
move *a11,a8,L ;player img to stick to
|
||
|
||
movi 4*60,a11
|
||
|
||
arwon
|
||
;Code to turn off arrows and turn them into CPU letters if he is a drone
|
||
|
||
move @PSTATUS,a0
|
||
move *a13(PDATA+64),a1
|
||
btst a1,a0
|
||
jrz #arwait ;Drone?
|
||
|
||
move a9,a0
|
||
calla OBJON
|
||
|
||
|
||
#stktop
|
||
|
||
* Align arw obj with player obj
|
||
* A8=*Obj
|
||
* a6=Arw Obj
|
||
* Trashes scratch, A2-A6
|
||
|
||
calla anipt_getsclxy ;GETANIXY
|
||
srl 16,a0
|
||
|
||
move *a8(OZPOS),A2
|
||
addk 30,a2
|
||
move a2,*a9(OZPOS)
|
||
|
||
move *a8(OXPOS),a2
|
||
subk 4,a2 ;7
|
||
add a0,a2
|
||
move a2,*a9(OXPOS)
|
||
|
||
move *a8(OPLINK),a0,L
|
||
move *a0(plyr_headobj_p),a0,L
|
||
move *a0(OYPOS),A2
|
||
subi 35,a2
|
||
move a2,*a9(OYPOS)
|
||
|
||
#wtlp
|
||
SLEEPK 1
|
||
move @HALT,a0
|
||
jrnz #wtlp
|
||
dsj a11,#stktop
|
||
|
||
move a9,a0
|
||
calla OBJOFF
|
||
|
||
#arwait SLEEP 60 ;>7fff
|
||
move a9,a0
|
||
calla OBJOFF
|
||
jruc #arwait
|
||
|
||
#******************************************************************
|
||
*
|
||
* a10=PxDATA ram
|
||
|
||
SUBR stick_cpu
|
||
|
||
move @PSTATUS,a0
|
||
btst a11,a0
|
||
janz SUCIDE
|
||
move @GAMSTATE,a0
|
||
cmpi INAMODE,a0
|
||
jaz SUCIDE
|
||
|
||
move a10,*a13(PDATA),L
|
||
; SLEEP 4*60-40
|
||
|
||
move *a13(PROCID),a5 ;get pid for stick img oid
|
||
|
||
movi [-65,0],a1
|
||
movi cpu,a2
|
||
clr a3
|
||
movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
move a8,a9
|
||
|
||
sll 5,a11
|
||
addi plyrobj_t,a11
|
||
|
||
move *a11,a8,L ;player img to stick to
|
||
|
||
movi 60*15,a11
|
||
#metop
|
||
calla anipt_getsclxy ;GETANIXY
|
||
srl 16,a0
|
||
|
||
move *a8(OZPOS),A2
|
||
addk 3,a2
|
||
move a2,*a9(OZPOS)
|
||
|
||
move *a8(OXPOS),a2
|
||
subk 7,a2 ;y
|
||
add a0,a2
|
||
move a2,*a9(OXPOS)
|
||
|
||
move *a8(OPLINK),a0,L
|
||
move *a0(plyr_headobj_p),a0,L
|
||
move *a0(OYPOS),A2
|
||
addi 20,a2
|
||
move a2,*a9(OYPOS)
|
||
|
||
move *a13(PDATA),a0,L
|
||
move *a0(ply_time),a0
|
||
cmpi 25,a0
|
||
jrlt #mex
|
||
|
||
move a9,a8
|
||
jauc DELOBJDIE
|
||
|
||
#mex SLEEPK 1
|
||
move @HALT,a0
|
||
jrnz #mex
|
||
dsj a11,#metop
|
||
move a9,a0
|
||
calla DELOBJ
|
||
DIE
|
||
|
||
#******************************************************************
|
||
*
|
||
* a10=PxDATA ram
|
||
|
||
SUBR stick_spark
|
||
|
||
movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE,a4
|
||
move *a13(PROCID),a5 ;get pid for stick img oid
|
||
movi [-65,0],a1
|
||
movi lighten1,a2
|
||
clr a3
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
move a8,a9
|
||
|
||
sll 5,a11
|
||
addi plyrobj_t,a11
|
||
|
||
move *a11,a8,L ;player img to stick to
|
||
#metop0
|
||
move a9,a0
|
||
movi 400h,a14
|
||
move a14,*a0(OYPOS)
|
||
calla OBJOFF
|
||
movi light_t,a10
|
||
movi 4*60,a0 ;4*60,a0
|
||
calla RNDRNG0
|
||
addi 30,a0 ;30
|
||
calla PRCSLP
|
||
move a9,a0
|
||
calla OBJON
|
||
movk 1,a0
|
||
move a0,*a13(PDATA)
|
||
#metop
|
||
|
||
move *a13(PDATA),a0
|
||
dec a0
|
||
move a0,*a13(PDATA)
|
||
jrnz #cont
|
||
movk 3,a0
|
||
move a0,*a13(PDATA)
|
||
|
||
move *a10+,a0,L
|
||
jrz #metop0
|
||
SWAP a8,a9
|
||
move *a8(OFLAGS),a1
|
||
calla obj_aniq
|
||
SWAP a8,a9
|
||
move *a10+,a0
|
||
move a0,*a13(PDATA+16)
|
||
move *a10+,a0
|
||
move a0,*a13(PDATA+32)
|
||
|
||
#cont
|
||
|
||
calla anipt_getsclxy ;GETANIXY
|
||
srl 16,a0
|
||
|
||
move *a8(OZPOS),a2
|
||
addk 3,a2
|
||
move a2,*a9(OZPOS)
|
||
|
||
move *a8(OXPOS),a2
|
||
addk 3,a2
|
||
add a0,a2
|
||
move *a13(PDATA+16),a0
|
||
sub a0,a2
|
||
move a2,*a9(OXPOS)
|
||
|
||
move *a8(OPLINK),a0,L
|
||
move *a0(plyr_headobj_p),a0,L
|
||
move *a0(OYPOS),a2
|
||
addi 44h,a2
|
||
move *a13(PDATA+32),a0
|
||
sub a0,a2
|
||
move a2,*a9(OYPOS)
|
||
|
||
|
||
#mex SLEEPK 1
|
||
; move @HALT,a0
|
||
; jrnz #mex
|
||
jruc #metop
|
||
|
||
|
||
light_t
|
||
LWW lighten1,1,10
|
||
LWW lighten2,-2,20
|
||
LWW lighten3,-5,37
|
||
LWW lighten4,2,44
|
||
LWW lighten5,4,56
|
||
LWW lighten6,4,65
|
||
LWW lighten7,1,69
|
||
.long 0
|
||
|
||
#******************************************************************
|
||
*
|
||
* a10=PxDATA ram
|
||
|
||
SUBR stick_spark2
|
||
|
||
movi DMAWNZ|M_NOCOLL|M_3D|M_NOSCALE|M_FLIPH,a4
|
||
move *a13(PROCID),a5 ;get pid for stick img oid
|
||
movi [-65,0],a1
|
||
movi lighten1,a2
|
||
clr a3
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
move a8,a9
|
||
|
||
sll 5,a11
|
||
addi plyrobj_t,a11
|
||
|
||
move *a11,a8,L ;player img to stick to
|
||
#metop0
|
||
move a9,a0
|
||
movi 400h,a14
|
||
move a14,*a0(OYPOS)
|
||
calla OBJOFF
|
||
movi light_t,a10
|
||
movi 4*60,a0 ;4*60,a0
|
||
calla RNDRNG0
|
||
addi 30,a0 ;30
|
||
calla PRCSLP
|
||
move a9,a0
|
||
calla OBJON
|
||
movk 1,a0
|
||
move a0,*a13(PDATA)
|
||
#metop
|
||
|
||
move *a13(PDATA),a0
|
||
dec a0
|
||
move a0,*a13(PDATA)
|
||
jrnz #cont
|
||
movk 3,a0
|
||
move a0,*a13(PDATA)
|
||
|
||
move *a10+,a0,L
|
||
jrz #metop0
|
||
SWAP a8,a9
|
||
move *a8(OFLAGS),a1
|
||
calla obj_aniq
|
||
SWAP a8,a9
|
||
move *a10+,a0
|
||
move a0,*a13(PDATA+16)
|
||
move *a10+,a0
|
||
move a0,*a13(PDATA+32)
|
||
|
||
#cont
|
||
|
||
calla anipt_getsclxy ;GETANIXY
|
||
srl 16,a0
|
||
|
||
move *a8(OZPOS),a2
|
||
addk 3,a2
|
||
move a2,*a9(OZPOS)
|
||
|
||
move *a8(OXPOS),a2
|
||
subk 7,a2
|
||
add a0,a2
|
||
move *a13(PDATA+16),a0
|
||
add a0,a2
|
||
move a2,*a9(OXPOS)
|
||
|
||
move *a8(OPLINK),a0,L
|
||
move *a0(plyr_headobj_p),a0,L
|
||
move *a0(OYPOS),a2
|
||
addi 44h,a2
|
||
move *a13(PDATA+32),a0
|
||
sub a0,a2
|
||
addi 10,a2
|
||
move a2,*a9(OYPOS)
|
||
|
||
|
||
#mex SLEEPK 1
|
||
; move @HALT,a0
|
||
; jrnz #mex
|
||
jruc #metop
|
||
|
||
#*********************************************************************
|
||
* Called from main loop to update credit counters, etc.
|
||
|
||
SUBR cr_cntrs_update
|
||
|
||
move @cntrs_delay,a0 ;Selection screen delay
|
||
jrle #cr1
|
||
dec a0
|
||
move a0,@cntrs_delay
|
||
#x rets
|
||
|
||
#cr1
|
||
.if IMGVIEW
|
||
rets ;Debug - no credit cntdwn
|
||
.endif
|
||
|
||
move @GAMSTATE,a2
|
||
jrn #x ;In diagnostics?
|
||
cmpi INAMODE,a2
|
||
jreq #x
|
||
cmpi ININTRO,a2
|
||
jreq #x ;In stats?
|
||
subk INPLYRINFO,a2
|
||
jreq #x ;In stats?
|
||
|
||
move @name_cnt,a0
|
||
dec a0
|
||
move a0,@name_cnt
|
||
jrnz main0
|
||
movi 110,a0 ;Shorter time for player names message
|
||
move a0,@name_cnt
|
||
|
||
move @GAMSTATE,a0
|
||
subk INGAME,a0 ;If not ingame, don't change messages
|
||
jrne main0
|
||
|
||
move @name_flop,a0
|
||
XORK 1,a0
|
||
move a0,@name_flop
|
||
jrnz #showpnames
|
||
|
||
;replace names with correct buyin message
|
||
movi 210,a0 ;Longer time for buyin message / meter
|
||
move a0,@name_cnt
|
||
|
||
movi insert,a11
|
||
calla CR_CONTP ;Credits to cont
|
||
jrlo #no00 ;No?
|
||
movi start,a11
|
||
#no00
|
||
movi insert,a10
|
||
calla CR_STRTP ;Credits to start
|
||
jrlo #no1 ;No?
|
||
movi start,a10
|
||
#no1
|
||
|
||
movi P1DATA,a9
|
||
clr a3
|
||
movk 4,a4
|
||
|
||
movi LED_P,a0
|
||
calla pal_getf
|
||
move a0,a5
|
||
|
||
#msglp
|
||
|
||
.ref pleasewt
|
||
move @pleasewt,a14
|
||
btst a3,a14
|
||
jrnz #nxta
|
||
|
||
|
||
move @TWOPLAYERS,a7 ;0 = NO, 1 = YES 2 players
|
||
jrz #not2
|
||
cmpi P1DATA,a9
|
||
jrz #nxt
|
||
cmpi P4DATA,a9
|
||
jrz #nxt
|
||
#not2
|
||
|
||
|
||
move *a9(ply_messages),a8,L
|
||
jrz #nxt
|
||
move a10,a0
|
||
move @PSTATUS2,a14
|
||
btst a3,a14
|
||
jrz #no2 ;This player has never been started
|
||
move a11,a0
|
||
#no2
|
||
|
||
; jruc #nxta
|
||
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
move *a9(ply_meter_imgs),a0,L
|
||
calla OBJOFF
|
||
move *a9(ply_meter_imgs+20h),a0,L
|
||
calla OBJOFF
|
||
move *a9(ply_meter_imgs+40h),a0,L
|
||
calla OBJOFF
|
||
|
||
#nxt
|
||
jruc #nxta
|
||
|
||
#nxta
|
||
addi PDSIZE,a9
|
||
addk 1,a3
|
||
dsj a4,#msglp
|
||
|
||
jruc main0
|
||
|
||
#showpnames
|
||
#*
|
||
;Try to swap buyin message and turbo meters for player names
|
||
|
||
movi scorep,a0
|
||
calla pal_getf
|
||
move a0,a5
|
||
|
||
movk 4,a4
|
||
movi P1DATA,a9
|
||
movi names,a10
|
||
clr a3
|
||
|
||
#pnlp
|
||
move @pleasewt,a14
|
||
btst a3,a14
|
||
jrnz #nxtpn
|
||
|
||
|
||
move *a9(ply_messages),a8,L
|
||
jrz #noani
|
||
|
||
move a8,a0
|
||
calla OBJOFF
|
||
|
||
move *a9(ply_meter_imgs),a0,L
|
||
move *a0(OYPOS),a14
|
||
cmpi 5,a14
|
||
jrnz #dip
|
||
movi 15,a14
|
||
jruc #dip2
|
||
|
||
#dip movi 18,a14
|
||
|
||
#dip2 move a14,*a0(OYPOS)
|
||
calla OBJON
|
||
; move *a9(ply_meter_imgs+20h),a0,L
|
||
; calla OBJON
|
||
|
||
move @TWOPLAYERS,a0
|
||
jrz #not2p
|
||
|
||
;Turmell 3/23/93
|
||
cmpi 1,a3
|
||
jrz #not2p
|
||
cmpi 2,a3
|
||
jrz #not2p
|
||
|
||
move a8,a0
|
||
calla OBJOFF
|
||
jruc #inhr
|
||
#not2p
|
||
movi tocontrol,a0
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
jruc #inhr
|
||
|
||
|
||
; jruc #nxtpn
|
||
|
||
; move *a9(ply_meter_imgs+20h),a0,L
|
||
; calla OBJON
|
||
; move *a9(ply_meter_imgs+40h),a0,L
|
||
; calla OBJON
|
||
|
||
; jruc #ani
|
||
|
||
#noani
|
||
|
||
move *a9(ply_time),a1
|
||
subk 23,a1
|
||
jrlt #nxtpn
|
||
#inhr
|
||
move *a9(ply_meter_imgs),a8,L ;change box to name
|
||
move a5,*a8(OPAL)
|
||
#ani
|
||
move *a10,a0,L
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
#nxtpn addi PDSIZE,a9
|
||
addk 1,a3
|
||
addk 32,a10
|
||
dsj a4,#pnlp
|
||
|
||
main0 move @timertcnt,a3 ;>Update player timers
|
||
subk 1,a3
|
||
jrgt mlp120
|
||
|
||
;Could put all this stuff inside the individual players process
|
||
|
||
clr a0
|
||
move a0,@msg_ram,L
|
||
move a0,@msg_ram+32,L
|
||
move a0,@msg_ram+64,L
|
||
move a0,@msg_ram+96,L
|
||
|
||
movi msg_ram,a9
|
||
movk 4,a3 ;# players
|
||
movi P1DATA,a0
|
||
mlp100
|
||
move *a0(ply_time),a1
|
||
jrz mlp103
|
||
cmpi 3500,a1
|
||
jrz mlp103
|
||
; subk 1,a1
|
||
move a1,*a0(ply_time)
|
||
jrnz mlp101
|
||
|
||
;somebody just let their timer expire!
|
||
|
||
mlp101
|
||
mlp103 addi PDSIZE,a0
|
||
dsj a3,mlp100
|
||
|
||
|
||
move @msg_flop,a0
|
||
XORK 1,a0
|
||
move a0,@msg_flop
|
||
jrz mlp105
|
||
;hide meter and turn on insert coin message if timer < 10
|
||
movi insert,a10
|
||
calla CR_CONTP ;Credits to cont
|
||
jrlo #no ;No?
|
||
movi start,a10
|
||
#no
|
||
movi msg_ram,a9
|
||
movk 4,a3
|
||
#lp move *a9+,a2,L
|
||
jrz mlp110
|
||
move *a2(ply_meter_imgs),a0,L
|
||
calla OBJOFF
|
||
|
||
move *a2(ply_meter_imgs+>20),a8,L
|
||
move a10,a0
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
movk 07h,a0 ;5
|
||
move a0,*a8(OYPOS)
|
||
|
||
move *a2(ply_meter_imgs+>40),a0,L
|
||
calla OBJOFF
|
||
|
||
dsj a3,#lp
|
||
|
||
jruc mlp110
|
||
|
||
|
||
meters_t
|
||
; .long 0,METERr,METERy,METERg,METERb
|
||
;MJT
|
||
.long 0,METERb,METERg,METERy,METERr
|
||
|
||
mlp105
|
||
movi msg_ram,a9
|
||
movk 4,a3
|
||
#lp2 move *a9+,a2,L
|
||
jrz mlp110
|
||
move *a2(ply_meter_imgs),a0,L
|
||
calla OBJON
|
||
|
||
move *a2(ply_meter_imgs+>20),a8,L
|
||
move a3,a0
|
||
sll 5,a0
|
||
addi meters_t,a0
|
||
move *a0,a0,L
|
||
|
||
; movi METERg,a0 ;change back to meter
|
||
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
movk 17,a0 ;11
|
||
move a0,*a8(OYPOS)
|
||
|
||
move *a2(ply_meter_imgs+>40),a0,L
|
||
calla OBJON
|
||
|
||
dsj a3,#lp2
|
||
|
||
mlp110
|
||
calla prt_cr_timers
|
||
|
||
;FIX!!!!
|
||
;Grab this rate from CMOS
|
||
movi 80,a3 ;Cr-timer rate of decline
|
||
mlp120 move a3,@timertcnt
|
||
|
||
rets
|
||
|
||
|
||
#*******************************
|
||
* Show tv score/time panel (Process)
|
||
|
||
SUBR score_showtvpanel2
|
||
|
||
move @tvpanelon,a0,L
|
||
jrnz #die
|
||
|
||
move a13,@tvpanelon,L
|
||
movi 4*TSEC+10,a11 ;12*
|
||
move @game_time,a0,L
|
||
jrnz scr1
|
||
|
||
|
||
movi 3*TSEC+10+30,a11
|
||
|
||
move @gmqrtr,a0 ;Ran out of time
|
||
subk 4,a0
|
||
jrlt scr1
|
||
move @scores,a0
|
||
move @scores+16,a1
|
||
cmp a0,a1
|
||
jreq scr1
|
||
|
||
|
||
|
||
movi 6*TSEC+10+30,a11
|
||
jruc scr1
|
||
|
||
SUBR score_showtvpanel
|
||
|
||
move @tvpanelon,a0,L
|
||
jrnz #die
|
||
|
||
move a13,@tvpanelon,L
|
||
|
||
SLEEP 40 ;TSEC*2
|
||
|
||
movi 4*TSEC+10-70,a11
|
||
|
||
SUBR scr1
|
||
; calla pal_clean
|
||
|
||
move a13,@tvpanelon,L
|
||
PUSH A11
|
||
move @bclok_imgs,a0,L
|
||
calla ISOBJ
|
||
jrz tv2
|
||
move *a0(OIMG),a1,L
|
||
cmpi clock2,a1
|
||
jrnz tv2
|
||
movk 1,a0 ;=clock already on scrn
|
||
jruc tv3
|
||
|
||
tv2
|
||
clr a0
|
||
tv3 callr tv_score ;display big tv look score plate
|
||
|
||
PULL A0
|
||
move a11,a0
|
||
calla PRCSLP
|
||
|
||
move @game_time,a0,L ;clock expired while panel was up
|
||
jrz tv3a
|
||
|
||
#tv4 SLEEPK 1
|
||
move @HALT,a0
|
||
jrnz #tv4
|
||
|
||
tv3a movi CLSDEAD|tvid,a0
|
||
calla obj_del1c
|
||
movi CLSDEAD|tvscrid,a0
|
||
calla obj_del1c
|
||
|
||
move @game_time,a0,L ;clock expired while panel was up
|
||
jrz tv4
|
||
|
||
movb @game_time+24,a0
|
||
jrz #x
|
||
|
||
tv4 movi tvid,a0 ;Delete big clock at botm of scrn
|
||
calla KIL1C
|
||
movi CLSDEAD|bclockid,a0
|
||
calla obj_del1c
|
||
|
||
#x
|
||
clr a0
|
||
move a0,@tvpanelon,L
|
||
|
||
#die DIE
|
||
|
||
|
||
#******************************************************************
|
||
* Redraw scoreboard credits message after a credit is registered.
|
||
* Service credit or other! Called at other times also!
|
||
*
|
||
* Trashes scratch
|
||
|
||
|
||
SUBR update_scorebrd
|
||
|
||
;If scoreboard is on screen, not in free play, erase old credits digits
|
||
;and display new ones. Also tell quarter timer balls not to show up
|
||
;for awhile.
|
||
|
||
;must be a better check for score board on screen!
|
||
|
||
PUSH a8,a11
|
||
|
||
move @GAMSTATE,a0
|
||
subk INGAME,a0
|
||
jrne xo
|
||
|
||
; movi 40,a0
|
||
; move a0,@cr_delay
|
||
|
||
movi CLSDEAD|creditid,a0
|
||
calla obj_del1c ;kill credit/qrtr imgs
|
||
|
||
callr prt_credits
|
||
|
||
calla CR_STRTP ;Credits to start
|
||
jrlo #no ;No?
|
||
movi start,a10
|
||
movi insert,a3
|
||
jruc #yes
|
||
#no movi insert,a10
|
||
movi start,a3
|
||
#yes
|
||
|
||
calla CR_CONTP ;Credits to continue
|
||
jrlo #no2 ;No?
|
||
movi start,a11
|
||
movi insert,a3
|
||
jruc #yes2
|
||
#no2 movi insert,a11
|
||
movi start,a3
|
||
#yes2
|
||
|
||
***********************************************************
|
||
|
||
move @TWOPLAYERS,a0
|
||
jrnz #tag0
|
||
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 0,a4
|
||
jrz #no3
|
||
move a11,a0 ;A continue
|
||
#no3
|
||
move @P1DATA+ply_messages,a8,L
|
||
jrz #tag
|
||
move *a8(OIMG),a2,L
|
||
cmp a3,a2
|
||
jrnz #tag
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
jruc #tag0
|
||
|
||
#tag
|
||
;now check to see if player is under 10 seconds and message has flopped
|
||
;into his meter img
|
||
move @P1DATA+ply_meter_imgs+>20,a8,L
|
||
jrz #tag0
|
||
move *a8(OIMG),a1,L
|
||
; cmpi METERr,a1
|
||
;MJT
|
||
cmpi METERb,a1
|
||
|
||
jrz #tag0
|
||
cmpi METERb,a1
|
||
jrz #tag0
|
||
cmp a0,a1
|
||
jrz #tag0 ;already correct message
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
**********************************************************
|
||
|
||
#tag0
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 1,a4
|
||
jrz #no3a
|
||
move a11,a0
|
||
#no3a
|
||
move @P2DATA+ply_messages,a8,L
|
||
jrz #tag1
|
||
move *a8(OIMG),a2,L
|
||
cmp a3,a2
|
||
jrnz #tag1
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
jruc #tag1a
|
||
#tag1
|
||
move @P2DATA+ply_meter_imgs+>20,a8,L
|
||
jrz #tag1a
|
||
move *a8(OIMG),a1,L
|
||
|
||
; cmpi METERy,a1
|
||
cmpi METERg,a1
|
||
|
||
jrz #tag1a
|
||
cmpi METERb,a1
|
||
jrz #tag1a
|
||
cmp a0,a1
|
||
jrz #tag1a ;already correct message
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
***********************************************************
|
||
|
||
#tag1a
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 2,a4
|
||
jrz #no3b
|
||
move a11,a0
|
||
#no3b
|
||
move @P3DATA+ply_messages,a8,L
|
||
jrz #tag3
|
||
move *a8(OIMG),a2,L
|
||
cmp a3,a2
|
||
jrnz #tag3
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
jruc #tag2a
|
||
#tag3
|
||
move @P3DATA+ply_meter_imgs+>20,a8,L
|
||
jrz #tag2a
|
||
move *a8(OIMG),a1,L
|
||
|
||
; cmpi METERg,a1
|
||
|
||
|
||
move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players
|
||
jrz #not_2p5
|
||
cmpi METERr,a1
|
||
jruc #2pf
|
||
#not_2p5
|
||
|
||
|
||
cmpi METERy,a1
|
||
#2pf
|
||
|
||
jrz #tag2a
|
||
cmpi METERb,a1
|
||
jrz #tag2a
|
||
cmp a0,a1
|
||
jrz #tag2a ;already correct message
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
***********************************************************
|
||
|
||
#tag2a
|
||
move @TWOPLAYERS,a0
|
||
jrnz xo
|
||
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 3,a4
|
||
jrz #no3c
|
||
move a11,a0
|
||
#no3c
|
||
move @P4DATA+ply_messages,a8,L
|
||
jrz #tag4
|
||
move *a8(OIMG),a2,L
|
||
cmp a3,a2
|
||
jrnz xo
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
jruc xo
|
||
#tag4
|
||
move @P4DATA+ply_meter_imgs+>20,a8,L
|
||
jrz xo
|
||
move *a8(OIMG),a1,L
|
||
|
||
; cmpi METERb,a1
|
||
cmpi METERr,a1
|
||
|
||
jrz xo
|
||
cmp a0,a1
|
||
jrz xo
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
xo PULL a8,a11
|
||
rets
|
||
|
||
#****************************************************************
|
||
* Print credits or free play message in top score board
|
||
*
|
||
* Trashes a0-a7
|
||
|
||
SUBR prt_credits
|
||
|
||
PUSH a8,a9
|
||
MOVK ADJFREPL,A0
|
||
CALLA GET_ADJ ;SEE IF FREEPLAY......(Z BIT CLEAR IF SO!)
|
||
jrnz freep
|
||
|
||
calla CRED_P
|
||
calla BINBCD
|
||
|
||
move a0,a9
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #numbs,a0
|
||
move *a0,a2,L
|
||
movi >d7,a0
|
||
movk 3,a1
|
||
sll 16,a0
|
||
sll 16,a1
|
||
movi 949,a3 ;Z
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD|creditid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
srl 4,a9
|
||
sll 32-4,a9
|
||
srl 32-4-5,a9 ;*32
|
||
addi #numbs,a9
|
||
move *a9,a2,L
|
||
movi >d7-5,a0
|
||
movk 3,a1
|
||
sll 16,a0
|
||
sll 16,a1
|
||
calla BEGINOBJ2
|
||
|
||
movi credit,a2
|
||
jruc free1
|
||
|
||
freep
|
||
movi freeply,a2
|
||
free1 movk 3,a1 ;Y
|
||
movi >b3,a0
|
||
sll 16,a0
|
||
sll 16,a1
|
||
movi 949,a3 ;Z
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD|creditid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
PULL a8,a9
|
||
rets
|
||
|
||
#numbs .long font60,font61,font62,font63,font64,font65,font66,font67
|
||
.long font68,font69
|
||
|
||
|
||
****************************************************************
|
||
* Start main game clock
|
||
|
||
SUBR clock_strt
|
||
|
||
|
||
clr a0
|
||
move a0,@tvpanelon,L
|
||
move a0,@ballflash
|
||
|
||
callr prt_credits
|
||
callr prt_qrtr
|
||
|
||
movi clock_imgs,a10
|
||
movi #init_t,a11 ;>Setup status images
|
||
jruc #status
|
||
#lp
|
||
move *a11+,a1 ;Y
|
||
sll 16,a0
|
||
sll 16,a1
|
||
move *a11+,a3 ;Z
|
||
movi DMAWNZ|M_NOCOLL|M_3DQ,a4
|
||
move *a11+,a2,L
|
||
movi CLSDEAD|gclockid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
move a0,*a10+,L
|
||
movi gndpos_t+32*16,a1
|
||
move a1,*a8(ODATA_p),L
|
||
|
||
#status move *a11+,a0 ;X
|
||
cmpi 4000,a0
|
||
jrne #lp ;!End?
|
||
|
||
movk 1,a0
|
||
move a0,@clock_active
|
||
|
||
#lp1 calla prt_top_clock
|
||
#lp1a SLEEPK 1
|
||
move @HALT,a0
|
||
jrnz #lp1a
|
||
|
||
;When testing dunks - PUT IN!
|
||
; jruc #lp1a ;Debug - no time clock on
|
||
|
||
.if IMGVIEW
|
||
jruc #lp1a ;Debug - no time clock on
|
||
.endif
|
||
|
||
move @clock_active,a0
|
||
jrnz #lp1a
|
||
|
||
|
||
;Fix
|
||
movi ADJSPEED,a0 ;game timer speed (1-5)
|
||
calla GET_ADJ
|
||
sll 4,a0 ;x 16 bits
|
||
addi timer_table-10h,a0
|
||
move *a0,a1
|
||
move @PSTATUS,a0
|
||
cmpi >f,a0
|
||
jrnz #not4
|
||
;In a 4 plyr game, make clock go faster!
|
||
addi 200h,a1 ;100h
|
||
#not4
|
||
|
||
; movi >ffff,a1
|
||
|
||
move @clock_speed,a0
|
||
add a1,a0
|
||
; zext a0
|
||
move a0,@clock_speed
|
||
jrnc #lp1a
|
||
|
||
movi game_time,a10
|
||
movb *a10,a0 ;grab 10ths of second byte
|
||
jrz #tag
|
||
dec a0
|
||
movb a0,*a10
|
||
movb @game_time+24,a0
|
||
jrz #lp1
|
||
jruc #lp1a
|
||
#tag
|
||
movk 9,a0 ;restuff 10ths of second
|
||
movb a0,*a10
|
||
movb *a10(8),a0 ;grab seconds byte
|
||
jrz #tag1
|
||
dec a0
|
||
movb a0,*a10(8)
|
||
jruc #lp1
|
||
#tag1
|
||
movk 9,a0
|
||
movb a0,*a10(8) ;restuff single seconds byte
|
||
movb *a10(16),a0 ;grab 10 seconds byte
|
||
jrz #tag2
|
||
dec a0
|
||
movb a0,*a10(16)
|
||
jruc #lp1
|
||
#tag2
|
||
|
||
|
||
movb *a10(24),a0 ;Minute byte
|
||
cmpi 3,a0
|
||
jrhs #nodaj
|
||
.ref drone_adjskill
|
||
calla drone_adjskill ;Pass A0
|
||
#nodaj
|
||
|
||
|
||
movk 5,a0
|
||
movb a0,*a10(16) ;restuff 10 seconds byte
|
||
movb *a10(24),a0 ;grab minute byte
|
||
jrz #tag3
|
||
dec a0
|
||
movb a0,*a10(24)
|
||
jrnz #lp1
|
||
|
||
;rearrange top clock to allow tenths of seconds
|
||
|
||
move @clock_imgs+>20,a0,L
|
||
movi 186,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @clock_imgs+>40,a0,L
|
||
movi 194,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @clock_imgs+>60,a0,L
|
||
movi >cb,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @clock_imgs+>0,a0,L
|
||
movi >d4,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
;Possibly rearrange bottom clock piece also!
|
||
;FIX!!!!
|
||
CREATE0 tick_tock
|
||
|
||
;RJR
|
||
; movi minute_snd,a0
|
||
; calla snd_play1
|
||
CREATE0 one_min_to_go
|
||
|
||
|
||
move @bclok_imgs,a0,L
|
||
calla ISOBJ
|
||
jrnz #yes
|
||
|
||
;Turn that clock on!
|
||
CREATE tvid,scr_clock
|
||
|
||
SLEEPK 2
|
||
|
||
|
||
move @bclok_imgs,a0,L
|
||
; jruc #lp1
|
||
#yes move *a0(OIMG),a1,L
|
||
cmpi clock,a1
|
||
jrnz #lp1
|
||
|
||
;yes rearrange bottom clock because it is on screen!
|
||
|
||
move a0,a8
|
||
movi clock2,a0
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
move @bclok_imgs+32,a1,L
|
||
movi >136,a0
|
||
move a0,*a1(OXPOS)
|
||
move @bclok_imgs+64,a1,L
|
||
movi >116,a0
|
||
move a0,*a1(OXPOS)
|
||
move @bclok_imgs+96,a1,L
|
||
movi >120,a0
|
||
move a0,*a1(OXPOS)
|
||
jruc #lp1
|
||
|
||
|
||
#tag3
|
||
;Rearrange clock imgs so they are correct
|
||
|
||
move @clock_imgs+>20,a0,L
|
||
movi >c8,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @clock_imgs+>40,a0,L
|
||
movi >d0,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @clock_imgs+>60,a0,L
|
||
movi >c4,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @clock_imgs+>0,a0,L
|
||
movi >bb,a1
|
||
move a1,*a0(OXPOS)
|
||
|
||
move @tvpanelon,a0,L
|
||
jrnz #tag4x
|
||
|
||
;clock is out on screen all by itself!
|
||
|
||
movi tvid,a0 ;Delete big clock at botm of scrn
|
||
calla KIL1C
|
||
movi CLSDEAD|bclockid,a0
|
||
calla obj_del1c
|
||
|
||
#tag4x
|
||
movk 1,a0
|
||
move a0,@clock_active
|
||
clr a0
|
||
move a0,@game_time,L
|
||
|
||
movi horn_snd,a0
|
||
calla snd_play1ovr
|
||
|
||
move @_4plyrsingame,a0
|
||
jrnz #skip
|
||
move @PSTATUS,a0
|
||
cmpi >f,a0
|
||
jrz #skip
|
||
movk 1,a0
|
||
move a0,@_4plyrsingame
|
||
#skip
|
||
|
||
; movi qtr_purchased,a1 ; - 1 quater for each player
|
||
; clr a2
|
||
;#dec_loop
|
||
; move *a1,a0
|
||
; jrz #skip2
|
||
; dec a0
|
||
; move a0,*a1
|
||
; jrnz #skip2
|
||
;
|
||
;; LOCKUP
|
||
;
|
||
; movk 1,a0
|
||
; sla a2,a0
|
||
; move @PSTATUS,a3
|
||
; andn a0,a3
|
||
; move a3,@PSTATUS
|
||
;#skip2
|
||
; addk 16,a1
|
||
; inc a2
|
||
; cmpi 3,a2
|
||
; jrls #dec_loop
|
||
|
||
; move @gmqrtr,a0
|
||
; jrz #tn2
|
||
; cmpi 2,a0
|
||
; jrnz #ntn2
|
||
;#tn2 movi tuneend_snd,a0
|
||
; calla snd_play1
|
||
;#ntn2
|
||
|
||
JSRP plyr_endofqrtr
|
||
|
||
SUBR cliplockretp ;Restore point for clip lockup code
|
||
|
||
movk 1,a0
|
||
move a0,@clock_active
|
||
|
||
movi QRTRTIME,a0 ;4 minutes, 0 secs, 0 tenths
|
||
move @gmqrtr,a1
|
||
subk 4,a1
|
||
jrlt #notot
|
||
|
||
movi intoot_snd,a0
|
||
calla snd_play1
|
||
|
||
move @tvpanelon,a0,L
|
||
jrz #skp
|
||
calla process_exist
|
||
jrz #skp
|
||
movi tv3a,a7
|
||
calla XFERPROC
|
||
|
||
#skp
|
||
|
||
;Overtime clock set
|
||
movi QRTRTIME,a0 ;2 minutes, 0 secs, 0 tenths
|
||
move a0,@game_time,L
|
||
clr a0
|
||
move a0,@clock_speed
|
||
movi P1DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
movi P2DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
movi P3DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
movi P4DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
callr prt_qrtr
|
||
|
||
#kp SLEEPK 1
|
||
move @tvpanelon,a0,L
|
||
jrnz #kp
|
||
|
||
CREATE tvid,scr_clock
|
||
|
||
move @gmqrtr,a0
|
||
cmpi 2,a0
|
||
jrnz #cc
|
||
PUSH a0
|
||
CREATE0 do_show
|
||
PULL a0
|
||
#cc
|
||
sll 5,a0
|
||
addi #tune_t,a0
|
||
move *a0,a0,L
|
||
calla snd_play1ovr
|
||
|
||
jruc #lp1
|
||
|
||
|
||
do_show
|
||
SLEEP 120
|
||
movi showtm,a0
|
||
calla snd_play1ovr
|
||
DIE
|
||
|
||
#notot move a0,@game_time,L
|
||
|
||
|
||
;Refill everyones turbo meter in between quarters!
|
||
|
||
movi P1DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
movi P2DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
movi P3DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
movi P4DATA,a11 ;A11=*plyr data
|
||
callr refill_turbo
|
||
callr prt_qrtr
|
||
|
||
|
||
CREATE tvid,scr_clock
|
||
|
||
move @gmqrtr,a0
|
||
sll 5,a0
|
||
addi #tune_t,a0
|
||
move *a0,a0,L
|
||
calla snd_play1ovr
|
||
|
||
jruc #lp1
|
||
|
||
#tune_t .long tuneq2_snd,tuneq2_snd,tuneq3_snd,tuneq4_snd,tuneq4_snd
|
||
.long tuneot_snd,tuneot_snd,tuneot_snd
|
||
.long tuneot_snd,tuneot_snd,tuneot_snd
|
||
.long tuneot_snd,tuneot_snd,tuneot_snd
|
||
.long tuneot_snd,tuneot_snd,tuneot_snd
|
||
|
||
;RJR
|
||
SUBRP one_min_to_go
|
||
|
||
#try_again
|
||
SLEEPK 1
|
||
movi minute_snd,a0
|
||
calla snd_play1
|
||
jrc #try_again
|
||
|
||
DIE
|
||
|
||
|
||
tick_tock
|
||
|
||
;Gets created at 1 minute mark in each quarter!
|
||
|
||
SLEEP 10*60
|
||
#tick SLEEP 36
|
||
move @game_time,a0,L
|
||
jaz SUCIDE
|
||
move @game_time+16,a0
|
||
jrnz #tick
|
||
move @clock_active,a0
|
||
jrnz #tick
|
||
|
||
movi tick_snd,a0
|
||
XORK 1,a9
|
||
jrz #tok
|
||
movi tock_snd,a0
|
||
#tok calla snd_play1
|
||
jruc #tick
|
||
|
||
|
||
qrtrt1 .long qrtr1,qrtr2,qrtr3,qrtr4,qrtr4,qrtr4,qrtr4
|
||
.long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4
|
||
.long qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4,qrtr4
|
||
prt_qrtr
|
||
movi CLSDEAD|qrtrid,a0
|
||
calla obj_del1c ;kill credit/qrtr imgs
|
||
movi [>b9,0],a0
|
||
movi [>68,0],a1
|
||
movi 987,a3
|
||
movi DMAWNZ|M_NOCOLL|M_3DQ,a4
|
||
move @gmqrtr,a2
|
||
sll 5,a2
|
||
addi qrtrt1,a2
|
||
move *a2,a2,L
|
||
movi CLSDEAD|qrtrid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
; move a0,*a10+,L
|
||
movi gndpos_t+32*16,a1
|
||
move a1,*a8(ODATA_p),L
|
||
rets
|
||
|
||
|
||
.asg -3,X
|
||
.asg 94,Y
|
||
.asg 987,Z
|
||
#init_t
|
||
;minutes, seconds
|
||
.word X+190+1,Y-1,Z
|
||
.long S_LED_0r ;red pal
|
||
.word X+203+1,Y-1,Z
|
||
.long S_LED_0r
|
||
.word X+211+1,Y-1,Z
|
||
.long S_LED_0r
|
||
.word X+199+1,Y+1-1,Z
|
||
.long colon
|
||
;scores
|
||
.word X+170,Y+5,Z
|
||
.long LED_00
|
||
.word X+240,Y+5,Z
|
||
.long LED_00
|
||
|
||
.word 4000
|
||
|
||
|
||
|
||
**************************************************************************
|
||
* a11=PxDATA
|
||
* Completely refill turbo meter
|
||
|
||
SUBR refill_turbo
|
||
|
||
clr a2
|
||
cmpi P1DATA,a11
|
||
jrz #1
|
||
movk 1,a2
|
||
cmpi P2DATA,a11
|
||
jrz #1
|
||
movk 2,a2
|
||
cmpi P3DATA,a11
|
||
jrz #1
|
||
movk 3,a2
|
||
#1
|
||
|
||
|
||
; move @PSTATUS,a1
|
||
; btst a2,a1
|
||
; jrz #notingame
|
||
|
||
move *a11(ply_meter_imgs+40h),a2,L ;LITUP img
|
||
clr a1
|
||
move a1,*a2(OFSET)
|
||
movi >2f,a2 ;2f ;OSIZEX of litup meter img
|
||
move a2,*a11(ply_turbo) ;max out turbo meter
|
||
movk 1,a2
|
||
move a2,*a11(ply_turbo_dl) ;turbo cnt delay
|
||
|
||
;#notingame
|
||
rets
|
||
|
||
SUBRP replenish_turbo
|
||
|
||
move *a0(ply_meter_imgs+40h),a2,L ;LITUP img
|
||
move *a2(OFSET),a1 ;Need to shrink LITUP img
|
||
jrz #x
|
||
subk 1,a1
|
||
move a1,*a2(OFSET)
|
||
move *a0(ply_turbo),a1
|
||
addk 1,a1
|
||
move a1,*a0(ply_turbo) ;Turbo meter size to get smaller
|
||
#x rets
|
||
|
||
|
||
|
||
********************************
|
||
* A0=*scores
|
||
* A1=# to add
|
||
|
||
SUBR score_add
|
||
|
||
move a1,@clock_active
|
||
move a0,@last_score,L ;Most recent team to score
|
||
;used for red flash
|
||
move *a0,a14
|
||
add a1,a14
|
||
move a14,*a0
|
||
|
||
PUSH a1,a7,a9
|
||
|
||
move @ballpnumshot,a9
|
||
move @plyrnumonfire,a0
|
||
cmp a9,a0
|
||
jrnz #noaud
|
||
|
||
move @GAMSTATE,a0
|
||
cmpi INAMODE,a0
|
||
jrz #noaud
|
||
|
||
PUSH a0,a3
|
||
move @ballptsforshot,a1
|
||
movi AUD_HOTSTRKPTS,a0
|
||
calla AUD
|
||
PULL a0,a3
|
||
|
||
#noaud
|
||
|
||
|
||
CREATE0 flsh_bgnd
|
||
CREATE0 start_animate
|
||
|
||
move @assist_plyr,a1
|
||
jrz #sx
|
||
dec a1
|
||
movk PS_ASSISTS,a0
|
||
calla inc_player_stat
|
||
#sx
|
||
PULL a1,a7,a9
|
||
|
||
rets
|
||
|
||
flsh_bgnd
|
||
;a9=0-3
|
||
.ref ballptsforshot
|
||
move @ballptsforshot,a0
|
||
cmpi 3,a0
|
||
jrnz #f0
|
||
|
||
;Turn on 3 pntr message
|
||
CREATE0 threepnts_drw
|
||
|
||
|
||
#f0
|
||
SLEEPK 20
|
||
; movk 1,a1
|
||
; move a1,@clock_active
|
||
; move a9,a0
|
||
|
||
|
||
move @game_time,a0,L
|
||
jaz SUCIDE
|
||
|
||
clr a1
|
||
sll 4,a9
|
||
addi #x_t,a9
|
||
move *a9,a0
|
||
sll 16,a0
|
||
movi bbal_w,a2
|
||
movi 290,a3 ;Z
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
movk 8,a10
|
||
#f1
|
||
move @game_time,a0,L
|
||
jrz #fout
|
||
move a8,a0
|
||
calla OBJON
|
||
SLEEPK 3
|
||
move a8,a0
|
||
calla OBJOFF
|
||
SLEEPK 3
|
||
dsj a10,#f1
|
||
|
||
#fout
|
||
move a8,a0
|
||
calla DELOBJ
|
||
|
||
DIE
|
||
|
||
#x_t
|
||
; .word 10,58h,0e8h-2,13ch-3
|
||
.word 7,57h,0e9h,137h
|
||
|
||
|
||
threepnts_drw
|
||
movi [19,0],a1 ;18
|
||
movi [>c8,0],a0
|
||
movi threepnts,a2
|
||
movi >7590,a3
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
CREATE0 blink_plyr
|
||
move a0,a9
|
||
SLEEP 150
|
||
move a9,a0
|
||
calla KILL
|
||
move a8,a0
|
||
calla DELOBJ
|
||
DIE
|
||
|
||
tmodex .long [20,0],[6ch,0],[0d7h,0],[12eh,0]
|
||
|
||
SUBR nosecrets_drw
|
||
|
||
sll 5,a8
|
||
addi tmodex,a8
|
||
move *a8,a0,L
|
||
|
||
movi [202,0],a1 ;18
|
||
movi nosecrets,a2
|
||
movi >7590,a3
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
.ref blink_plyr2
|
||
|
||
CREATE0 blink_plyr2
|
||
move a0,a9
|
||
SLEEP 90
|
||
move a9,a0
|
||
calla KILL
|
||
move a8,a0
|
||
calla DELOBJ
|
||
DIE
|
||
|
||
|
||
SUBR bracket_drw
|
||
|
||
clr a0
|
||
movi [1,0],a1
|
||
movi bbal,a2 ;bracket
|
||
movi 290,a3 ;Z
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
#set move @ballpnum,a0
|
||
jrn #frbl
|
||
sll 4,a0
|
||
addi #x_t2,a0
|
||
move *a0,a0
|
||
move a0,*a8(OXPOS)
|
||
SLEEPK 3
|
||
jruc #set
|
||
#frbl move a8,a0
|
||
calla OBJOFF
|
||
|
||
#frlp SLEEPK 3
|
||
|
||
move @ballpnum,a0
|
||
jrn #frlp
|
||
move a8,a0
|
||
calla OBJON
|
||
jruc #set
|
||
|
||
#x_t2 .word 7,57h,0eah,137h
|
||
|
||
********************************
|
||
|
||
SUBRP prt_top_clock
|
||
|
||
PUSH a2,a3,a4,a5,a6,a7,a8
|
||
|
||
movb @game_time+24,a0 ;print minutes
|
||
jrnz #tag4
|
||
movb @game_time+0,a0 ;print 10ths of sec
|
||
#tag4 sll 5,a0
|
||
addi leds,a0
|
||
move *a0,a0,L
|
||
move @clock_imgs+0,a8,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
movb @game_time+16,a0 ;print 10 secs
|
||
sll 5,a0
|
||
addi leds,a0
|
||
move *a0,a0,L
|
||
move @clock_imgs+>20,a8,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
movb @game_time+8,a0 ;print secs
|
||
sll 5,a0
|
||
addi leds,a0
|
||
move *a0,a0,L
|
||
move @clock_imgs+>40,a8,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
PULL a2,a3,a4,a5,a6,a7,a8
|
||
rets
|
||
|
||
leds .long S_LED_0,S_LED_1,S_LED_2,S_LED_3,S_LED_4,S_LED_5,S_LED_6
|
||
.LONG S_LED_7,S_LED_8,S_LED_9
|
||
|
||
|
||
********************************************************************
|
||
* Print all 4 players credit timers if in game
|
||
* Trashes scratch, A9
|
||
|
||
SUBR prt_cr_timers
|
||
|
||
PUSH a8,a11
|
||
|
||
|
||
movi P1DATA,a9
|
||
clr a11
|
||
prt05 move @PSTATUS,a0 ;Plyr start bits 0-3
|
||
btst a11,a0
|
||
jrz #nxt
|
||
|
||
;Check to see if player name is in place of credit timer! If so, don't try
|
||
;to print out timers
|
||
|
||
move *a9(ply_meter_imgs),a8,L
|
||
jrz #nxt
|
||
|
||
move *a8(OIMG),a0,L
|
||
cmpi LED_00,a0
|
||
jrne #nxt ;Not counter?
|
||
|
||
move *a9(ply_time),a0
|
||
cmpi 1000,a0
|
||
jrlo prt07
|
||
; movi 999,a0
|
||
movi LED_MAX,a0
|
||
jruc prt09
|
||
prt07
|
||
sll 5,a0
|
||
addi LED_0,a0
|
||
prt09 move *a0,a0,L
|
||
move a0,*a8(OSAG),L
|
||
|
||
#nxt addi PDSIZE,a9
|
||
inc a11
|
||
cmpi 4,a11
|
||
jrnz prt05
|
||
|
||
PULL a8,a11
|
||
rets
|
||
|
||
|
||
#***********************************************************************
|
||
* Print small scores at top of screen
|
||
|
||
SUBR prt_top_scores
|
||
|
||
PUSH a2,a3,a4,a5,a6,a7,a8
|
||
|
||
move @score_imgs,a8,L ;Team 1
|
||
move @scores,a0
|
||
sll 5,a0
|
||
addi LED_0,a0
|
||
move *a0,a0,L
|
||
move a0,*a8(OSAG),L
|
||
|
||
move @score_imgs+32,a8,L ;Team 2
|
||
move @scores+16,a0
|
||
sll 5,a0
|
||
addi LED_0,a0
|
||
move *a0,a0,L
|
||
move a0,*a8(OSAG),L
|
||
|
||
|
||
move @tvpanelon,a0,L
|
||
jrz #x
|
||
movi 3*60,a1 ;Add time to score plate proc!
|
||
move a1,*a0(PTIME)
|
||
|
||
callr prt_bigscr
|
||
|
||
CREATE0 flash_red
|
||
|
||
#x PULL a2,a3,a4,a5,a6,a7,a8
|
||
rets
|
||
|
||
|
||
#****************************************************************
|
||
* Turn on T.V. look score plate at the bottom of the screen.
|
||
* Handle game clock, quarter #, team names, and score. Then turn
|
||
* off everything except maybe the game time.
|
||
*
|
||
|
||
SUBRP tv_score
|
||
|
||
move a0,a0
|
||
jrnz tv4x ;br=clock already on scrn
|
||
CREATE tvid,scr_clock
|
||
|
||
tv4x movi [9,0],a0
|
||
movi [185,0],a1
|
||
movi 5000,a3
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi metal1,a2
|
||
movi CLSDEAD|tvid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
|
||
movi [9,0],a0
|
||
movi [185,0],a1
|
||
movi metal2,a2
|
||
calla BEGINOBJ2
|
||
|
||
movi [185,0],a1
|
||
move @gmqrtr,a2
|
||
sll 5,a2
|
||
|
||
|
||
move @game_time,a0,L
|
||
jrnz #notend
|
||
|
||
move @scores,a4
|
||
move @scores+16,a0
|
||
cmp a0,a4
|
||
jrnz #notie
|
||
;tie score
|
||
addi tie_eqrtrt,a2
|
||
jruc #tie
|
||
#notie
|
||
addi eqrtrt,a2
|
||
#tie movi [9,0],a0
|
||
move *a2,a2,L
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
calla BEGINOBJ2
|
||
jruc #skip
|
||
|
||
|
||
#notend
|
||
addi qrtrt,a2
|
||
movi [9,0],a0
|
||
move *a2,a2,L
|
||
calla BEGINOBJ2
|
||
|
||
move @gmqrtr,a2
|
||
subk 4,a2
|
||
jrge #skip
|
||
|
||
movi [9,0],a0
|
||
movi [185,0],a1
|
||
movi quarter,a2
|
||
calla BEGINOBJ2
|
||
|
||
#skip
|
||
movi [64,0],a0
|
||
movi [185,0],a1
|
||
move @team1,a2
|
||
cmpi 27,a2
|
||
jrnz #reg
|
||
|
||
movi [185-3,0],a1
|
||
movi OSGEMD_J,a2
|
||
movi GREENPAL,b0
|
||
calla BEGINOBJP2
|
||
movi [4ch,0],a0
|
||
movi [185-3,0],a1
|
||
movi OSGEMD_A,a2
|
||
movi GREENPAL,b0
|
||
calla BEGINOBJP2
|
||
movi [5bh,0],a0
|
||
movi [185-3,0],a1
|
||
movi OSGEMD_M,a2
|
||
movi GREENPAL,b0
|
||
calla BEGINOBJP2
|
||
jruc #nx
|
||
#reg
|
||
sll 5,a2
|
||
addi team_nms,a2
|
||
move *a2,a2,L
|
||
calla BEGINOBJ2
|
||
|
||
#nx
|
||
movi [64,0],a0
|
||
movi [185+19,0],a1
|
||
move @team2,a2
|
||
|
||
cmpi 27,a2
|
||
jrnz #reg2
|
||
|
||
movi [185+18,0],a1
|
||
movi OSGEMD_J,a2
|
||
movi GREENPAL,b0
|
||
calla BEGINOBJP2
|
||
movi [4ch,0],a0
|
||
movi [185+18,0],a1
|
||
movi OSGEMD_A,a2
|
||
movi GREENPAL,b0
|
||
calla BEGINOBJP2
|
||
movi [5bh,0],a0
|
||
movi [185+18,0],a1
|
||
movi OSGEMD_M,a2
|
||
movi GREENPAL,b0
|
||
calla BEGINOBJP2
|
||
jruc #nx2
|
||
#reg2
|
||
|
||
sll 5,a2
|
||
addi team_nms,a2
|
||
move *a2,a2,L
|
||
calla BEGINOBJ2
|
||
#nx2
|
||
callr prt_bigscr ;score routine will update
|
||
;these big digits
|
||
CREATE0 flash_red
|
||
rets
|
||
|
||
movi 5000,a3
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
|
||
team_nms
|
||
.long ATL,BOST,CHAR,CHI,CLEV,DAL,DEN,DET,GOLDN,HOU,IND,LA_CLIP
|
||
.long LA_LAKS,MIAMI,MILW,MINN,NJ,NY,ORL,PHIL,PHX,PORT,SAC,SANANT
|
||
.long SEA,UTAH,WASH
|
||
|
||
|
||
********************************
|
||
|
||
const_on
|
||
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
|
||
rets
|
||
|
||
|
||
const_off
|
||
setf 4,0,0
|
||
movk M_WRNONZ,a0
|
||
move a0,*a8(OCTRL) ;Write 4 low bits
|
||
setf 16,1,0
|
||
rets
|
||
|
||
|
||
********************************
|
||
|
||
flash_red
|
||
|
||
SLEEPK 10
|
||
clr a9
|
||
move @last_score,a0,L
|
||
jaz SUCIDE
|
||
cmpi scores,a0
|
||
jrz #tm1
|
||
movi 96,a9
|
||
#tm1 movk 10,a11
|
||
addi flsh_ptrs,a9
|
||
#lp
|
||
movi MD_16r,a0
|
||
calla pal_getf
|
||
move *a9,a8,L
|
||
move a0,*a8(OPAL)
|
||
move *a9(32),a8,L
|
||
move a0,*a8(OPAL)
|
||
move *a9(64),a8,L
|
||
move a0,*a8(OPAL)
|
||
SLEEPK 5
|
||
movi MD_16,a0
|
||
calla pal_getf
|
||
move *a9,a8,L
|
||
move a0,*a8(OPAL)
|
||
move *a9(32),a8,L
|
||
move a0,*a8(OPAL)
|
||
move *a9(64),a8,L
|
||
move a0,*a8(OPAL)
|
||
SLEEPK 5
|
||
dsj a11,#lp
|
||
|
||
clr a0
|
||
move a0,@last_score,L
|
||
DIE
|
||
|
||
|
||
|
||
#************************************************************************
|
||
* Print big score digits that are part of the tv score panel
|
||
* Trashes scratch, A2-A8
|
||
|
||
SUBRP prt_bigscr
|
||
|
||
PUSH a9,a10
|
||
|
||
clr a0
|
||
movi flsh_ptrs,a1
|
||
move a1,a10
|
||
movk 6,b0
|
||
#clp move a0,*a1+,L
|
||
dsj b0,#clp
|
||
|
||
|
||
movi CLSDEAD|tvscrid,a0
|
||
calla obj_del1c
|
||
|
||
|
||
movi 5000,a3
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
movi CLSDEAD|tvscrid,a5
|
||
clr a6
|
||
clr a7
|
||
|
||
|
||
move @scores,a0 ;Team 1
|
||
calla BINBCD
|
||
move a0,a9
|
||
|
||
srl 8,a0 ;>Hundereds
|
||
jrz #nohun
|
||
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #n_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [309-16,0],a0
|
||
movi [184+1,0],a1
|
||
calla BEGINOBJ2
|
||
move a8,*a10,L
|
||
#nohun
|
||
addk 32,a10
|
||
|
||
move a9,a0 ;>Tens
|
||
srl 4,a0
|
||
jrz #notens
|
||
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #n_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [324-16,0],a0
|
||
movi [184+1,0],a1
|
||
calla BEGINOBJ2
|
||
move a8,*a10,L
|
||
#notens
|
||
addk 32,a10
|
||
|
||
sll 32-4,a9 ;>Ones
|
||
srl 32-4-5,a9 ;*32
|
||
addi #n_t,a9
|
||
move *a9,a2,L
|
||
|
||
movi [339-16,0],a0
|
||
movi [184+1,0],a1
|
||
calla BEGINOBJ2
|
||
move a8,*a10+,L
|
||
|
||
|
||
|
||
move @scores+16,a0 ;Team 2
|
||
calla BINBCD
|
||
move a0,a9
|
||
|
||
srl 8,a0 ;>Hundereds
|
||
jrz #nohun2
|
||
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #n_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [309-16,0],a0
|
||
movi [204,0],a1
|
||
calla BEGINOBJ2
|
||
move a8,*a10,L
|
||
#nohun2
|
||
addk 32,a10
|
||
|
||
move a9,a0 ;>Tens
|
||
srl 4,a0
|
||
jrz #notens2
|
||
|
||
sll 32-4,a0
|
||
srl 32-4-5,a0 ;*32
|
||
addi #n_t,a0
|
||
move *a0,a2,L
|
||
|
||
movi [324-16,0],a0
|
||
movi [204,0],a1
|
||
calla BEGINOBJ2
|
||
move a8,*a10,L
|
||
#notens2
|
||
addk 32,a10
|
||
|
||
sll 32-4,a9 ;>Ones
|
||
srl 32-4-5,a9 ;*32
|
||
addi #n_t,a9
|
||
move *a9,a2,L
|
||
|
||
movi [339-16,0],a0
|
||
movi [204,0],a1
|
||
calla BEGINOBJ2
|
||
move a8,*a10+,L
|
||
|
||
PULL a9,a10
|
||
|
||
rets
|
||
|
||
|
||
#n_t .long SMD16_0,SMD16_1,SMD16_2,SMD16_3,SMD16_4,SMD16_5,SMD16_6
|
||
.long SMD16_7,SMD16_8,SMD16_9
|
||
|
||
|
||
|
||
#************************************************************************
|
||
* Turn on three images for big clock portion of TV score plate
|
||
* Start a process which updates these imgs
|
||
* That process must die when other tv score stuff is deleted!
|
||
*
|
||
SUBRP scr_clock
|
||
|
||
movi #init_t,a11
|
||
movi bclok_imgs,a10 ;for holding onto img pointer
|
||
move @game_time,a5,L
|
||
srl 24,a5
|
||
jrnz reg
|
||
movi #init_t2,a11
|
||
jruc #status
|
||
reg movi #init_t,a11
|
||
jruc #status
|
||
#lp
|
||
move *a11+,a1
|
||
sll 16,a0
|
||
sll 16,a1
|
||
move *a11+,a3
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
move *a11+,a2,L
|
||
movi CLSDEAD|bclockid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
move a0,*a10+,L ;hold onto img pointer
|
||
|
||
#status move *a11+,a0 ;X
|
||
cmpi 4000,a0
|
||
jrne #lp ;!End?
|
||
|
||
callr prt_tvtime
|
||
movi gclockid,a0
|
||
clr a1
|
||
not a1
|
||
calla EXISTP
|
||
jrz #lp1
|
||
|
||
|
||
move @game_time,a1,L
|
||
jrz #lp1
|
||
|
||
|
||
movk 3,a1
|
||
move a1,*a0(PTIME) ;get in sync with top clock
|
||
SLEEPK 3
|
||
#lp1
|
||
callr prt_tvtime
|
||
SLEEPK 3
|
||
|
||
jruc #lp1
|
||
|
||
|
||
SUBRP prt_tvtime
|
||
|
||
movb @game_time+24,a0 ;print minutes
|
||
jrnz #tag4
|
||
movb @game_time+0,a0 ;print 10ths of sec
|
||
#tag4 sll 5,a0
|
||
addi numbs,a0
|
||
move *a0,a0,L
|
||
move @bclok_imgs+>20,a8,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
movb @game_time+16,a0 ;print 10 secs
|
||
sll 5,a0
|
||
addi numbs,a0
|
||
move *a0,a0,L
|
||
move @bclok_imgs+>40,a8,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
movb @game_time+8,a0 ;print secs
|
||
sll 5,a0
|
||
addi numbs,a0
|
||
move *a0,a0,L
|
||
move @bclok_imgs+>60,a8,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
rets
|
||
|
||
#init_t
|
||
.word 9,185,5000
|
||
.long clock
|
||
.word 305-26,230,5000
|
||
.long font90
|
||
.word 315-21,230,5000
|
||
.long font90
|
||
.word 325-21,230,5000
|
||
.long font90
|
||
|
||
.word 4000
|
||
|
||
#init_t2
|
||
.word 9,185,5000
|
||
.long clock2
|
||
.word >130,230,5000
|
||
.long font90
|
||
.word >116,230,5000
|
||
.long font90
|
||
.word >120,230,5000
|
||
.long font90
|
||
|
||
.word 4000
|
||
|
||
qrtrt .long one,two,three,four,overtime,DoubleOT,TripleOT,TripleOT
|
||
.long TripleOT,final
|
||
eqrtrt .long endof1,endof1,halftime,endof3,final,final,final,final,final
|
||
.long final,final,final,final
|
||
tie_eqrtrt
|
||
.long endof1,endof1,halftime,endof3,endof4,overtime,DoubleOT,TripleOT
|
||
.long TripleOT,TripleOT,TripleOT,TripleOT,TripleOT,TripleOT
|
||
|
||
#****************************************************************
|
||
* Start shot clock timer, when clock gets down to 10 seconds,
|
||
* then display the clock in the lower corner furthest away from
|
||
* the hoop.
|
||
* A0=0 shooting at rgt hoop, 1=left hoop
|
||
* Trashes scratch
|
||
|
||
SUBR shot_clock
|
||
|
||
;When testing dunks - PUT IN!
|
||
; rets
|
||
|
||
PUSH a7,a8
|
||
|
||
move a0,a8
|
||
|
||
movi clockid,a0
|
||
calla KIL1C ;Kill existing shot clock proc
|
||
movi CLSDEAD|clockid,a0
|
||
calla obj_del1c ;Delete any 24 second shot clock imgs
|
||
|
||
CREATE clockid,clock24
|
||
move a0,@sc_proc,L
|
||
|
||
movi [1,0],a0
|
||
move a0,@shotimer,L
|
||
|
||
PULL a7,a8
|
||
rets
|
||
|
||
|
||
SUBRP clock24
|
||
clr a10
|
||
movk 7,a9 ;13
|
||
|
||
movi game_time,a1
|
||
;check to see if less than 24 seconds remain on clock. If so, die!
|
||
movb *a1(8),a0 ;restuff single seconds byte
|
||
movb *a1(16),a2 ;grab 10 seconds byte
|
||
|
||
|
||
movb *a1(24),a3 ;grab minutes byte
|
||
jrnz #lp
|
||
;Possibly less than a minute left
|
||
|
||
move a2,a2
|
||
jrnz #not
|
||
|
||
#nosc
|
||
clr a0
|
||
move a0,@sc_proc,L
|
||
DIE
|
||
#not
|
||
cmpi 1,a2
|
||
jrnz #lp
|
||
cmpi 5,a0
|
||
jrle #nosc
|
||
|
||
#lp
|
||
SLEEP 40
|
||
move @HALT,a0
|
||
jrnz #lp
|
||
|
||
; jruc #lp
|
||
|
||
dsj a9,#lp
|
||
|
||
#lp0 SLEEPK 10
|
||
|
||
move @tvpanelon,a0,L
|
||
jrnz #lp0
|
||
move @ballgoaltcnt,a0
|
||
jrgt #lp0
|
||
move @ballpnum,a0
|
||
jrn #skp
|
||
sll 5,a0
|
||
addi plyrproc_t,a0
|
||
move *a0,a0,L
|
||
move *a0(plyr_jmpcnt),a14
|
||
jrnz #lp0
|
||
move *a0(plyr_seqflgs),a0
|
||
btst DUNK_B,a0
|
||
jrnz #lp0 ;!Dunking?
|
||
#skp
|
||
SLEEPK 10
|
||
|
||
;wait 13 seconds before we actually display shot clock in corner
|
||
;left side hoop
|
||
|
||
movi #init_t,a11
|
||
movi shotram,a10 ;for holding onto img pointer
|
||
move a8,a8
|
||
jrnz hoopl
|
||
movi #init_t2,a11
|
||
hoopl
|
||
jruc #status
|
||
|
||
movi #init_t,a11
|
||
jruc #status
|
||
#lp2
|
||
move *a11+,a1 ;Y
|
||
sll 16,a0
|
||
sll 16,a1
|
||
move *a11+,a3 ;Z
|
||
movi DMAWNZ|M_NOCOLL|M_SCRNREL,a4
|
||
move *a11+,a2,L
|
||
movi CLSDEAD|clockid,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
move a0,*a10+,L ;hold onto img pointer
|
||
|
||
#status move *a11+,a0 ;X
|
||
cmpi 4000,a0
|
||
jrne #lp2 ;!End?
|
||
|
||
#lp3
|
||
move @tvpanelon,a0,L
|
||
jrnz #x
|
||
|
||
move @shotram+32,a8,L ;first digit
|
||
move @shotram+64,a9,L ;second digit
|
||
move @shotimer,a2,L
|
||
clr a0
|
||
movy a2,a0
|
||
srl 11,a0
|
||
addi bnumbs,a0
|
||
move *a0,a0,L
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
;Do 2nd digit
|
||
sll 16,a2
|
||
srl 11,a2
|
||
addi bnumbs,a2
|
||
move *a2,a0,L
|
||
move a9,a8
|
||
move *a8(OCTRL),a1
|
||
calla obj_aniq
|
||
|
||
#lp3t SLEEP 32
|
||
move @HALT,a0
|
||
jrnz #lp3t
|
||
|
||
move @shotimer,a0
|
||
jrz #tag
|
||
dec a0
|
||
move a0,@shotimer
|
||
|
||
cmpi 4,a0
|
||
jrgt #nowarn
|
||
|
||
;Warn players of shot clock running down
|
||
movi warn_snd,a0
|
||
calla snd_play1
|
||
#nowarn
|
||
|
||
jruc #lp3
|
||
#tag move @shotimer+16,a0
|
||
jrz #tag1
|
||
dec a0
|
||
move a0,@shotimer+16
|
||
movk 9,a0
|
||
move a0,@shotimer
|
||
jruc #lp3
|
||
|
||
#tag1
|
||
|
||
movi horn_snd,a0
|
||
calla snd_play1ovr
|
||
|
||
#tag1X
|
||
SLEEPK 1
|
||
|
||
;Shot clock ran out - turnover! Unless the ball is in the air toward hoop!
|
||
move @ballgoaltcnt,a0
|
||
jrgt markdi
|
||
|
||
movk 1,a0
|
||
move a0,@clock_active
|
||
|
||
CREATE0 shot_text
|
||
|
||
move @ballpnum,a11
|
||
jrnn #ok1
|
||
move @ballpnumshot,a11
|
||
#ok1
|
||
srl 1,a11
|
||
subk 1,a11
|
||
CREATE0 plyr_takeoutball3
|
||
|
||
|
||
#showstick
|
||
movi P1DATA,a10
|
||
callr stick_number
|
||
movi P2DATA,a10
|
||
callr stick_number
|
||
movi P3DATA,a10
|
||
callr stick_number
|
||
movi P4DATA,a10
|
||
callr stick_number
|
||
|
||
|
||
SLEEP TSEC*3
|
||
|
||
clr a0
|
||
move a0,@clock_active
|
||
|
||
sclockx move a10,a10
|
||
jrz #x2
|
||
#x movi CLSDEAD|clockid,a0
|
||
calla obj_del1c ;Delete any 24 second shot clock imgs
|
||
#x2 clr a0
|
||
move a0,@sc_proc,L
|
||
#die DIE
|
||
|
||
markdi SLEEP 120
|
||
movi clockid,a0
|
||
calla KIL1C ;Kill existing shot clock proc
|
||
movi CLSDEAD|clockid,a0
|
||
calla obj_del1c ;Delete any 24 second shot clock imgs
|
||
jruc #x2
|
||
|
||
numbs .long font90,font91,font92,font93,font94,font95,font96,font97
|
||
.long font98,font99
|
||
bnumbs
|
||
.long BigLED_0,BigLED_1,BigLED_2,BigLED_3,BigLED_4,BigLED_5
|
||
.long BigLED_6,BigLED_7,BigLED_8,BigLED_9
|
||
|
||
|
||
#init_t
|
||
.word >13d,>e0,5000
|
||
.long shotclok
|
||
.word >13d+9,>d9,5000
|
||
.long BigLED_0 ;font90r
|
||
.word >13d+>1c,>d9,5000
|
||
.long BigLED_0 ;font90r
|
||
|
||
.word 4000
|
||
|
||
#init_t2
|
||
.word >1c,>e0,5000
|
||
.long shotclok
|
||
.word >24,>d9,5000
|
||
.long BigLED_0 ;font90r
|
||
.word >37,>d9,5000
|
||
.long BigLED_0 ;font90r
|
||
|
||
.word 4000
|
||
|
||
|
||
|
||
#********************************
|
||
* Print shot clock violation text
|
||
|
||
SUBRP shot_text
|
||
|
||
movi #ln0_setup,a2
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi 120-8-44,a0
|
||
move a0,@mess_cursy
|
||
movi #str_shtclk1,a4
|
||
calla print_string_C2
|
||
|
||
movi 120+8,a0
|
||
move a0,@mess_cursy
|
||
movi #str_shtclk2,a4
|
||
calla print_string_C2
|
||
|
||
CREATE0 flash_bigtxt
|
||
move a0,a9
|
||
|
||
movk 5,a10
|
||
CREATE0 doalert_snd
|
||
|
||
SLEEP TSEC*2
|
||
|
||
move a9,a0
|
||
calla KILL
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
DIE
|
||
|
||
|
||
#ln0_setup
|
||
RJR_STR omlgmd_ascii,12,1,200,6,LGMDRED2,0
|
||
|
||
#str_shtclk1
|
||
.string "SHOT CLOCK",0
|
||
#str_shtclk2
|
||
.string "VIOLATION",0
|
||
|
||
.even
|
||
|
||
|
||
#*
|
||
|
||
SUBR show_ot_msg
|
||
|
||
;Display Double or Triple OT message, keep going...
|
||
SLEEP 60
|
||
|
||
movi #ln0_setup,a2
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
move @gmqrtr,a0
|
||
subk 4,a0
|
||
sll 5,a0
|
||
movi oty,a1
|
||
add a0,a1
|
||
move *a1,a2
|
||
move a2,@mess_cursy
|
||
movi otl1,a1
|
||
add a0,a1
|
||
move *a1,a4,L
|
||
|
||
PUSH a0
|
||
calla print_string_C2
|
||
PULL a0
|
||
|
||
move @mess_cursy,a1
|
||
addi 70,a1
|
||
move a1,@mess_cursy
|
||
|
||
movi otl2,a1
|
||
add a0,a1
|
||
move *a1,a4,L
|
||
jrz #sl
|
||
calla print_string_C2
|
||
|
||
#sl
|
||
movk 5,a10 ;8
|
||
CREATE0 doalert_snd
|
||
CREATE0 flash_bigtxt
|
||
move a0,a9
|
||
|
||
SLEEP TSEC*3+40-20
|
||
|
||
move a9,a0
|
||
calla KILL
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
DIE
|
||
|
||
SUBR doalert_snd
|
||
movi whstle_snd,a0
|
||
calla snd_play1ovr
|
||
; DIE
|
||
|
||
#al movi alert_snd,a0
|
||
calla snd_play1
|
||
SLEEP 20
|
||
dsj a10,#al
|
||
DIE
|
||
|
||
|
||
oty .long 120-8-44+30-22,120-8-44-22,120-8-44-22,120-8-44-22,120-8-44-22
|
||
otl1 .long #str_shtclk2,#str_shtclk1a,#str_shtclk1b,#str_shtclk1c
|
||
otl2 .long 0,#str_shtclk2,#str_shtclk2,#str_shtclk2
|
||
|
||
#ln0_setup
|
||
RJR_STR lgmd_ascii,12,2,200,6,LGMDRED2,0
|
||
|
||
#str_shtclk1a
|
||
.string "DOUBLE",0
|
||
#str_shtclk1b
|
||
.string "TRIPLE",0
|
||
#str_shtclk1c
|
||
.string "QUADRUPLE",0
|
||
#str_shtclk2
|
||
.string "OVERTIME",0
|
||
|
||
.even
|
||
|
||
#*
|
||
.def plyrsdropped
|
||
.bss plyrsdropped,16
|
||
|
||
SUBR fix_dropout_msgs
|
||
|
||
calla CR_STRTP ;Credits to start
|
||
jrlo #no ;No?
|
||
movi start,a10
|
||
jruc #yes
|
||
#no movi insert,a10
|
||
#yes
|
||
calla CR_CONTP ;Credits to continue
|
||
jrlo #no2 ;No?
|
||
movi start,a11
|
||
jruc #yes2
|
||
#no2 movi insert,a11
|
||
#yes2
|
||
|
||
***********************************************************
|
||
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 0,a4
|
||
jrz #no3
|
||
move a11,a0 ;A continue
|
||
#no3
|
||
move @P1DATA+ply_messages,a8,L
|
||
move *a8(OIMG),a0,L
|
||
cmpi please,a0
|
||
jrnz #nx1
|
||
move a11,a0
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
#nx1
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 1,a4
|
||
jrz #no3a
|
||
move a11,a0 ;A continue
|
||
#no3a
|
||
move @P2DATA+ply_messages,a8,L
|
||
move *a8(OIMG),a0,L
|
||
cmpi please,a0
|
||
jrnz #nx2
|
||
move a11,a0
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
#nx2
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 2,a4
|
||
jrz #no3b
|
||
move a11,a0 ;A continue
|
||
#no3b
|
||
move @P3DATA+ply_messages,a8,L
|
||
move *a8(OIMG),a0,L
|
||
cmpi please,a0
|
||
jrnz #nx3
|
||
move a11,a0
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
|
||
#nx3
|
||
move a10,a0
|
||
move @PSTATUS2,a4
|
||
btst 3,a4
|
||
jrz #no3c
|
||
move a11,a0 ;A continue
|
||
#no3c
|
||
move @P4DATA+ply_messages,a8,L
|
||
move *a8(OIMG),a0,L
|
||
cmpi please,a0
|
||
jrnz #nx4
|
||
move a11,a0
|
||
movi MSGOCTRL,a1
|
||
calla obj_aniq_cnoff
|
||
#nx4
|
||
|
||
move @PSTATUS,a0
|
||
move @plyrsdropped,a1
|
||
btst 0,a1
|
||
jrz #n1
|
||
btst 0,a0
|
||
jrnz #n1
|
||
movi P1DATA,a0
|
||
callr do_drop
|
||
#n1
|
||
move @PSTATUS,a0
|
||
move @plyrsdropped,a1
|
||
btst 1,a1
|
||
jrz #n2
|
||
btst 1,a0
|
||
jrnz #n2
|
||
movi P2DATA,a0
|
||
callr do_drop
|
||
#n2
|
||
move @PSTATUS,a0
|
||
move @plyrsdropped,a1
|
||
btst 2,a1
|
||
jrz #n3
|
||
btst 2,a0
|
||
jrnz #n3
|
||
movi P3DATA,a0
|
||
callr do_drop
|
||
#n3
|
||
move @PSTATUS,a0
|
||
move @plyrsdropped,a1
|
||
btst 3,a1
|
||
jrz #n4
|
||
btst 3,a0
|
||
jrnz #n4
|
||
movi P4DATA,a0
|
||
callr do_drop
|
||
#n4
|
||
callr update_scorebrd ;make sure we show correct message
|
||
rets
|
||
|
||
do_drop
|
||
;a0=PxDATA of player who dropped out!
|
||
move a0,a7
|
||
cmpi P1DATA,a0
|
||
jrnz #tag01
|
||
movi init_t1a,a11
|
||
movi P1DATA+ply_messages,a9
|
||
movk >0e,a4
|
||
clr a5
|
||
jruc #tago
|
||
|
||
#tag01 cmpi P2DATA,a0
|
||
jrnz #tag02
|
||
movi init_t2a,a11
|
||
movi P2DATA+ply_messages,a9
|
||
movk >0d,a4
|
||
movk 1,a5
|
||
jruc #tago
|
||
|
||
#tag02 cmpi P3DATA,a0
|
||
jrnz #tag03
|
||
movi init_t3a,a11
|
||
movi P3DATA+ply_messages,a9
|
||
movk >0b,a4
|
||
movk 2,a5
|
||
jruc #tago
|
||
|
||
#tag03
|
||
movi init_t4a,a11
|
||
movi P4DATA+ply_messages,a9
|
||
movk >07,a4
|
||
movk 3,a5
|
||
|
||
#tago move a7,a3
|
||
|
||
move *a9,a0,L
|
||
jrz #tr
|
||
calla DELOBJ
|
||
#tr
|
||
;now delete this guys meter stuff & credit timer digits
|
||
clr a2
|
||
move *a3(ply_meter_imgs),a0,L
|
||
; calla DELOBJ
|
||
calla OBJOFF
|
||
move *a3(ply_meter_imgs+>20),a0,L
|
||
calla OBJOFF
|
||
move a2,*a3(ply_meter_imgs+>20),L
|
||
; calla DELOBJ
|
||
move *a3(ply_meter_imgs+>40),a0,L
|
||
calla OBJOFF
|
||
; calla DELOBJ
|
||
|
||
calla prt_status
|
||
rets
|
||
|
||
|
||
#*
|
||
SUBRP ck_circle_stik
|
||
;For turning on shot % indicator
|
||
clr a0
|
||
move a0,*a13(PDATA)
|
||
|
||
#lp SLEEPK 1
|
||
move @PSTATUS,a0
|
||
btst a9,a0
|
||
jrz #lp
|
||
move a9,a0
|
||
calla get_stick_val_cur
|
||
.ref get_stick_val_cur
|
||
|
||
move *a13(PDATA),a1
|
||
or a0,a1
|
||
move a1,*a13(PDATA)
|
||
cmpi >f,a1
|
||
jrnz #lp
|
||
move a9,a0
|
||
sll 4,a0
|
||
addi p1taps,a0
|
||
move *a0,a0
|
||
cmpi 15,a0
|
||
jrlt #lp
|
||
|
||
movk 1,a0
|
||
move a0,@show_shot
|
||
DIE
|
||
|
||
#*
|
||
;a8=plyr obj
|
||
|
||
SUBR flash_plyr_wht
|
||
clr a0
|
||
move a0,@p1taps
|
||
move a0,@p2taps
|
||
move a0,@p3taps
|
||
move a0,@p4taps
|
||
move a0,@show_shot
|
||
move a0,@plyr_tourn
|
||
move a0,@baby_flag
|
||
move a0,@plyr_maxpower
|
||
|
||
clr a9
|
||
CREATE0 ck_circle_stik
|
||
CREATE0 ck_baby
|
||
movk 1,a9
|
||
CREATE0 ck_circle_stik
|
||
CREATE0 ck_baby
|
||
movk 2,a9
|
||
CREATE0 ck_circle_stik
|
||
CREATE0 ck_baby
|
||
movk 3,a9
|
||
CREATE0 ck_circle_stik
|
||
CREATE0 ck_baby
|
||
|
||
|
||
;Totalize taps for various powerups!
|
||
|
||
#lp SLEEPK 1
|
||
clr a0
|
||
calla get_but_val_down
|
||
jrz #n1
|
||
move @p1taps,a0
|
||
addk 1,a0
|
||
move a0,@p1taps
|
||
#n1
|
||
movk 1,a0
|
||
calla get_but_val_down
|
||
jrz #n2
|
||
move @p2taps,a0
|
||
addk 1,a0
|
||
move a0,@p2taps
|
||
#n2
|
||
movk 2,a0
|
||
calla get_but_val_down
|
||
jrz #n3
|
||
move @p3taps,a0
|
||
addk 1,a0
|
||
move a0,@p3taps
|
||
#n3
|
||
movk 3,a0
|
||
calla get_but_val_down
|
||
jrz #n4
|
||
move @p4taps,a0
|
||
addk 1,a0
|
||
move a0,@p4taps
|
||
#n4
|
||
|
||
;Check for max power powerup!
|
||
|
||
clr a0
|
||
calla get_start_cur
|
||
jrnz #z1a
|
||
clr a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #z1a
|
||
clr a0
|
||
calla get_stick_val_cur
|
||
movk 1,a1
|
||
cmpi 2,a0
|
||
jrz #yesz
|
||
#z1a
|
||
movk 1,a0
|
||
calla get_start_cur
|
||
jrz #z2a
|
||
movk 1,a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #z2a
|
||
movk 1,a0
|
||
calla get_stick_val_cur
|
||
movk 2,a1
|
||
cmpi 2,a0
|
||
jrz #yesz
|
||
#z2a
|
||
movk 2,a0
|
||
calla get_start_cur
|
||
jrz #z3a
|
||
movk 2,a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #z3a
|
||
movk 2,a0
|
||
calla get_stick_val_cur
|
||
movk 4,a1
|
||
cmpi 2,a0
|
||
jrz #yesz
|
||
#z3a
|
||
movk 3,a0
|
||
calla get_start_cur
|
||
jrz #z4a
|
||
movk 3,a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #z4a
|
||
movk 3,a0
|
||
calla get_stick_val_cur
|
||
movk 8,a1
|
||
cmpi 2,a0
|
||
jrnz #z4a
|
||
#yesz
|
||
move @plyr_maxpower,a0
|
||
or a1,a0
|
||
move a0,@plyr_maxpower
|
||
#z4a
|
||
|
||
|
||
;Check for tournament mode on powerup!
|
||
clr a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #n1a
|
||
clr a0
|
||
calla get_stick_val_cur
|
||
cmpi 8,a0
|
||
jrz #yest
|
||
#n1a
|
||
movk 1,a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #n2a
|
||
movk 1,a0
|
||
calla get_stick_val_cur
|
||
cmpi 8,a0
|
||
jrz #yest
|
||
#n2a
|
||
movk 2,a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #n3a
|
||
movk 2,a0
|
||
calla get_stick_val_cur
|
||
cmpi 8,a0
|
||
jrz #yest
|
||
#n3a
|
||
movk 3,a0
|
||
calla get_but_val_cur
|
||
cmpi 7,a0
|
||
jrnz #n4a
|
||
movk 3,a0
|
||
calla get_stick_val_cur
|
||
cmpi 8,a0
|
||
jrnz #n4a
|
||
#yest
|
||
movk 1,a0
|
||
move a0,@plyr_tourn
|
||
movi -1,a0
|
||
move a0,@special_heads,L ;-1 = normal player head
|
||
move a0,@special_heads+32,L ;-1 = normal player head
|
||
#n4a
|
||
|
||
.ref inmatchup
|
||
move @inmatchup,a0
|
||
jrnz #lp
|
||
DIE
|
||
|
||
SUBR doflshs
|
||
|
||
SLEEP 10
|
||
|
||
#lpz SLEEPK 1
|
||
move @HALT,a0
|
||
jrnz #lpz
|
||
|
||
SLEEP 2*60-50
|
||
|
||
CREATE0 secret_perc
|
||
|
||
CREATE0 assist_off
|
||
CREATE0 secret_1
|
||
CREATE0 secret_2
|
||
CREATE0 secret_3
|
||
CREATE0 secret_power
|
||
CREATE0 baby_message
|
||
|
||
MOVI [3,9],A8 ;START AT COLOR 60, CYCLE 1 COLOR
|
||
MOVI SGMD8VIO,A9 ;PAL NAME
|
||
MOVI COLTAB_RNBW,A10 ;TABLE TO CYCLE WITH
|
||
MOVK 4,A11 ;RATE OF CYCLE IN TICKS
|
||
CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
|
||
clr a9
|
||
move a0,a11
|
||
|
||
move @plyrbighead,a0
|
||
btst 0,a0
|
||
jrnz #t1f
|
||
move @stlpower,a0
|
||
btst 0,a0
|
||
jrnz #t1f
|
||
move @p1taps,a0
|
||
cmpi 24,a0
|
||
jrnz #t1
|
||
#t1f
|
||
move @plyrobj_t,a8,L
|
||
CREATE0 flshme
|
||
movk 1,a9
|
||
#t1
|
||
move @plyrbighead,a0
|
||
btst 1,a0
|
||
jrnz #t2f
|
||
move @stlpower,a0
|
||
btst 1,a0
|
||
jrnz #t2f
|
||
move @p2taps,a0
|
||
cmpi 8,a0
|
||
jrnz #t2
|
||
#t2f
|
||
move @plyrobj_t+32,a8,L
|
||
CREATE0 flshme
|
||
movk 1,a9
|
||
#t2
|
||
move @plyrbighead,a0
|
||
btst 2,a0
|
||
jrnz #t3f
|
||
move @stlpower,a0
|
||
btst 2,a0
|
||
jrnz #t3f
|
||
move @p3taps,a0
|
||
cmpi 8,a0
|
||
jrnz #t3
|
||
#t3f
|
||
move @plyrobj_t+64,a8,L
|
||
CREATE0 flshme
|
||
movk 1,a9
|
||
#t3
|
||
move @plyrbighead,a0
|
||
btst 3,a0
|
||
jrnz #t4f
|
||
move @stlpower,a0
|
||
btst 3,a0
|
||
jrnz #t4f
|
||
move @p4taps,a0
|
||
cmpi 8,a0
|
||
jrnz #t4
|
||
#t4f
|
||
move @plyrobj_t+96,a8,L
|
||
CREATE0 flshme
|
||
movk 1,a9
|
||
#t4
|
||
move a9,a9
|
||
jrz #xx
|
||
|
||
.ref snd_play1ovrp
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
#xx
|
||
calla pal_clean
|
||
|
||
SLEEP TSEC*7
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
move a11,a0
|
||
calla KILL
|
||
|
||
calla pal_clean
|
||
|
||
DIE
|
||
|
||
win_snd .word >f3ff,>8,>80a5,0 ;Winner snd/Suckup credits
|
||
|
||
flshme
|
||
;flash player white to alert him
|
||
move *a8(OPLINK),a0,L
|
||
move *a0(plyr_headobj_p),a9,L
|
||
|
||
movi >f8f8,a2
|
||
move a2,*a8(OCONST)
|
||
movi >3f3f,a2
|
||
move a2,*a9(OCONST)
|
||
|
||
movk 7,a10
|
||
#again
|
||
callr const_on
|
||
setf 4,0,0
|
||
movk M_CONNON,a0 ;Replace non-zero data with constant
|
||
move a0,*a9(OCTRL) ;Write 4 low bits
|
||
setf 16,1,0
|
||
|
||
SLEEPK 3
|
||
|
||
callr const_off
|
||
setf 4,0,0
|
||
movk M_WRNONZ,a0
|
||
move a0,*a9(OCTRL) ;Write 4 low bits
|
||
setf 16,1,0
|
||
|
||
SLEEPK 3
|
||
|
||
dsj a10,#again
|
||
DIE
|
||
|
||
|
||
SUBR tournament_on
|
||
|
||
;Check to see if any of the 4 players has turned on tournament mode!
|
||
move @plyr_tourn,a0
|
||
jrnz #se2a
|
||
|
||
movk ADJTOURNEY,a0 ;Tournament mode?
|
||
calla GET_ADJ ;0-1
|
||
jrz #se2a ;On? Br=yes
|
||
clrc
|
||
rets
|
||
|
||
#se2a
|
||
clr a0
|
||
move a0,@p1taps
|
||
move a0,@p2taps
|
||
move a0,@p3taps
|
||
move a0,@p4taps
|
||
move a0,@stlpower
|
||
setc ;Yes, tournament mode on!
|
||
rets
|
||
|
||
#*******************************
|
||
* Show computer assistance off message
|
||
|
||
SUBRP assist_off
|
||
|
||
clr a0
|
||
move a0,@assistance_off
|
||
|
||
callr tournament_on
|
||
jrc #set2a
|
||
|
||
movk ADJCOMPASS,a0 ;Computer assistance
|
||
calla GET_ADJ ;0-1
|
||
jrnz #set ;On? Br=yes
|
||
|
||
move @p1taps,a0
|
||
cmpi 10,a0
|
||
jrz #set
|
||
move @p1taps+16,a0
|
||
cmpi 10,a0
|
||
jrz #set
|
||
move @p1taps+32,a0
|
||
cmpi 10,a0
|
||
jrz #set
|
||
move @p1taps+48,a0
|
||
cmpi 10,a0
|
||
jrz #set
|
||
|
||
DIE
|
||
|
||
#set2a
|
||
movk 1,a0
|
||
move a0,@assistance_off
|
||
movi #ln0_setup,a2
|
||
calla setup_message
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #str_secret2,a4
|
||
calla print_string_C2
|
||
|
||
movi #ln0_setup0,a2
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #str_secret3,a4
|
||
jruc #setin2
|
||
#set0
|
||
movk 1,a0
|
||
move a0,@assistance_off
|
||
jruc #setin
|
||
#set
|
||
movk 1,a0
|
||
move a0,@assistance_off
|
||
|
||
;If not a 2 human competitive game, don't print message
|
||
move @PSTATUS,a0
|
||
ANDK 03,a0
|
||
jrz #set2
|
||
move @PSTATUS,a0
|
||
ANDK 0ch,a0
|
||
jrz #set2
|
||
;Yes, a competitive game.
|
||
|
||
#setin
|
||
movi #ln0_setup,a2
|
||
calla setup_message
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #str_secret1,a4
|
||
#setin2
|
||
calla print_string_C2
|
||
|
||
SLEEP TSEC*4
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
#set2
|
||
calla pal_clean
|
||
|
||
DIE
|
||
|
||
|
||
#ln0_setup
|
||
RJR_STR sgmd8_ascii,3,0,200,39+1+10,SGMD8VIO,0
|
||
|
||
#str_secret1
|
||
.string "ALL COMPUTER ASSISTANCE TURNED OFF!",0
|
||
.even
|
||
|
||
#ln0_setup0
|
||
RJR_STR sgmd8_ascii,3,0,200,39+1+20,SGMD8VIO,0
|
||
|
||
#str_secret2
|
||
.string "TOURNAMENT MODE",0
|
||
.even
|
||
|
||
#str_secret3
|
||
.string "NO CPU ASSISTANCE, POWERUPS, OR SECRETS ALLOWED!",0
|
||
.even
|
||
|
||
|
||
#*******************************
|
||
* Show secret messages
|
||
|
||
SUBRP secret_perc
|
||
|
||
.ref COLTAB_RNBW,CYCLE_TABLE
|
||
|
||
move @show_shot,a0
|
||
jaz SUCIDE
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
|
||
movi #ln0_setup,a2
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #str_secret1,a4
|
||
calla print_string_C2
|
||
|
||
SLEEP TSEC*6
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
calla pal_clean
|
||
|
||
DIE
|
||
|
||
|
||
#ln0_setup
|
||
RJR_STR sgmd8_ascii,3,0,200,39+1,SGMD8VIO,0
|
||
|
||
#str_secret1
|
||
.string "SHOT % DISPLAY ACTIVATED",0
|
||
.even
|
||
|
||
#*******************************
|
||
* Show cpu substitution message
|
||
|
||
SUBR cpu_subs
|
||
|
||
SLEEP 37
|
||
|
||
movi #ln0_setup,a2
|
||
move a8,a8
|
||
jrz #ok
|
||
movi #ln0_setupa,a2
|
||
#ok
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #str_subs,a4
|
||
calla print_string_C2
|
||
|
||
DIE
|
||
|
||
|
||
#ln0_setup
|
||
RJR_STR sgmd8_ascii,3,0,100,105,SGMD8WHT,0
|
||
#ln0_setupa
|
||
RJR_STR sgmd8_ascii,3,0,300,105,SGMD8WHT,0
|
||
|
||
#str_subs
|
||
.string "CPU SUBSTITUTIONS:",0
|
||
|
||
.even
|
||
|
||
#*******************************
|
||
* Show secret messages for skill #3
|
||
|
||
SUBRP secret_1
|
||
|
||
callr tournament_on
|
||
jac SUCIDE
|
||
|
||
; movk ADJTOURNEY,a0 ;Tournament mode?
|
||
; calla GET_ADJ ;0-1
|
||
; jaz SUCIDE ;Br=In tournament mode
|
||
|
||
clr a9
|
||
#lp
|
||
move a9,a1
|
||
sll 4,a1
|
||
addi p1taps,a1
|
||
move *a1,a0
|
||
cmpi 24,a0
|
||
jrnz #nxt
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
move a9,a0
|
||
sll 5,a0
|
||
addi #msgs_t,a0
|
||
move *a0,a2,L
|
||
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|124,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #ln1,a4
|
||
calla print_string_C2
|
||
|
||
#nxt SLEEPK 1
|
||
|
||
inc a9
|
||
cmpi 4,a9
|
||
jrnz #lp
|
||
|
||
SLEEP TSEC*4
|
||
|
||
movi CLSDEAD|124,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
DIE
|
||
|
||
|
||
#msgs_t .long #ln1_setup,#ln2_setup,#ln3_setup,#ln4_setup
|
||
|
||
#ln1_setup
|
||
RJR_STR sgmd8_ascii,3,0,50,238,SGMD8WHT,0
|
||
#ln2_setup
|
||
RJR_STR sgmd8_ascii,3,0,150,238,SGMD8WHT,0
|
||
#ln3_setup
|
||
RJR_STR sgmd8_ascii,3,0,250,238,SGMD8WHT,0
|
||
#ln4_setup
|
||
RJR_STR sgmd8_ascii,3,0,350,238,SGMD8WHT,0
|
||
|
||
#ln1
|
||
.string "POWERUP G.T.",0 ;More goaltends allowed
|
||
.even
|
||
|
||
#*******************************
|
||
* Show secret messages for skill #3
|
||
|
||
SUBRP secret_power
|
||
|
||
callr tournament_on
|
||
jac SUCIDE
|
||
|
||
move @strongmen,a0
|
||
jrz #notst
|
||
;Grand champ playing - make drones have max power
|
||
movk 3,a3
|
||
cmpi 2,a0
|
||
jrz #tag1
|
||
movk >c,a3
|
||
#tag1 move @plyr_maxpower,a0
|
||
or a3,a0
|
||
move a0,@plyr_maxpower
|
||
#notst
|
||
clr a9
|
||
#lp
|
||
move @plyr_maxpower,a0
|
||
btst a9,a0
|
||
jrz #nxt
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
move a9,a0
|
||
sll 5,a0
|
||
addi #msgs_t,a0
|
||
move *a0,a2,L
|
||
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|124,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #ln1,a4
|
||
calla print_string_C2
|
||
|
||
#nxt SLEEPK 1
|
||
|
||
inc a9
|
||
cmpi 4,a9
|
||
jrnz #lp
|
||
|
||
SLEEP TSEC*4
|
||
|
||
movi CLSDEAD|124,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
DIE
|
||
|
||
|
||
#msgs_t .long #ln1_setup,#ln2_setup,#ln3_setup,#ln4_setup
|
||
|
||
#ln1_setup
|
||
RJR_STR sgmd8_ascii,3,0,50,210,SGMD8WHT,0
|
||
#ln2_setup
|
||
RJR_STR sgmd8_ascii,3,0,150,210,SGMD8WHT,0
|
||
#ln3_setup
|
||
RJR_STR sgmd8_ascii,3,0,250,210,SGMD8WHT,0
|
||
#ln4_setup
|
||
RJR_STR sgmd8_ascii,3,0,350,210,SGMD8WHT,0
|
||
|
||
#ln1
|
||
.string "MAX POWER",0 ;Can't be knocked down
|
||
.even
|
||
|
||
#*******************************
|
||
* Show secret messages
|
||
|
||
SUBRP secret_2
|
||
|
||
clr a9
|
||
#lp
|
||
.ref plyrbighead
|
||
|
||
move @plyrbighead,a0
|
||
btst a9,a0
|
||
jrz #nxt
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
move a9,a0
|
||
sll 5,a0
|
||
addi #msgs_t,a0
|
||
move *a0,a2,L
|
||
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|125,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #ln1,a4
|
||
|
||
|
||
|
||
|
||
|
||
|
||
move a9,a1
|
||
sll 4,a1
|
||
addi p1taps,a1
|
||
move *a1,a0
|
||
cmpi 6,a0
|
||
jrnz #no
|
||
movi #ln1a,a4
|
||
#no
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
calla print_string_C2
|
||
|
||
#nxt SLEEPK 1
|
||
|
||
inc a9
|
||
cmpi 4,a9
|
||
jrnz #lp
|
||
|
||
SLEEP TSEC*4
|
||
|
||
movi CLSDEAD|125,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
DIE
|
||
|
||
#msgs_t .long #ln1_setup,#ln2_setup,#ln3_setup,#ln4_setup
|
||
|
||
#ln1_setup
|
||
RJR_STR sgmd8_ascii,3,0,50,196,SGMD8WHT,0
|
||
#ln2_setup
|
||
RJR_STR sgmd8_ascii,3,0,150,196,SGMD8WHT,0
|
||
#ln3_setup
|
||
RJR_STR sgmd8_ascii,3,0,250,196,SGMD8WHT,0
|
||
#ln4_setup
|
||
RJR_STR sgmd8_ascii,3,0,350,196,SGMD8WHT,0
|
||
|
||
#ln1
|
||
.string "BIG HEAD #1",0
|
||
#ln1a
|
||
.string "HUGE HEAD",0
|
||
.even
|
||
|
||
#*******************************
|
||
* Show secret messages
|
||
|
||
SUBRP secret_3
|
||
|
||
callr tournament_on
|
||
jac SUCIDE
|
||
|
||
move @strongmen,a0
|
||
jrz #notst
|
||
;Grand champ playing - make drones have max power
|
||
movk 3,a3
|
||
cmpi 2,a0
|
||
jrz #tag1
|
||
movk >c,a3
|
||
#tag1 move @stlpower,a0
|
||
or a3,a0
|
||
move a0,@stlpower
|
||
#notst
|
||
|
||
|
||
clr a9
|
||
#lp
|
||
.ref stlpower
|
||
|
||
move @stlpower,a0
|
||
btst a9,a0
|
||
jrz #nxt
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
move a9,a0
|
||
sll 5,a0
|
||
addi #msgs_t,a0
|
||
move *a0,a2,L
|
||
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|125,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #ln1,a4
|
||
calla print_string_C2
|
||
|
||
#nxt SLEEPK 1
|
||
|
||
inc a9
|
||
cmpi 4,a9
|
||
jrnz #lp
|
||
|
||
SLEEP TSEC*4
|
||
|
||
movi CLSDEAD|125,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
DIE
|
||
|
||
#msgs_t .long #ln1_setup,#ln2_setup,#ln3_setup,#ln4_setup
|
||
|
||
#ln1_setup
|
||
RJR_STR sgmd8_ascii,3,0,50,224,SGMD8WHT,0
|
||
#ln2_setup
|
||
RJR_STR sgmd8_ascii,3,0,150,224,SGMD8WHT,0
|
||
#ln3_setup
|
||
RJR_STR sgmd8_ascii,3,0,250,224,SGMD8WHT,0
|
||
#ln4_setup
|
||
RJR_STR sgmd8_ascii,3,0,350,224,SGMD8WHT,0
|
||
|
||
#ln1
|
||
.string "QUICK HANDS",0 ;More intercepts
|
||
.even
|
||
|
||
|
||
#*******************************
|
||
* Show secret messages for skill #3
|
||
|
||
SUBRP baby_message
|
||
|
||
callr tournament_on
|
||
jac SUCIDE
|
||
|
||
move @baby_flag,a0
|
||
jaz SUCIDE
|
||
|
||
movi win_snd,a0
|
||
calla snd_play1ovrp
|
||
|
||
movi #ln0_setup,a2
|
||
calla setup_message
|
||
|
||
movi CLSDEAD|123,a0
|
||
move a0,@mess_objid
|
||
|
||
movi #str_secret1,a4
|
||
calla print_string_C2
|
||
|
||
SLEEP TSEC*6
|
||
|
||
movi CLSDEAD|123,a0
|
||
calla obj_del1c ;delete text
|
||
|
||
calla pal_clean
|
||
DIE
|
||
|
||
|
||
#ln0_setup
|
||
RJR_STR sgmd8_ascii,3,0,200,39+1-10,SGMD8VIO,0
|
||
|
||
#str_secret1
|
||
.string "BABY SIZE PLAYERS",0
|
||
.even
|
||
|
||
#*******************************
|
||
* Look at the buttons, read a sequence table,
|
||
* and set baby_flag if sequence successful
|
||
* a9=0-3
|
||
|
||
ck_baby
|
||
|
||
clr a10
|
||
movi butn_lst,a8
|
||
|
||
#lp SLEEPK 1
|
||
move a9,a0
|
||
calla get_stick_val_cur
|
||
cmpi >a,a0 ;down/right
|
||
jrnz #lp
|
||
move a9,a0
|
||
calla get_but_val_cur
|
||
; move @SWITCH,a0
|
||
; zext a0
|
||
; cmpi >ffff,a0
|
||
jrnz #tag1
|
||
clr a11
|
||
jruc #lp
|
||
|
||
#tag1 move a11,a11
|
||
jrnz #lp
|
||
|
||
inc a11
|
||
|
||
move *a8,a1,W
|
||
zext a1
|
||
cmp a0,a1
|
||
jrz #yes
|
||
movi butn_lst,a8
|
||
jruc #lp
|
||
#yes addk 16,a8
|
||
move *a8,a0
|
||
jrnz #lp
|
||
movk 1,a0
|
||
move a0,@baby_flag
|
||
|
||
DIE
|
||
|
||
butn_lst
|
||
|
||
;Buttons required for 2nd octopus:
|
||
;p1turbo,p1turbo,p2shoot,p2shoot,p2shoot,p2pass,p2pass,p1shoot,p1pass,p2turbo
|
||
;p2turbo
|
||
|
||
.word 4,1,2,4,1,2,4,1,2,0
|
||
|
||
.end
|
||
|
||
|