nba-jam/OLD/SELECT.ASM

6549 lines
121 KiB
NASM
Raw Permalink Normal View History

2021-04-06 14:49:01 -07:00
****************************************************************
*
* Software: Jamie Rivett
* Initiated: ?
*
* Modified: ?
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 1/15/93 15:29
****************************************************************
.file "select.asm"
.title "name & team selection"
.width 132
.option b,d,l,t
.mnolist
.include "mproc.equ"
.include "disp.equ"
.include "sys.equ"
.include "gsp.equ"
.include "mac2.asm"
.include "imgtblm.glo"
; .include "mugshot.tbl"
.include "imgtbl.glo"
.include "imgtblp.glo"
.include "imgtbl2.glo"
.include "bgndtbl.glo"
.include "game.equ"
.include "audit.equ"
.include "shawn.hdr"
.def _DAL ;27
.def _MIN ;26
.def _MI ;22
.def _WAS ;21
.def _PHI ;25
.def _SAC ;24
.def _MIL ;18
.def _DEN ;23
.def _GOL ;20
.def _SAN ;19
.def _SEA ;17
.def _ATL ;16
.def _ORL ;15
.def _LAC ;14
.def _NJ ;13
.def _CHA ;12
.def _BOS ;11
.def _CLE ;10
.def _DET ;9
.def _HOU ;8
.def _IND ;7
.def _LAL ;6
.def _UTA ;5
.def _NY ;4
.def _POR ;3
.def _PHX ;2
.def _CHI ;1
.def logos
.def game_purchased
.def get_teams_pop
.global initials_entry
.ref OBJOFF,OBJON
.ref WLK_ATL,RAD_MK2,AUG_ATL,HRD_GLD,MUL_GLD
.ref our_heads,SCO_MK2,REP_MK2,SUB_MK2
.ref speech_playovrp
.ref baby_flag
.ref challenger2,our_names
.ref challenger
.ref brown_shadow
.ref blue_shadow
.ref attrib_off
.ref attrib_on
.ref update_attribs
.ref check_suckup
.ref player_attribs
.ref SQTR_R_P
.ref SQTR_B_P
.ref set_imgs,SQUD_1,SQUD_2
.ref ingame_mess
.ref TWOPLAYERS ;0 = NO, 1 = YES 2 players
.ref get_all_sticks_cur
.ref get_all_sticks_down
.ref get_all_buttons_cur
.ref get_all_buttons_down
.ref get_all_starts_down
.ref get_but_val_down
.ref get_stick_val_cur
.ref get_but_val_down_nt
.ref get_but_val_cur
.ref get_stick_val_down
.ref get_steal_but_cur
.ref get_team1_turbo,get_team2_turbo
.ref timeout,timeout2,timeout3
.ref matchup_screen
.ref check_initials
.ref COLTAB
.ref CYCLE_TABLE
.ref snd_play1ovr
.ref call_team_name,call_matchup
.ref plyrsdropped
.ref newplyrs,player_names
.ref newptr,player_heads
.ref CR_CONTP
.ref dropout_stats
.ref qtr_purchased,game_over
.ref gmqrtr
.ref get_initials_string
.ref message_buffer
.ref dec_to_asc,print_string_C
.ref mess_cursx,copy_string
.ref mess_line_spacing
.ref setup_message,print_string_C2
.ref osgemd_ascii
.ref arrow1t,arrow2t,arrow3t,arrow4t
.ref horn_snd
.ref get_all_records
.ref sort_wins
.ref RNDRNG0
.ref P1DATA,P2DATA,P3DATA,P4DATA
.ref get_player_record
.ref print_player_stats
.ref print_teams_defeated
.ref GAMSTATE
.ref CRED_P
.ref PCNT,HALT
.ref pal_find
.ref scores
.ref conttimers
.ref tvpanelon
; in MAIN.ASM
.ref DELBOBJ
;sounds
.ref cntdown_snd
win_snd .word >f3ff,>8,>80a5,0 ;Winner snd/Suckup credits
tune1end_snd .word >f3fe,1,>8004,0 ;End team select tune
tune1_snd .word >f3fe,10,>8001,0 ;team select screen
cursor_snd1 .word >f3f7,>8,>8080,0 ;cursor movement
cursor_snd2 .word >f3f7,>8,>8081,0 ;
cursor_snd3 .word >f3f7,>8,>8082,0 ;
cursor_snd4 .word >f3f7,>8,>8083,0 ;
select_snd1 .word >f3f7,>8,>8084,0 ;select option sound
select_snd2 .word >f3f7,>8,>8085,0 ;
select_snd3 .word >f3f7,>8,>8086,0 ;
select_snd4 .word >f3f7,>8,>8087,0 ;
fullgame_snd1 .word >f3f7,>8,>8088,0 ;fullgame purchase
fullgame_snd2 .word >f3f7,>8,>8089,0 ;
fullgame_snd3 .word >f3f7,>8,>808a,0 ;
fullgame_snd4 .word >f3f7,>8,>808b,0 ;
scroll_snd .word >f3ff,>8,>8097,0 ;Scroll snd
welcm_snd .word >f990,40,>81cb,0 ;Welcome
baddec_snd .word >f990,72,>81b7,0 ;bad decision <--change!
cursor_sounds
.long cursor_snd1,cursor_snd2
.long cursor_snd3,cursor_snd4
select_sounds
.long select_snd1,select_snd2
.long select_snd3,select_snd4
;symbols defined in this file
.def name_sort
;symbols defined externally
.global player1_data,player2_data,player3_data,player4_data
.ref strongmen
.ref print_ranking
.ref show_hiscore
.ref show_player_records
.ref GET_AUD,AUD,AUD1
.ref COLRTEMP
.ref cntrs_delay
.ref KILBGND
.ref BAKMODS,BGND_UD1,CLR_SCRN
.ref pal_clean,pal_getf
.ref GET_ADJ
.ref pal_set
.ref PSTATUS,PSTATUS2
.ref dpageflip
.ref IRQSKYE
.ref WIPEOUT
.ref BINBCD
.def inmatchup
.bss inmatchup,16
BSSX kp_ram, 10*32
;ram
BSSX credit1_obj, 32 ;10's object
BSSX credit2_obj, 32 ;1's object
BSSX credit3_obj, 32 ;CREDIT or FREE PLAY object
.bss exit_status, 16
.bss credtime1_obj, 32*1 ;
.bss credtime2_obj, 32*1 ;
.bss credtime3_obj, 32*1 ;
.bss credtime4_obj, 32*1 ;
BSSX name1_obj, 32
BSSX name2_obj, 32
BSSX name3_obj, 32
BSSX name4_obj, 32
BSSX attrib1_obj, 32*9
BSSX attrib2_obj, 32*9
BSSX attrib3_obj, 32*9
BSSX attrib4_obj, 32*9
.bss head1_obj, 32
.bss head2_obj, 32
.bss head3_obj, 32
.bss head4_obj, 32
BSSX teamset1_obj, 32
BSSX teamset2_obj, 32
.bss logo1_obj, 2*32
.bss logo2_obj, 2*32
.bss message1_obj, 32
.bss message2_obj, 32
.bss message3_obj, 32
.bss message4_obj, 32
.bss team1, 16
.bss team2, 16
.bss team1_control, 16 ;player selecting team 1
.bss team2_control, 16 ;player selecting team 2
.global team1,team2
.global team1_control,team2_control
BSSX oteam1, 16 ;Used to keep original court colors
.bss enter_initials, 16
BSSX can_enter_inits,16
.bss game_purchased, 16 ;full game purchase
BSSX page_scrolling, 16 ;0=no, 1=yes
.bss plate1_objs, 2*32 ;plate behind heads & logo
.bss plate2_objs, 2*32 ; " " "
BSSX force_selection,16
BSSX in_team_select,16
BSSX special_heads,16*4 ;-1 = normal player head
; BSSX player_toggle1, 16 ;0 = no toggle
; BSSX player_toggle2, 16 ;must follow player_toggle1!!!
.bss bigroster1, 16
.bss bigroster2, 16
.bss tm1taps, 16 ;For powering up big roster
.bss tm2taps, 16
.bss dbnce1, 16
.bss dbnce2, 16
.bss tm1swrl, 16
.bss tm2swrl, 16
.bss toggle1_time, 16
.bss toggle2_time, 16
.bss switch_1,16
.bss switch_2,16
.bss team1_switch,16
.bss team2_switch,16
NUM_TEAMS equ 27
BSSX tm1set,(NUM_TEAMS+1)*16
BSSX tm2set,(NUM_TEAMS+1)*16
.bss teams_pop, NUM_TEAMS*32
.bss sorted_teams, NUM_TEAMS*16
BSSX fatality,16 ;Fatality 0,1,2, or 3 for both teams
BSSX winningteam,16
.bss fixbug,16
.text
TEAMSEL_PAGE equ 0*256
NAMENT_PAGE equ 1*256
YESNO_PAGE equ 2*256
XTRA_CRTIME equ >7fff ;20*60
MAX_CRTIME equ >7fff ;30*60
_ATL equ 0
_BOS equ 1
_CHA equ 2
_CHI equ 3
_CLE equ 4
_DAL equ 5
_DEN equ 6
_DET equ 7
_GOL equ 8
_HOU equ 9
_IND equ 10
_LAC equ 11
_LAL equ 12
_MI equ 13
_MIL equ 14
_MIN equ 15
_NJ equ 16
_NY equ 17
_ORL equ 18
_PHI equ 19
_PHX equ 20
_POR equ 21
_SAC equ 22
_SAN equ 23
_SEA equ 24
_UTA equ 25
_WAS equ 26
_MK2 equ 27 ;Special defeated all 27 teams - MK2
#******************************************************************************
SCROLL_SPEED equ 8
SUBRP initials_entry
.if 0
JSRP show_player_records
.endif
.if 0
clr a0 ;cycle through hiscore stuff
#whopper
PUSHP a0
JSRP show_hiscore
PULLP a0
inc a0
jruc #whopper
.endif
calla display_blank
calla WIPEOUT ;CLEAN SYSTEM OUT
clr a0
move a0,@HALT
move a0,@in_team_select
move a0,@toggle1_time
move a0,@toggle2_time
move a0,@strongmen
movk 27,a1
movi tm1set,a2
movi tm2set,a3
#lp move a0,*a2+
move a0,*a3+
dsjs a1,#lp
movi -1,a0
move a0,@team1 ;no teams selected
move a0,@team2
move a0,@team1_control ;player selecting team 1
move a0,@team2_control ;player selecting team 2
move a0,@special_heads
move a0,@special_heads+10h
move a0,@special_heads+20h
move a0,@special_heads+30h
move a0,@bigroster1
move a0,@bigroster2
clr a0
move a0,@tm1swrl
move a0,@tm2swrl
move a0,@tm1taps
move a0,@tm2taps
move a0,@page_scrolling ;not scrolling
move a0,@team1_switch
move a0,@team2_switch
move a0,@baby_flag
movi tune1_snd,a0
calla snd_play1ovr
movi MAX_CRTIME,a0
move a0,@cntrs_delay
movi -1,a0 ;init all 4 players data to -1
movi player1_data,a1
movi 4*PR_SIZE/16,a2 ;4 players @ PR_SIZE words each
#init_loop
move a0,*a1+
dsj a2,#init_loop
movk 1,a0 ;page flipping on
move a0,@dpageflip
movi 4<<10+4<<5+7,a0
move a0,@IRQSKYE
SLEEPK 1
; CALLA COLRPRC
; movi PALFRAM+PALRSIZ,a2 ;>Steal pals 1-3
; movi junkp,a1
; movk 3,a3
;#loop move a1,*a2+,L
; dsj a3,#loop
movi SCRNEND,a0 ;[256,405]
move a0,@SCRNLR,L
clr a0
move a0,@WORLDTLX,L
movi [YESNO_PAGE,0],a0
move a0,@WORLDTLY,L
SLEEPK 2
CREATE0 strt_snd
movi name_entry_mod,a0
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not2
movi name_entry_kit_mod,a0
#not2
move a0,@BAKMODS,L
calla BGND_UD1
calla blue_shadow
calla create_bits
CREATE0 monitor_buyins
CREATE0 team_control
CREATE0 credits
CREATE0 credit_messages
CREATE0 monitor_fullgame
movk 1,a0
move a0,@DISPLAYON
SLEEPK 2
calla display_unblank
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrnz #2_plyrs
.ref winner_stays_box
JSRP winner_stays_box ;skip if 2 player kit
#2_plyrs
movi #init_setup,a2
calla setup_message
.global mess_objid
movi CLSDEAD|123,a0
move a0,@mess_objid
movk 22,a0
move a0,@mess_line_spacing
movi #str_init,a4
calla print_string_C2
calla scrnrel_off
calla create_text
movi [200-57,0],a0 ;x val
movi [62-3,0],a1 ;y val
movi yesnobak,a2 ;* image
movk 5,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
movi TYPTEXT,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ
SLEEP TSEC-30
clr a9
clr a10
movi 20*TSEC,a7
#input_loop
PUSHP a7
move a10,a11 ;last cursor pos
calla get_all_sticks_cur
btst 1,a0 ;down
jrz #no_down
movk 1,a10
#no_down
btst 0,a0 ;up
jrz #no_up
clr a10
#no_up
move a10,a0
sll 4,a0 ;x 16 bits
addi #ypos,a0
move *a0,a0
move *a8(OYPOS),a1
andni 0ffh,a1 ;or in page offset
or a1,a0
move a0,*a8(OYPOS) ;new cursor Y
cmp a10,a11
jreq #no_change
SOUND1 cursor_snd1
clr a9
#no_change
btst 4,a9
jrz #ison
calla obj_off
jruc #skip
#ison
calla obj_on
#skip
inc a9
SLEEPK 1
;; move @PSTATUS,a0
;; jrz #timed_out
PULLP a7
dec a7
jrnz #no_timeout
movk 1,a10 ;no initials
move *a8(OYPOS),a1
andni 0ffh,a1 ;or in page offset
movi 129-3,a0
or a0,a1
move a1,*a8(OYPOS)
jruc #timeout
#no_timeout
calla get_all_buttons_down
jrz #input_loop
#timeout
calla obj_on
movi 0f0fh,a0
move a0,*a8(OCONST)
SOUND1 select_snd1
movk 3,a11
#again
calla const_on
SLEEPK 3
calla const_off
SLEEPK 3
dsj a11,#again
SLEEP 20
xori 1,a10 ;1 = yes, 0 = no
move a10,@enter_initials
jrz #skip_name
movi cheer_snd,a0
calla snd_play1
movi AUD_INITENTRD,a0 ;inc initials entered audit
calla AUD1
calla del_offscreen_bobjs
JSRP name_entry
move @PSTATUS,a0
jrz #timed_out
jruc #do_teamsel
#skip_name
movi boo1_snd,a0
calla snd_play1
calla KILBGND ;Kill old background
calla pal_clean
movi [NAMENT_PAGE,0],a0
move a0,@WORLDTLY,L
movi [NAMENT_PAGE,0],a0
move a0,@WORLDTL,L
movi name_entry2_mod,a0
move a0,@BAKMODS,L
calla BGND_UD1
movi #init_setup2,a2
calla setup_message
movi CLSDEAD|123,a0
move a0,@mess_objid
movk 22,a0
move a0,@mess_line_spacing
movi #str_init,a4
calla print_string_C2
calla scrnrel_off
calla create_text
#do_teamsel
calla del_offscreen_bobjs
JSRP team_selection
movk 25,a10
#waitabit
SLEEPK 1
move @team1,a0
move @team2,a1
and a0,a1
move a1,a1
jrn #timed_out
dsj a10,#waitabit
.ref select_teams
calla select_teams
movi horn_snd,a0
calla snd_play1
; SOUND1 tune1end_snd
movk 1,a0
move a0,@inmatchup
JSRP matchup_screen
clr a0
move a0,@in_team_select
move a0,@inmatchup
#timed_out
RETP
strt_snd
SLEEP >d8
movi welcm_snd,a0
calla snd_play1
DIE
SUBRP scrnrel_off
movi OBJLST,a14
#lp8
move *a14,a14,L
jrz #x
move *a14(OID),a2
cmpi CLSDEAD|123,a2
jrne #lp8
move *a14(OFLAGS),a0
andni M_SCRNREL,a0 ;turn off screen relative
move a0,*a14(OFLAGS)
movk 6,a0
move a0,*a14(OZPOS)
jruc #lp8
#x rets
#ypos .word 62-3,129-3
#init_setup
RJR_STR osgemd_ascii,10,0,199,12+YESNO_PAGE,WHITEPAL,0
#init_setup2
RJR_STR osgemd_ascii,10,0,199,12+NAMENT_PAGE,WHITEPAL,0
#str_init
.string "enter initials for",1
.string "record keeping?",0
cheer_snd .word >f898,10,>8144,0 ;Quick cheer
cheer1_snd .word >fd84,80,>8111,0 ;Long cheer
cheer2_snd .word >f894,80,>8144,0 ;Long cheer
cheer3_snd .word >fc84,120,>814e,0 ;Long cheer
boo1_snd .word >f884,120,>814a,0 ;Boo
.even
#******************************************************************************
SUBRP delete_text
movi TYPTEXT,a0 ;object ID
clr a1 ;mask
calla obj_delc
rets
#******************************************************************************
SUBRP create_text
movk 5,a4
movi #images,a5
#initext
movi LGMDGLD,b0
move *a5+,a0 ;x val
sll 16,a0
move *a5+,a1 ;y val
sll 16,a1
move *a5+,a2,L ;* image
PUSH a4,a5
movk 6,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
movi TYPTEXT,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJP
PULL a4,a5
dsj a4,#initext
rets
.asg 62,Y1
.asg 129,Y2
.asg 200-52,X1
.asg 200-39,X2
#images
.word X1,Y1
.long lgmd_Y
.word X1+38+3,Y1
.long lgmd_E
.word X1+38+3+30+3,Y1
.long lgmd_S
.word X2,Y2
.long lgmd_N
.word X2+38+3,Y2
.long lgmd_O
#******************************************************************************
SUBRP name_entry
clr a0
move a0,@force_selection
movk 1,a0
move a0,@can_enter_inits ;can enter initials
calla get_all_records
calla sort_wins
movk 1,a10
CREATE0 player_cursor
movk 1,a10 ;player 2
CREATE0 challenger
movk 2,a10
CREATE0 player_cursor
movk 2,a10 ;player 3
CREATE0 challenger
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrnz #2_plyrs
clr a10
CREATE0 player_cursor
clr a10 ;player 1
CREATE0 challenger
movk 3,a10
CREATE0 player_cursor
movk 3,a10 ;player 4
CREATE0 challenger
#2_plyrs
MOVI [3,9],a8 ;START AT COLOR 3, CYCLE 9 COLORS
MOVI SGMD8PLV,a9 ;PAL NAME
MOVI COLTAB,a10 ;TABLE TO CYCLE WITH
MOVK 3,a11 ;RATE OF CYCLE IN TICKS
CREATE CYCPID2,CYCLE_TABLE ;START PROCESS TO DO CYCLE
clr a0
move a0,@exit_status
movi -SCROLL_SPEED<<16,a10
JSRP scroll_page
calla delete_text
calla brown_shadow
movi 25*TSEC,a10
CREATE CNTDWN_PID,timeout
#wait_exit
SLEEPK 1
calla update_credits
move @exit_status,a0
jrnz #wait_exit
clr a0
move a0,@can_enter_inits ;can't enter initials
movi CNTDWN_PID,a0
calla KIL1C
movi CYCPID2,a0 ;kill cycler
calla KIL1C
calla delete_text
RETP
#******************************************************************************
SUBR team_selection
movk 8,a9 ;palette
movi [32+TEAMSEL_PAGE,44],a10 ;start y,x
movi city_table_left+2*16,a8 ;* alpha table
clr a11 ;object ID
calla display_alpha_table
movk 9,a9 ;palette
movi [32+TEAMSEL_PAGE,44],a10 ;start y,x
movi city_table_right+2*16,a8 ;* alpha table
clr a11 ;object ID
calla display_alpha_table
clr a0
move a0,@exit_status
move a0,@force_selection
move a0,@fatality
clr a10
CREATE0 challenger2
movk 1,a10
CREATE0 challenger2
CREATE0 team1_cursor
CREATE0 team2_cursor
clr a0
calla create_logos
clr a0
calla create_player_heads
clr a0
calla create_team_set
CREATE0 create_team_set_flsh
calla update_team_set
SLEEP 2
calla update_logos
calla update_player_heads
movi -SCROLL_SPEED<<16,a10
JSRP scroll_page
movk 1,a0
move a0,@page_scrolling ;scrolling
calla find_plates ;find bgnd plate objects (for flashing)
calla delete_text
calla brown_shadow
movk 1,a0
move a0,@in_team_select
calla del_offscreen_bobjs
calla create_player_names
calla update_player_names
; movi #press_setup,a2
; calla setup_message
; movi #str_press,a4
; calla print_string_C2
SLEEPK 15
clr a0
move a0,@page_scrolling ;not scrolling
.ref blink_tmslct
CREATE0 blink_tmslct
SUBRP subs_in
;Temp
; movi 07ffffffh,a0
; move a0,@player3_data+PR_TEAMSDEF,L
; move a0,@player2_data+PR_TEAMSDEF,L
move @team1_control,a0 ;player selecting team 1
jrn #not_bigrost
sll 5,a0
addi defeated,a0
move *a0,a0,L
move *a0,a0,L
cmpi 07ffffffh,a0
jrnz #not_bigrost
move @team1_control,a4 ;player selecting team 1
movi rosterblu,a9
sll 4,a4 ;x 16 bits
addi plaque_xs,a4
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_2p
addi 4*16,a4
#not_2p
move *a4,a10
sll 16,a10
clr a0
move a0,@HALT
CREATE0 fullgame_purchased
#not_bigrost
move @team2_control,a0 ;player selecting team 1
jrn #not_bigrost2
sll 5,a0
addi defeated,a0
move *a0,a0,L
move *a0,a0,L
cmpi 07ffffffh,a0
jrnz #not_bigrost2
move @team2_control,a4 ;player selecting team 1
movi rosterred,a9
sll 4,a4 ;x 16 bits
addi plaque_xs,a4
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_2p2
addi 4*16,a4
#not_2p2
move *a4,a10
sll 16,a10
clr a0
move a0,@HALT
CREATE0 fullgame_purchased
#not_bigrost2
#wait_loop0
movi 30*TSEC,a10
CREATE CNTDWN_PID,timeout
#wait_loop
SLEEPK 1
calla update_logos
calla update_player_names
calla update_team_set
calla update_player_heads
move @exit_status,a0
jrnz #wait_loop
movi CNTDWN_PID,a0
calla KIL1C
calla delete_text
CREATE0 suckup_credits
#wait_loop2
SLEEPK 1
calla update_logos
calla update_player_names
calla update_team_set
calla update_player_heads
move @exit_status,a0
jrnz #wait_loop0
calla check_suckup ;wait for all credits
jrz #wait_loop2 ;to be sucked up
movi TSEC+30,a10
#wait_loop3
SLEEPK 1
PUSH a10
calla update_logos
calla update_player_names
calla update_team_set
calla update_player_heads
PULL a10
dsj a10,#wait_loop3
RETP
;#press_setup
; RJR_STR osgemd_ascii,8,0,200,10-4,WHITEPAL,0
;#str_press
; .string "press button to select",0
.even
#*****************************************************************************
BOX_IMG_WIDTH equ 88
BOX_WIDTH equ 80
BOX_HEIGHT equ 95
OPEN_SPEED equ 4
BOX_PSIZE equ 6 ;bits per pixel
SUBRP suckup_credits
calla check_suckup ;credits unused?
jrnz #snuffit
movi win_snd,a0
calla snd_play1
movi [200-4,0],a0 ;x val
movi [132-20-BOX_HEIGHT/2,0],a1 ;y val
movi growbox,a2 ;* image
movi 19999,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,*a13(PDATA+0h),L
movi [200,0],a0 ;x val
movi [132-20-BOX_HEIGHT/2,0],a1 ;y val
movi growbox,a2 ;* image
movi 19999,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,*a13(PDATA+20h),L
move *a8(OSAG),a0,L
move a0,*a13(PDATA+40h),L
move *a13(PDATA+20h),a8,L
movi 200,a0 ;x val
move a0,*a8(OXPOS)
move *a13(PDATA+40h),a0,L ;OSAG
addi (BOX_IMG_WIDTH-4)*BOX_PSIZE,a0
move a0,*a8(OSAG),L
movi BOX_IMG_WIDTH-4,a0
move a0,*a8(OFSET)
move *a13(PDATA+0h),a8,L
movi 200-4,a0 ;x val
move a0,*a8(OXPOS)
movi BOX_IMG_WIDTH-4,a0
move a0,*a8(OFSET)
#open_box
SLEEP 1
move *a13(PDATA+20h),a8,L
move *a8(OSAG),a0,L
subi OPEN_SPEED*BOX_PSIZE,a0
move a0,*a8(OSAG),L
move *a8(OFSET),a0
subi OPEN_SPEED,a0
move a0,*a8(OFSET)
move *a13(PDATA+0h),a8,L
move *a8(OFSET),a0
subi OPEN_SPEED,a0
move a0,*a8(OFSET)
move *a8(OXPOS),a0
subi OPEN_SPEED,a0
move a0,*a8(OXPOS)
cmpi 200-BOX_WIDTH,a0
jrhi #open_box
movi [200,0],a0 ;x val
movi [132-10-BOX_HEIGHT/2,0],a1 ;y val
movi useupbx,a2 ;* image
movi 20000,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
movi CLSNEUT|TYPTEXT|SUBMES2,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
#wait
SLEEPK 1
move @exit_status,a0
jrnz #close_box0
calla check_suckup ;wait for all credits
jrz #wait ;to be sucked up
#close_box0
calla DELOBJA8
#close_box
SLEEPK 1
move *a13(PDATA+20h),a8,L
move *a8(OSAG),a0,L
addi OPEN_SPEED*BOX_PSIZE,a0
move a0,*a8(OSAG),L
move *a8(OFSET),a0
addi OPEN_SPEED,a0
move a0,*a8(OFSET)
move *a13(PDATA+0h),a8,L
move *a8(OFSET),a0
addi OPEN_SPEED,a0
move a0,*a8(OFSET)
move *a8(OXPOS),a0
addi OPEN_SPEED,a0
move a0,*a8(OXPOS)
cmpi 200-4,a0
jrlo #close_box
SLEEPK 1
movi CLSNEUT|TYPTEXT|SUBMES2,A0
calla obj_del1c
#snuffit
DIE
#*****************************************************************************
.global sorted_teams
.global teams_pop
SUBRP get_teams_pop
clr a0
movi teams_pop,a1 ;zero all team selected counts
movi NUM_TEAMS,a2
#init_loop
move a0,*a1,L
dsj a2,#init_loop
movi AUD_WAS,a0 ;audit number
#next_audit
PUSH a0
calla GET_AUD ;val in a1
movi -1,a10 ;position
movi teams_pop-32,a4
movi sorted_teams-16,a5
#next_team
addi 32,a4
addi 16,a5
inc a10
move *a4,a0,L
cmp a0,a1 ;a1-a0
jrhs #insert
cmpi NUM_TEAMS-1,a10
jrlt #next_team
#insert
calla bump_down
move a1,*a4,L
PULL a0
move a0,a1
subi AUD_ATL,a1
move a1,*a5
dec a0
cmpi AUD_ATL,a0
jrhs #next_audit
rets
bump_down
PUSH a1
cmpi NUM_TEAMS-1,a10
jreq #no_bump
movi NUM_TEAMS-1,a3
sub a10,a3
PUSH a3 ;num down shits required
movi NUM_TEAMS*32,a1
addi teams_pop,a1
move a1,a2
subi 32,a2
#bump_loop1
move -*a2,-*a1,L
dsj a3,#bump_loop1
PULL a3
movi NUM_TEAMS*16,a1
addi sorted_teams,a1
move a1,a2
subi 16,a2
#bump_loop2
move -*a2,-*a1
dsj a3,#bump_loop2
#no_bump
PULL a1
rets
#*****************************************************************************
SUBRP print_initials
clr a5
movk 1,a7 ;num objs
move *a13(PC_NAM1OBJ),a8,L
calla obj_off
move *a13(PC_NAM2OBJ),a8,L
calla obj_off
move *a13(PC_NAM3OBJ),a8,L
calla obj_off
move *a13(PC_DATADDR),a2,L ;start of player data
move *a2+,a0
move *a13(PC_NAM1OBJ),a8,L
move *a8(OIMG),a0,L
cmpi OSGEMD_SPC,a0
jreq #is_space1
calla obj_on
#is_space1
move *a8(OSIZEX),a0 ;width of object
add a0,a5
move *a2+,a0
jrn #skip
inc a7
addk 2,a5 ;+ 2 pixel space
move *a13(PC_NAM2OBJ),a8,L
move *a8(OIMG),a0,L
cmpi OSGEMD_SPC,a0
jreq #is_space2
calla obj_on
#is_space2
move *a8(OSIZEX),a0 ;width of object
add a0,a5
move *a2,a0
jrn #skip
inc a7
addk 2,a5 ;+ 2 pixel space
move *a13(PC_NAM3OBJ),a8,L
move *a8(OIMG),a0,L
cmpi OSGEMD_SPC,a0
jreq #is_space3
calla obj_on
#is_space3
move *a8(OSIZEX),a0 ;width of object
add a0,a5
#skip
inc a5 ;+ 1/2
srl 1,a5 ;width / 2
move *a13(PC_CENTERX2),a6
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #no_2p
move *a13(PC_CENTERXkit),a6
#no_2p
sub a5,a6 ;center - width/2
movi PC_NAM1OBJ,a4
add a13,a4
#loop
move *a4+,a2,L ;* object
move a6,*a2(OXPOS)
move *a2(OSIZEX),a0 ;width of object
add a0,a6
addk 2,a6 ;2 pixel spacing
dsj a7,#loop ;another img?
rets
#*****************************************************************************
;returns a8 = * alpha table
SUBRP get_menu_data
clr a0
move a0,*a13(PC_CURSPOS) ;position
move *a13(PC_OBJID),a11 ;OBJ ID
move *a13(PC_MENUBASE),a1,L
move *a13(PC_MENULEVEL),a8
sll 5,a8 ;x 32 bits
add a1,a8
move *a8,a8,L ;get start addr
move *a8+,a9 ;palette number
move *a8+,a10
move a10,*a13(PC_STARTX) ;menu start x
move *a8+,a0
move a0,*a13(PC_STARTY) ;menu start y
sll 16,a0 ;top word
movy a0,a10 ;[yy,xx] format
move *a8,a8,L ;table addr
move *a8+,a1
move a1,*a13(PC_TABWIDTH) ;table width
move *a8+,a1
move a1,*a13(PC_TABSIZE) ;table size
move a8,*a13(PC_TABLE),L
rets
#*****************************************************************************
SUBRP create_menu
calla get_menu_data
calla display_alpha_table ;create table of objects
rets
#*****************************************************************************
;switch vals in a0 (starting at bit0)
SUBRP move_team_cursor
andi 01111b,a0
sll 5,a0 ;x 32 bits
addi joy_moves,a0
move *a0,a0,L
call a0
rets
#*****************************************************************************
;switch vals in a0 (starting at bit0)
SUBRP move_cursor
andi 01111b,a0
sll 5,a0 ;x 32 bits
addi joy_moves,a0
move *a0,a0,L
call a0
rets
#*****************************************************************************
SUBRP update_statbox_images
move *a13(PC_CHARPOS),a0
sll 5,a0 ;x 32 bits
addi #curspos_actions,a0
move *a0,a0,L
jump a0
rets
*****************************
#curspos_actions
.long #name0,#name1,#name2,#month,#day
*****************************
#name0
#name1
#name2
move *a13(PC_CHARPOS),a0 ;0 - 2
sll 5,a0 ;x 32 bits
addi PC_NAM1OBJ,a0
add a13,a0
move *a0,a8,L ;* object
calla update_image
calla print_initials
rets
*****************************
#month
#day
movi PC_MONTHOBJ,a0
add a13,a0
move *a0,a8,L ;* object
calla update_image
move *a13(PC_MONTHOBJ),a4,L
move *a4(OSIZEX),a3 ;width of object
inc a3 ;+ 1/2
srl 1,a3 ;width / 2
move *a13(PC_CENTERX),a2
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #no_2p
move *a13(PC_CENTERXkit),a2
#no_2p
sub a3,a2 ;center - width/2
move a2,*a4(OXPOS)
rets
#*****************************************************************************
* A8=*Obj
SUBRP update_image
move *a8(OYPOS),a0
andni 400h,a0 ;onscreen Y
move a0,*a8(OYPOS)
calla get_table_address ;returns * entry in a1
move *a1+,a1 ;char under cursor
sll 5,a1 ;x 32 bits
addi alpha_table,a1
move *a1,a0,L ;image addr
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
rets
#*****************************************************************************
.asg 57,X1
.asg 146,X2
.asg 251,X3
.asg 340,X4
.asg 214+TEAMSEL_PAGE-12-2,PNAMES_Y
SUBRP create_player_names ;and attributes
movi [X1,0],a0 ;x val
movi [PNAMES_Y,0],a1 ;y val
movi WILKINS,a2 ;* image
move @special_heads,b0
jrn #not_spec1
sll 5,b0 ;x 32 bits
addi our_names,b0
move *b0,b0,L
move b0,a2
#not_spec1
movi 120,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ
move a8,@name1_obj,L
movi [X2,0],a0 ;x val
movi [PNAMES_Y,0],a1 ;y val
movi AUGMON,a2 ;* image
move @special_heads+10h,b0
jrn #not_spec2
sll 5,b0 ;x 32 bits
addi our_names,b0
move *b0,b0,L
move b0,a2
#not_spec2
calla BEGINOBJ
move a8,@name2_obj,L
movi [X3,0],a0 ;x val
movi [PNAMES_Y,0],a1 ;y val
movi WILKINS,a2 ;* image
move @special_heads+20h,b0
jrn #not_spec3
sll 5,b0 ;x 32 bits
addi our_names,b0
move *b0,b0,L
move b0,a2
#not_spec3
calla BEGINOBJ
move a8,@name3_obj,L
movi [X4,0],a0 ;x val
movi [PNAMES_Y,0],a1 ;y val
movi AUGMON,a2 ;* image
move @special_heads+30h,b0
jrn #not_spec4
sll 5,b0 ;x 32 bits
addi our_names,b0
move *b0,b0,L
move b0,a2
#not_spec4
calla BEGINOBJ
move a8,@name4_obj,L
movi [X1-40,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi ATT_BLU,a2 ;attribs,a2 ;* image
movi 120,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ
move a8,@attrib1_obj,L
movi [X2-40,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi ATT_BLU,a2 ;attribs,a2 ;* image
calla BEGINOBJ
move a8,@attrib2_obj,L
movi [X3-40,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi ATT_BLU,a2 ;attribs,a2 ;* image
calla BEGINOBJ
move a8,@attrib3_obj,L
movi [X4-40,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi ATT_BLU,a2 ;attribs,a2 ;* image
calla BEGINOBJ
move a8,@attrib4_obj,L
movi [X1-8,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi attrib1_obj+20h,a10
calla #create_attrib
movi [X2-8,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi attrib2_obj+20h,a10
calla #create_attrib
movi [X3-8,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi attrib3_obj+20h,a10
calla #create_attrib
movi [X4-8,0],a0 ;x val
movi [PNAMES_Y+10,0],a1 ;y val
movi attrib4_obj+20h,a10
calla #create_attrib
rets
;a0 = x
;a1 = y
;a10 = * attrib obj
#create_attrib
movk 8,a2 ;# of attributes
PUSH a0,a1
#atloop
PUSH a0,a1,a2,a10
movi font60w,a2 ;* image
movi 120,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ
PULL a0,a1,a2,a10
move a8,*a10+,L
addi [6,0],a1
cmpi 5,a2
jrnz #noadj
PULL a0,a1
addi [41,0],a0 ;adjust x
#noadj
dsj a2,#atloop
rets
#*****************************************************************************
*
* a0 = table offset to use for coordinates
*
SUBR create_player_heads
PUSH a10,a11
sll 5,a0 ;x 32 bits
addi #xy_starts,a0
move *a0,a10,L
move *a10+,a11
sll 16,a11 ;y pos
; movi HRD_GLD,a2 ;* image
movi RAD_MK2,a2 ;* image
move @special_heads,b0
jrn #nrmhd1
sll 5,b0 ;x 32 bits
addi our_heads,b0
move *b0,b0,L
move b0,a2
#nrmhd1
move *a10+,a0 ;x val
sll 16,a0
move a11,a1 ;y pos
movi 121,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@head1_obj,L
; movi MUL_GLD,a2 ;* image
movi RAD_MK2,a2 ;* image
move @special_heads+10h,b0
jrn #nrmhd2
sll 5,b0 ;x 32 bits
addi our_heads,b0
move *b0,b0,L
move b0,a2
#nrmhd2
move *a10+,a0 ;x val
sll 16,a0
move a11,a1 ;y pos
movi DMAWNZ|M_FLIPH,a4 ;DMA flags
calla BEGINOBJ2
move a8,@head2_obj,L
; movi WLK_ATL,a2 ;* image
movi RAD_MK2,a2 ;* image
move @special_heads+20h,b0
jrn #nrmhd3
sll 5,b0 ;x 32 bits
addi our_heads,b0
move *b0,b0,L
move b0,a2
#nrmhd3
move *a10+,a0 ;x val
sll 16,a0
move a11,a1 ;y pos
movi DMAWNZ,a4 ;DMA flags
calla BEGINOBJ2
move a8,@head3_obj,L
; movi AUG_ATL,a2 ;* image
movi RAD_MK2,a2 ;* image
move @special_heads+30h,b0
jrn #nrmhd4
sll 5,b0 ;x 32 bits
addi our_heads,b0
move *b0,b0,L
move b0,a2
#nrmhd4
move *a10,a0 ;x val
sll 16,a0
move a11,a1 ;y pos
movi DMAWNZ|M_FLIPH,a4 ;DMA flags
calla BEGINOBJ2
move a8,@head4_obj,L
PULL a10,a11
rets
SUBR create_team_set_flsh
SLEEP 3Ah
move @teamset1_obj,a8,L
move @teamset2_obj,a9,L
movk 11,a10
#again
movi 1717h,a2
move a2,*a8(OCONST)
move a2,*a9(OCONST)
setf 4,0,0
movk M_CONNON,a0 ;Replace non-zero data with constant
move a0,*a8(OCTRL) ;Write 4 low bits
move a0,*a9(OCTRL) ;Write 4 low bits
setf 16,1,0
SLEEPK 4
setf 4,0,0
movk M_WRNONZ,a0
move a0,*a8(OCTRL) ;Write 4 low bits
move a0,*a9(OCTRL) ;Write 4 low bits
setf 16,1,0
SLEEPK 3
dsj a10,#again
DIE
*****************************************************************************
*
* a0 = table offset to use for coordinates
*
SUBR create_team_set
PUSH a10,a11
sll 5,a0 ;x 32 bits
addi #xy_starts2,a0
move *a0,a10,L
move *a10+,a11
sll 16,a11 ;y pos
movi SQUD_1,a2 ;* image
move *a10+,a0 ;x val
sll 16,a0
move a11,a1 ;y pos
; movi 221,a3 ;z pos
movi 30001,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@teamset1_obj,L
movi SQUD_2,a2 ;* image
move *a10+,a0 ;x val
sll 16,a0
move a11,a1 ;y pos
movi DMAWNZ,a4 ;DMA flags
calla BEGINOBJ2
move a8,@teamset2_obj,L
PULL a10,a11
rets
#xy_starts2
.long #stxy1a,#stxy2a
#stxy1a .word 207-14-2 ;Y
.word 94+6,288+7
#stxy2a .word 207-14-2+256 ;Y
.word 94+6,288+7
#xy_starts
.long #stxy1,#stxy2,#stxy3
#stxy1 .word 207-14 ;Y
.word 15,187-1,209,381-1
#stxy2 .word 186 ;Y
.word 24,154-1,242,371-1
#stxy3 .word >1c1
.word >13-4,>bd-4,>d6-4,>180-4
;RAD_MK2:
;SCO_MK2:
;REP_MK2:
;SUB_MK2:
#*****************************************************************************
SUBR update_player_heads
PUSH a10
move @team1,a0
cmpi 27,a0
jrnz #cont1a
move @gmqrtr,a14
cmpi 2,a14
jrnz #cont1a
move @fixbug,a14
jrz #do_team2
#cont1a
move @team1,a0
jrnn #valid_team1
move @head1_obj,a8,L
calla obj_off
move @head2_obj,a8,L
calla obj_off
jruc #do_team2
#valid_team1
movi player_heads,a10
move @team1,a2
#lp cmpi 0,a2
jrz #out
addi 20*64,a10
dec a2
jruc #lp
#out
move @team1,a0
sll 4,a0
addi tm1set,a0
move *a0,a14
sll 6,a14
add a14,a10
move @head1_obj,a8,L
calla obj_on
move *a10,a2,L ;* image
move @special_heads,b0
jrnn #spec_head1
move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
move a0,*a8(OPAL),L ;Set palette & constant
move a2,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
move a2,a14
cmpi RAD_MK2,a14
jrz #mk2c
cmpi SUB_MK2,a14
jrz #mk2c
cmpi REP_MK2,a14
jrz #mk2c
cmpi SCO_MK2,a14
jrz #mk2c
jrnz #notmkc
#mk2c
move *a8(OFLAGS),A1
btst 14,a1
jrnz #on
move @gmqrtr,a14
cmpi 2,a14
jrnz #cont1
move @fixbug,a14
jrnz #on
#cont1
move a0,a14
move a8,a0
calla OBJOFF
calla obj_off
move a14,a0
move *a8(OFLAGS),A1
ori >7000,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
ori >7000,a1 ;DMA flags
move a1,*a8(OCTRL)
jruc #notmkcx
#on
move a0,a14
calla obj_on
move a8,a0
calla OBJON
move a14,a0
jruc #notmkcx
#notmkc
move *a8(OFLAGS),A1
andi >80ff,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
andi >80ff,a1 ;DMA flags
move a1,*a8(OCTRL)
#notmkcx
calla obj_aniq ;change object image
#spec_head1
move @head2_obj,a8,L
calla obj_on
move *a10(20h),a2,L ;* image
move @special_heads+10h,b0
jrnn #spec_head2
move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
move a0,*a8(OPAL),L ;Set palette & constant
move a2,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
move a2,a14
cmpi RAD_MK2,a14
jrz #mk2b
cmpi SUB_MK2,a14
jrz #mk2b
cmpi REP_MK2,a14
jrz #mk2b
cmpi SCO_MK2,a14
jrz #mk2b
jrnz #notmkb
#mk2b
move *a8(OFLAGS),A1
btst 14,a1
jrnz #onxb
move @gmqrtr,a14
cmpi 2,a14
jrnz #cont2
move @fixbug,a14
jrnz #onxb
#cont2
move a0,a14
move a8,a0
calla OBJOFF
calla obj_off
move a14,a0
move *a8(OFLAGS),A1
ori >7010,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
ori >7010,a1 ;DMA flags
move a1,*a8(OCTRL)
jruc #notmkxb
#onxb
move a0,a14
calla obj_on
move a8,a0
calla OBJON
move a14,a0
jruc #notmkxb
#notmkb
move *a8(OFLAGS),A1
andi >80ff,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
andi >80ff,a1 ;DMA flags
move a1,*a8(OCTRL)
#notmkxb
calla obj_aniq ;change object image
#spec_head2
#do_team2
move @team2,a0
cmpi 27,a0
jrnz #cont3a
move @gmqrtr,a14
cmpi 2,a14
jrnz #cont3a
move @fixbug,a14
jrz #x
#cont3a
move @team2,a0
jrnn #valid_team2
move @head3_obj,a8,L
calla obj_off
move @head4_obj,a8,L
calla obj_off
jruc #x
#valid_team2
movi player_heads,a10
move @team2,a2
#lp2 cmpi 0,a2
jrz #out2
addi 20*64,a10
dec a2
jruc #lp2
#out2
move @team2,a0
sll 4,a0
addi tm2set,a0
move *a0,a14
sll 6,a14
add a14,a10
move @head3_obj,a8,L
calla obj_on
move *a10,a2,L ;* image
move @special_heads+20h,b0
jrnn #spec_head3
move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
move a0,*a8(OPAL),L ;Set palette & constant
move a2,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
move a2,a14
cmpi RAD_MK2,a14
jrz #mk2a
cmpi SUB_MK2,a14
jrz #mk2a
cmpi REP_MK2,a14
jrz #mk2a
cmpi SCO_MK2,a14
jrz #mk2a
jrnz #notmka
#mk2a
move *a8(OFLAGS),A1
btst 14,a1
jrnz #onx2
move @gmqrtr,a14
cmpi 2,a14
jrnz #cont3
move @fixbug,a14
jrnz #onx2
#cont3
move a0,a14
move a8,a0
calla OBJOFF
calla obj_off
move a14,a0
move *a8(OFLAGS),A1
ori >7000,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
ori >7000,a1 ;DMA flags
move a1,*a8(OCTRL)
jruc #notmkx2
#onx2
move a0,a14
calla obj_on
move a8,a0
calla OBJON
move a14,a0
jruc #notmkx2
#notmka
move *a8(OFLAGS),A1
andi >80ff,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
andi >80ff,a1 ;DMA flags
move a1,*a8(OCTRL)
#notmkx2
calla obj_aniq ;change object image
#spec_head3
move @head4_obj,a8,L
calla obj_on
move *a10(20h),a2,L ;* image
move @special_heads+30h,b0
jrnn #spec_head4
move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
move a0,*a8(OPAL),L ;Set palette & constant
move a2,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
move a2,a14
cmpi RAD_MK2,a14
jrz #mk2
cmpi SUB_MK2,a14
jrz #mk2
cmpi REP_MK2,a14
jrz #mk2
cmpi SCO_MK2,a14
jrz #mk2
jrnz #notmk
#mk2
move *a8(OFLAGS),a1
btst 14,a1
jrnz #onx
move @gmqrtr,a14
cmpi 2,a14
jrnz #cont4
move @fixbug,a14
jrnz #onx
#cont4
move a0,a14
move a8,a0
calla OBJOFF
calla obj_off
move a14,a0
move *a8(OFLAGS),a1
ori >7010,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
ori >7010,a1 ;DMA flags
move a1,*a8(OCTRL)
jruc #notmkx
#onx
move a0,a14
calla obj_on
move a8,a0
calla OBJON
move a14,a0
jruc #notmkx
#notmk
move *a8(OFLAGS),A1
andi >80ff,a1 ;DMA flags
move a1,*a8(OFLAGS)
move *a8(OCTRL),a1
andi >80ff,a1 ;DMA flags
move a1,*a8(OCTRL)
#notmkx
calla obj_aniq ;change object image
#spec_head4
#x
PULL a10
clr a0
move a0,@fixbug
rets
#*****************************************************************************
SUBRP update_player_names
move @team1,a0
jrnn #valid_team1
move @name1_obj,a8,L
calla obj_off
movi attrib1_obj,a2
calla attrib_off
move @name2_obj,a8,L
calla obj_off
movi attrib2_obj,a2
calla attrib_off
jruc #do_team2
#valid_team1
movi player_names,a10
move @team1,a2
#lp cmpi 0,a2
jrz #out
addi 20*64,a10
dec a2
jruc #lp
#out
move @team1,a0
sll 4,a0
addi tm1set,a0
move *a0,a14
sll 6,a14
add a14,a10
move @name1_obj,a8,L
calla obj_on
clr a1 ;bit 0
movi attrib1_obj,a11
calla flash_player_name
move *a10,a0,L ;image addr
move @special_heads,b0
jrnn #spec1
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#spec1
move @name2_obj,a8,L
movk 1,a1 ;bit 1
movi attrib2_obj,a11
calla flash_player_name
move *a10(20h),a0,L ;image addr
move @special_heads+10h,b0
jrnn #spec2
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#spec2
movi attrib1_obj+20h,a11
movi player_names,a10
move @team1,a2
#lp3 cmpi 0,a2
jrz #out3
addi 20*64,a10
dec a2
jruc #lp3
#out3
move @team1,a0
sll 4,a0
addi tm1set,a0
move *a0,a14
sll 6,a14
add a14,a10
move *a10,a0,L
movi name_sort,a14
movi -1,a10
#lp4
inc a10
move *a14+,a1,L
cmp a1,a0
jrnz #lp4
sll 7,a10
addi player_attribs,a10
PUSH a10
move @special_heads,a6
calla update_attribs
PULL a10
movi attrib2_obj+20h,a11
movi player_names,a10
move @team1,a2
#lp3x cmpi 0,a2
jrz #out3x
addi 20*64,a10
dec a2
jruc #lp3x
#out3x
move @team1,a0
sll 4,a0
addi tm1set,a0
move *a0,a14
sll 6,a14
add a14,a10
addk 32,a10
move *a10,a0,L
movi name_sort,a14
movi -1,a10
#lp4x
inc a10
move *a14+,a1,L
cmp a1,a0
jrnz #lp4x
sll 7,a10
addi player_attribs,a10
move @special_heads+10h,a6
calla update_attribs
#do_team2
move @team2,a0
jrnn #valid_team2
move @name3_obj,a8,L
calla obj_off
movi attrib3_obj,a2
calla attrib_off
move @name4_obj,a8,L
calla obj_off
movi attrib4_obj,a2
calla attrib_off
rets
#valid_team2
movi player_names,a10
move @team2,a2
#lp2 cmpi 0,a2
jrz #out2
addi 20*64,a10
dec a2
jruc #lp2
#out2
move @team2,a0
sll 4,a0
addi tm2set,a0
move *a0,a14
sll 6,a14
add a14,a10
; move @team2,a10 ;cursor position
; sll 6,a10 ;x 2 x 32 bits
; addi player_names,a10 ;start of logos
move @name3_obj,a8,L
calla obj_on
movk 2,a1 ;bit 2
movi attrib3_obj,a11
calla flash_player_name
move *a10,a0,L ;image addr
; move @player_toggle2,b0 ;no toggle
; jrz #not3
; move *a10(20h),a0,L ;image addr
;#not3
move @special_heads+20h,b0
jrnn #spec3
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#spec3
move @name4_obj,a8,L
calla obj_on
movk 3,a1 ;bit 3
movi attrib4_obj,a11
calla flash_player_name
move *a10(20h),a0,L ;image addr
; move @player_toggle2,b0 ;no toggle
; jrz #not4
; move *a10,a0,L ;image addr
;#not4
move @special_heads+30h,b0
jrnn #spec4
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#spec4
movi attrib3_obj+20h,a11
; move @player_toggle2,a0 ;no toggle
; jrz #not3a
; movi attrib4_obj+20h,a11
;#not3a
movi player_names,a10
move @team2,a2
#lp6 cmpi 0,a2
jrz #out6
addi 20*64,a10
dec a2
jruc #lp6
#out6
move @team2,a0
sll 4,a0
addi tm2set,a0
move *a0,a14
sll 6,a14
add a14,a10
move *a10,a0,L
; move *a0(OIMG),a0,L
movi name_sort,a14
movi -1,a10
#lp5
inc a10
move *a14+,a1,L
; jrz $
cmp a1,a0
jrnz #lp5
sll 7,a10
addi player_attribs,a10
; move @team2,a10 ;cursor position
; sll 8,a10 ;x16x8x2=128
; addi player_attribs,a10
PUSH a10
move @special_heads+20h,a6
calla update_attribs
PULL a10
movi attrib4_obj+20h,a11
; move @player_toggle2,a0 ;no toggle
; jrz #not4a
; movi attrib3_obj+20h,a11
;#not4a
; addi 16*8,a10 ;*4
movi player_names,a10
move @team2,a2
#lp6x cmpi 0,a2
jrz #out6x
addi 20*64,a10
dec a2
jruc #lp6x
#out6x
move @team2,a0
sll 4,a0
addi tm2set,a0
move *a0,a14
sll 6,a14
add a14,a10
addk 32,a10
move *a10,a0,L
movi name_sort,a14
movi -1,a10
#lp4y
inc a10
move *a14+,a1,L
; jrz $
cmp a1,a0
jrnz #lp4y
sll 7,a10
addi player_attribs,a10
move @special_heads+30h,a6
calla update_attribs
rets
flash_player_name
move @PSTATUS,a0
btst a1,a0
; jruc #player_active
; movk ADJFREPL,a0 ;in free play?
; calla GET_ADJ
; jrnz #in_free
; move @PCNT,a0 ;frame count
; btst 5,a0
; jrnz #objon
;#in_free ;so no name displayed
; calla obj_off
; move a11,a2
; calla #attrib_off
; rets
;#objon
#player_active
calla obj_on
move a11,a2
calla attrib_on
rets
#*****************************************************************************
*
* a0 = table offset to use for coordinates
*
SUBR create_logos
sll 5,a0 ;x 32 bits
addi #startxys,a0
move *a0,a2,L
move *a2+,a1,L
move *a2,a0 ;x val
sll 16,a0
PUSH a1,a2
movi T_SUNS,a2 ;* image
movi 120,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@logo1_obj,L
PULL a1,a2
move *a2+,a0 ;x val
PUSH a1,a2
addi [2,0],a1 ;down 2
addk 2,a0 ;right 2
sll 16,a0
movi T_SUNS,a2 ;* image
movi 119,a3 ;z pos
movi DMACNZ,a4 ;DMA flags
movi SGMD8YEL,b0 ;palette to use
calla BEGINOBJP2
move a8,@logo1_obj+20h,L
movi 0202h,a0 ;black shadow
move a0,*a8(OCONST)
PULL a1,a2 ;y val
move *a2,a0 ;x val
PUSH a1,a2
sll 16,a0
movi T_KNIKS,a2 ;* image
movi 120,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@logo2_obj,L
PULL a1,a2
move *a2+,a0 ;x val
addi [2,0],a1 ;down 2
addk 2,a0 ;right 2
sll 16,a0
movi T_KNIKS,a2 ;* image
movi 119,a3 ;z pos
movi DMACNZ,a4 ;DMA flags
movi SGMD8YEL,b0 ;palette to use
calla BEGINOBJP2
move a8,@logo2_obj+20h,L
movi 0202h,a0 ;black shadow
move a0,*a8(OCONST)
rets
#startxys .long #stxy1,#stxy2,#stxy3
#stxy1 .long (172+TEAMSEL_PAGE-14)<<16 ;Y
.word 101,295
#stxy2 .long 80<<16 ;Y
.word 80,200+80
#stxy3 .long >1a0<<16
.word >68-4,>12d-4
#*****************************************************************************
SUBR update_team_set
;Updated by toggle routine
move @teamset1_obj,a8,L
move @team1,a0
jrnn #ok
calla obj_off
jruc #ok1
#ok
calla obj_on
move @team1,a0
sll 4,a0
addi tm1set,a0
move *a0,a0
sll 5,a0 ;x 32 bits
addi set_imgs,a0
move *a0,a2,L ;image addr
; move *a2(ICMAP),a0,L ;Get *palette
movi SQTR_B_P,a0
calla pal_getf
ori 17170000h,a0
move @teamset1_obj,a8,L
move a0,*a8(OPAL),L ;Set pallette & constant
move a2,a0 ;* image
move *a8(OCTRL),a1
; movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#ok1
move @teamset2_obj,a8,L
move @team2,a0
jrnn #ok2
calla obj_off
rets
#ok2
calla obj_on
move @team2,a0
sll 4,a0
addi tm2set,a0
move *a0,a0
sll 5,a0 ;x 32 bits
addi set_imgs,a0
move *a0,a2,L ;image addr
movi SQTR_R_P,a0
; move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
ori 17170000h,a0
move @teamset2_obj,a8,L
move a0,*a8(OPAL),L ;Set pallette & constant
move a2,a0 ;* image
move *a8(OCTRL),a1
; movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#notvalid
rets
SUBR update_logos
move @logo1_obj,a8,L
calla obj_on
move @logo1_obj+20h,a8,L
calla obj_on
move @team1,a0
jrnn #valid_team1
move @logo1_obj,a8,L
calla obj_off
move @logo1_obj+20h,a8,L
calla obj_off
jruc #team2
#valid_team1
sll 5,a0 ;x 32 bits
addi logos,a0
move *a0,a2,L ;image addr
move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
move @logo1_obj,a8,L
move a0,*a8(OPAL),L ;Set pallette & constant
move a2,a0 ;* image
PUSH a0
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
PULL a0
move @logo1_obj+20h,a8,L
movi DMACNZ,a1 ;DMA flags
calla obj_aniq ;change object image
#team2
move @logo2_obj,a8,L
calla obj_on
move @logo2_obj+20h,a8,L
calla obj_on
move @team2,a0
jrnn #valid_team2
move @logo2_obj,a8,L
calla obj_off
move @logo2_obj+20h,a8,L
calla obj_off
rets
#valid_team2
sll 5,a0 ;x 32 bits
addi logos,a0
move *a0,a2,L ;image addr
move *a2(ICMAP),a0,L ;Get *palette
calla pal_getf
move @logo2_obj,a8,L
move a0,*a8(OPAL),L ;Set pallette & constant
move a2,a0 ;* image
PUSH a0
movi DMAWNZ,a1 ;DMA flags
calla obj_aniq ;change object image
PULL a0
move @logo2_obj+20h,a8,L
movi DMACNZ,a1 ;DMA flags
calla obj_aniq ;change object image
rets
#*****************************************************************************
;returns a pointer into the menu table at
;the current cursor position
;a1 = * current entry
SUBRP get_table_address
move *a13(PC_CURSPOS),a0 ;cursor position
movi 3*16,a1 ;3 x 16 bits
mpyu a0,a1
move *a13(PC_TABLE),a0,L ;table address
add a0,a1
rets
#*****************************************************************************
update_team_cursor1
move @gmqrtr,a0
jrnz up_out
calla update_arrow1
calla update_cursor
;; calla obj_on ;don't flash
up_out
rets
#*****************************************************************************
update_team_cursor2
move @gmqrtr,a0
jrnz up_out
calla update_arrow2
calla update_cursor
;; calla obj_on ;don't flash
rets
#*****************************************************************************
update_arrow1
move *a13(PC_ARROWOBJ),a8,L
move @team1_control,a0
jrn #off
calla get_table_address
move *a1+,a3 ;char under cursor
move *a13(PC_STARTX),a2
move *a1+,a0 ;x offset
add a2,a0
move a0,*a8(OXPOS)
move *a13(PC_STARTY),a2
move *a1+,a0 ;y offset
add a2,a0
move a0,*a8(OYPOS)
PUSH a0
move @team1_control,a0
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not_2
dec a0 ;1-2
#not_2
sll 5,a0 ;x 32 bits
addi arrow_imgs,a0
move *a0,a0,L ;* image
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
PULL a0
subi 28,a0
move a0,*a8(OYPOS)
rets
#off
calla obj_off
rets
arrow_imgs
.long arrow1t,arrow2t,arrow3t,arrow4t
#*****************************************************************************
update_arrow2
move *a13(PC_ARROWOBJ),a8,L
move @team2_control,a0
jrn #off
calla get_table_address
move *a1+,a3 ;char under cursor
move *a13(PC_STARTX),a2
move *a1+,a0 ;x offset
add a2,a0
addk 15,a0
move a0,*a8(OXPOS)
move *a13(PC_STARTY),a2
move *a1+,a0 ;y offset
add a2,a0
move a0,*a8(OYPOS)
PUSH a0
move @team2_control,a0
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not_2
dec a0 ;1-2
#not_2
sll 5,a0 ;x 32 bits
addi arrow_imgs,a0
move *a0,a0,L ;* image
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
PULL a0
subi 28,a0
move a0,*a8(OYPOS)
rets
#off
calla obj_off
rets
#*****************************************************************************
;update cursor position & size for a player
;base on the image it's over
update_cursor
calla get_table_address
move *a1+,a3 ;char under cursor
sll 5,a3 ;x 32 bits
addi alpha_table,a3
move *a3,a3,L ;image addr
move *a3+,a0 ;image width
addi 4,a0
move *a13(PC_CURSOBJ),a8,L
move a0,*a8(OSIZEX)
move *a3,a0 ;image height
addi 2,a0
move a0,*a8(OSIZEY)
move *a1+,a0 ;x offset
move *a13(PC_STARTX),a2
add a2,a0
subi 2,a0
move a0,*a8(OXPOS)
move *a1+,a0 ;y offset
move *a13(PC_STARTY),a2
add a2,a0
subi 1,a0
move a0,*a8(OYPOS)
move *a13(PC_FLASHCOUNT),a0 ;cursor flash count
btst 3,a0
jrnz #off
calla obj_on
rets
#off
calla obj_off
rets
#*****************************************************************************
SUBRP create_heading
move *a13(PC_MENULEVEL),a0
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not_2pa
addk 4,a0
#not_2pa
sll 5,a0 ;x 32 bits
addi #heading_imgs,a0
move *a0,a2,L ;* image
move *a13(PC_CENTERX),a0 ;x val
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not_2pb
move *a13(PC_CENTERXkit),a0 ;x val
#not_2pb
sll 16,a0 ;shift up past fractional
movi [6+NAMENT_PAGE-2,0],a1 ;y val
movk 1,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
move *a13(PC_OBJID),a5 ;OBJ ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
rets
#heading_imgs
.long INITIALS,BirthM,BirthD,Stats
.long INITIALS_B,BirthM_B,BirthD_B,Stats_B
#plaque_imgs
; .long InitBACK,MnthBACK,DayBACK
#*****************************************************************************
;a5 = object ID
SUBRP create_name_objs
movk 4,a2 ;3 x name objs + 1 month/day obj
move a13,a1
addi PC_NAM1OBJ,a1
#obj_loop
PUSH a0,a1,a2,a5
clr a0 ;x val
movi [400h | (213-7),0],a1 ;y val
movi OSGEMD_F,a2 ;* image
movi 100,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
; movi TYPTEXT|SUBPL1,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
PULL a0,a1,a2,a5
move a8,*a1+,L ;save * object
addi [21,0],a0
dsj a2,#obj_loop
clr a0
move a0,*a13(PC_CHARPOS)
rets
#*****************************************************************************
SUBRP next_menu
move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC
calla obj_del1c ;delete all objs with this ID
move *a13(PC_MENULEVEL),a0
inc a0
cmpi 3,a0
jrlt #ok
clr a0
#ok
move a0,*a13(PC_MENULEVEL)
calla create_menu
calla update_cursor
rets
#*****************************************************************************
; saves the selected menu item into playerX_data
SUBRP save_selection
move *a13(PC_DATADDR),a0,L ;start of player data
move *a13(PC_CHARPOS),a1
sll 4,a1 ;x 16 bits
add a0,a1
move *a13(PC_CURSPOS),a0
move a0,*a1 ;save char selected
rets
#*****************************************************************************
SUBRP check_delete
move *a13(PC_CURSPOS),a0
cmpi 27,a0 ;delete icon?
jrne #no_delete
move *a13(PC_CHARPOS),a0 ;no delete, but can't select
jrz #zippo ;delete icon either
move *a13(PC_DATADDR),a0,L ;start of player data
move *a13(PC_CHARPOS),a1
sll 4,a1 ;x 16 bits
add a0,a1
movi -1,a0
move a0,*a1 ;delete char
move *a13(PC_CHARPOS),a0
dec a0
move a0,*a13(PC_CHARPOS)
#zippo
setc
rets
#no_delete
clrc
rets
#*****************************************************************************
SUBRP inc_charpos
move *a13(PC_CHARPOS),a0
inc a0
move a0,*a13(PC_CHARPOS)
rets
#*****************************************************************************
SUBRP button_actions
move *a13(PC_PLAYNUM),a0
sll 5,a0
addi select_sounds,a0
move *a0,a0,L
calla snd_play1
move *a13(PC_CURSOBJ),a8,L
calla obj_on
; movi 0202h,a9 ;const flash colour (black)
movi 0d0dh,a9 ;const flash colour (white)
movi 0101h,a10 ;const colour
JSRP flash_cursor
move *a13(PC_CHARPOS),a0
sll 5,a0 ;x 32 bits
addi #actions,a0
move *a0,a0,L
call a0
RETP
#actions
.long #name0,#name1,#name2,#month,#day
#name0
calla check_delete
jrc #x1
calla inc_charpos
#x1
rets
#name1
calla check_delete
jrc #x2
calla inc_charpos
#x2
rets
#name2
calla check_delete
jrc #x3
calla inc_charpos
calla next_menu
calla hide_name_objs
clr a0
calla move_cursor
calla create_heading
#x3
rets
#month
calla inc_charpos
calla next_menu
calla hide_name_objs
clr a0
calla move_cursor
calla create_heading
rets
#day
move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC
calla obj_del1c ;delete all objs with this ID
move *a13(PC_MENULEVEL),a0
inc a0
move a0,*a13(PC_MENULEVEL)
calla hide_name_objs
; calla inc_charpos
; calla next_menu
calla create_heading
rets
#*****************************************************************************
* hide all name images off bottom of screen
SUBRP hide_name_objs
movi PC_NAM1OBJ,a3
add a13,a3
movk 4,a2 ;3 name objs to hide + month/day obj
#hide_loop
move *a3+,a1,L ;* object
move *a1(OYPOS),a0
ori 400h,a0 ;offscreen Y
move a0,*a1(OYPOS)
dsj a2,#hide_loop
rets
#*****************************************************************************
PSEL_START_DELAY equ 22 ;# frames before repeating
PSEL_REPEAT_DELAY equ 15 ;10 ;# frames delay til next repeat
JOY_UP equ 1
JOY_DOWN equ 2
JOY_LEFT equ 4
JOY_RIGHT equ 8
SUBRP team1_cursor
clr a0
move a0,*a13(PC_PLAYNUM)
#wait_for_players
SLEEPK 1
move @PSTATUS,a0
andi 011b,a0
jrz #wait_for_players
;player 1 and/or 2 active
move @exit_status,a0
ori 1<<0,a0
move a0,@exit_status ;exit
clr a0
move a0,*a13(PC_FLASHCOUNT)
movi player1_data+PR_PTEAM,a0
move a0,*a13(PC_DATADDR),L ;start of player data
movi TYPTEXT|SUBPL1,a0
move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC
movi arw4p,b0 ;palette to use
; movi arwbp,b0 ;palette to use
movi arrow1t,a2
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrnz #okz
move @team1_control,a0
jrz #okz
movi arrow2t,a2
#okz
movi [62h,0],a0 ;x val
movi [176h,0],a1 ;y val
move @gmqrtr,a3
jrnz #oka
movi [80,0],a1 ;y val
movk 20,a0 ;Phoenix
move a0,@team1
#oka
movi 20001,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJP2
move a8,*a13(PC_ARROWOBJ),L
movi SGMD8YEL,b0 ;palette to use
movi [250,0],a0 ;x val
move @gmqrtr,a1
jrz #okb
movi [1250,0],a0 ;x val
#okb
movi [80,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movk 1,a3 ;z pos
movi DMACAL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJP2
movi 0f0fh,a0
move a0,*a8(OCONST)
move a8,*a13(PC_CURSOBJ),L
movi team_menus,a0 ;menu start
move a0,*a13(PC_MENUBASE),L
clr a0 ;menu number
move a0,*a13(PC_MENULEVEL)
; calla create_menu
calla get_menu_data
#restart_cursor
clr a0
move a0,*a13(PC_FLASHCOUNT)
movk 12,a0
move @team2,a1
cmpi 20,a1 ;is other cursor on portland?
jrne #nope
clr a0 ;yes, so put cursor on Golden State
#nope
move a0,*a13(PC_CURSPOS) ;position
calla update_team_cursor1
clr a0
calla try_move_cursor1
#loop
calla update_team_cursor1
SLEEPK 7
movi PSEL_START_DELAY,a10 ;initial repeat delay
jruc #skippy
#repeat_delay
calla update_team_cursor1
SLEEPK 1
#skippy
move @team1_control,a0 ;player selecting team 1
jrn #no_team1
move @page_scrolling,a0
jrnz #loop ;scrolling on, so no input
move *a13(PC_FLASHCOUNT),a0 ;cursor flash count
inc a0
move a0,*a13(PC_FLASHCOUNT)
calla #toggle1
;Check for team switch powerup on team #1
move @team1_switch,a0
jrnz #switch
move @gmqrtr,a0
jrz #noswitch
calla tournament_on
jrc #noswitch
;Possibly switch teams at the half!
move @team1_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrz #tapz
move @team1_control,a0 ;player selecting team 1
calla get_stick_val_cur
cmpi 8,a0
jrnz #tapz
;Yes, trying to powerup team switch!
move @switch_1,a0
inc a0
move a0,@switch_1
cmpi 120,a0
jrlt #noswitch
move a0,@team1_switch
move @team1_control,a4 ;player selecting team 1
movi swapblu,a9
jruc #yesf0a
; jruc #noswitch
#tapz
clr a0
move a0,@switch_1
jruc #noswitch
#switch
move @team1_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrz #nodbc
move @dbnce1,a0
jrnz #noswitch
movk 1,a0
move a0,@dbnce1
SOUND1 bounce_snd
move @team1,a0
inc a0
move a0,@team1
cmpi 27,a0
jrlt #noswitch
clr a0
move a0,@team1
jruc #noswitch
#nodbc
clr a0
move a0,@dbnce1
#noswitch
;Check for roster powerup taps
calla tournament_on
jrc #notap
move @bigroster1,a0
jrnn #notap
move @team1_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrnz #tap
clr a0
move a0,@dbnce1
jruc #notap
#tap
;Check swirl on stick
move @team1_control,a0 ;player selecting team 1
calla get_stick_val_cur
move @tm1swrl,a1
or a0,a1
move a1,@tm1swrl
move @dbnce1,a0
jrnz #notap
movk 1,a0
move a0,@dbnce1
move @tm1taps,a0
inc a0
move a0,@tm1taps
cmpi 4,a0
jrlo #notap
cmpi 20,a0
jrlo #notfat
cmpi 1,a1
jrnz #notfat
jruc #notfat
move @fatality,a0
btst 0,a0
jrnz #notfat
movi fatalblu,a9
move @team1_control,a4 ;player selecting team 1
jruc #yesf
#notfat
cmpi >f,a1
jrnz #notap
;Yes! Powerup this particular roster
move @team1,a0
move a0,@bigroster1
move @team1_control,a4 ;player selecting team 1
;If no additional players are available, fatalitites enabled box appears
sll 4,a0
addi fatal_tbl,a0
move *a0,a0
jrz #reg
;Do bad decision speech call!
movi baddec_snd,a0
calla speech_playovrp
#reg
movi rosterblu,a9
jruc #yesf0a
#yesf
move @fatality,a0
ori 1,a0
move a0,@fatality
#yesf0a
sll 4,a4 ;x 16 bits
addi plaque_xs,a4
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_2p
addi 4*16,a4
#not_2p
move *a4,a10
sll 16,a10 ;x pos
clr a0
move a0,@HALT
CREATE0 fullgame_purchased
#notap
move @team1_control,a0 ;player selecting team 1
calla get_but_val_down_nt
jrnz #team_selected
move @force_selection,a0
jrnz #team_selected
move @team1_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrnz #nomov
move @team1_control,a0
calla get_stick_val_down
jrnz #movit
dsj a10,#repeat_delay
move @team1_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrnz #nomov
move @team1_control,a0 ;player selecting team 1
calla get_stick_val_cur
calla try_move_cursor1
#nomov
movi PSEL_REPEAT_DELAY,a10 ;repeat delay
jruc #repeat_delay
#movit
move @gmqrtr,a14
jrnz #nomov
calla try_move_cursor1
jruc #loop
plaque_xs
.word 15,104,209,298
.word 0,101-42,296-42,0
#team_selected
move @gmqrtr,a0
jrnz #skp
move @team1,a0
addi AUD_ATL,a0
calla AUD1 ;inc audit
move @team1,a0
calla call_team_name
#skp
SOUND1 select_snd1
move *a13(PC_CURSOBJ),a8,L
calla obj_on
move *a13(PC_ARROWOBJ),a8,L
calla obj_off
movi 0d0dh,a9 ;const flash colour
movi 0f0fh,a10 ;const colour
movi plate1_objs,a11
JSRP flash_cursorNplate
move @exit_status,a0
andni 1<<0,a0
move a0,@exit_status ;exit
#wait_loop2
SLEEPK 1
move @PSTATUS,a0
andi 011b,a0
jrnz #wait_loop2
#no_team1
move @exit_status,a0
andni 1<<0,a0
move a0,@exit_status ;exit
move *a13(PC_CURSOBJ),a8,L
calla obj_off
move *a13(PC_ARROWOBJ),a8,L
calla obj_off
move @gmqrtr,a14
cmpi 2,a14
jaz SUCIDE
#wait_loop
SLEEPK 1
move @PSTATUS,a0
andi 011b,a0
jrz #wait_loop
move @exit_status,a0
ori 1<<0,a0
move a0,@exit_status ;exit
jruc #restart_cursor
#toggle1
move @toggle1_time,a0
jrz #can
dec a0
move a0,@toggle1_time
jrnz #no_toggle
#can
calla get_team1_turbo ;check if players want to toggle heads
jrz #no_toggle
SOUND1 bounce_snd
; move @player_toggle1,a0
; xori 1,a0
; move a0,@player_toggle1
movk 6,a0 ;20
move a0,@toggle1_time
move @team1,a0
sll 4,a0
addi tm1set,a0
move *a0,a14
cmpi 5,a14
jrlo #ok
;MJT
;Bigroster if defeated all the teams
move @team1_control,a1
sll 5,a1
addi defeated,a1
move *a1,a1,L
move *a1,a1,L
cmpi 07ffffffh,a1
jrz #bonus
move @bigroster1,a1
jrn #cont
move @team1,a2
cmp a1,a2
jrnz #cont
#bonus
;Player has powered up his roster, and is sitting on the powered up team.
cmpi 19,a14
jrz #cont
#ok
inc a14
move a14,*a0
movi player_heads,a1
move @team1,a14
#lp cmpi 0,a14
jrz #out
addi 20*64,a1
dec a14
jruc #lp
#out
move *a0,a14
sll 6,a14
add a14,a1
move *a1,a1
jrnz #no_toggle
#cont clr a1
move a1,*a0
#no_toggle
rets
#*****************************************************************************
*
* INPUT: a0 = switch bits 0-3
*
*-----------------------------------------------------------------------------
SUBRP try_move_cursor1
move *a13(PC_CURSPOS),a1 ;save curs position
move a1,b1
move a0,b0 ;save joy switch vals
calla move_team_cursor ;move cursor
calla get_team_number
move @team2,a1 ;on cursor 2 ?
cmp a0,a1
; jrne #not_same
jruc #not_same
move b0,a0 ;restor joy switch vals
calla move_team_cursor ;move it again
calla get_team_number
move @team2,a1 ;on cursor 2 ?
cmp a0,a1
jrne #not_same
move b1,a0
move a0,*a13(PC_CURSPOS) ;restore position
rets
#not_same
move @gmqrtr,a14
jrnz #out
move @team1,a14
cmp a0,a14
jrz #out
move a0,@team1
move @bigroster1,a14
jrnn #out
clr a14
move a14,@tm1taps
move a14,@tm1swrl
#out
rets
#*****************************************************************************
SUBRP team2_cursor
movk 1,a0
move a0,*a13(PC_PLAYNUM)
#wait_for_players
SLEEPK 1
move @PSTATUS,a0
andi 01100b,a0
jrz #wait_for_players
;player 3 and/or 4 active
move @exit_status,a0
ori 1<<1,a0
move a0,@exit_status ;exit
clr a0
move a0,*a13(PC_FLASHCOUNT)
movi player2_data+PR_PTEAM,a0
move a0,*a13(PC_DATADDR),L ;start of player data
movi TYPTEXT|SUBPL2,a0
move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC
movi arw1p,b0 ;palette to use
; movi arw3p,b0 ;palette to use
movi arrow2t,a2
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrnz #okz
movi arrow3t,a2
move @team2_control,a0
cmpi 2,a0
jrz #okz
movi arrow4t,a2
#okz
movi [390-62h,0],a0 ;x val
movi [176h,0],a1 ;y val
move @gmqrtr,a3
jrnz #oka
movi [80,0],a1 ;y val
movk 17,a0 ;New York
move a0,@team2
#oka
movi 20001,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJP2
move a8,*a13(PC_ARROWOBJ),L
movi SGMD8YEL,b0 ;palette to use
movi [250,0],a0 ;x val
move @gmqrtr,a1
jrz #okb
movi [1250,0],a0 ;x val
#okb
movi [80,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movk 1,a3 ;z pos
movi DMACAL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJP2
movi 0c0ch,a0
move a0,*a8(OCONST)
move a8,*a13(PC_CURSOBJ),L
movi team_menus,a0 ;menu start
move a0,*a13(PC_MENUBASE),L
clr a0 ;menu number
move a0,*a13(PC_MENULEVEL)
; calla create_menu
calla get_menu_data
#restart_cursor
clr a0
move a0,*a13(PC_FLASHCOUNT)
movk 15,a0
move @team1,a1
cmpi 17,a1 ;is other cursor on New York?
jrne #nope
movk 3,a0 ;yes, so put cursor on Boston
#nope
move a0,*a13(PC_CURSPOS) ;position
calla update_team_cursor2
clr a0
calla try_move_cursor2
#loop
calla update_team_cursor2
SLEEP 7
movi PSEL_START_DELAY,a10 ;initial repeat delay
jruc #skippy
#repeat_delay
calla update_team_cursor2
SLEEPK 1
#skippy
move @team2_control,a0 ;player selecting team 2
jrn #no_team2
move @page_scrolling,a0
jrnz #loop ;scrolling on, so no input
move *a13(PC_FLASHCOUNT),a0 ;cursor flash count
inc a0
move a0,*a13(PC_FLASHCOUNT)
calla #toggle2
;Check for team switch powerup on team #2
move @team2_switch,a0
jrnz #switch
move @gmqrtr,a0
jrz #noswitch
.ref tournament_on
calla tournament_on
jrc #noswitch
;Possibly switch teams at the half!
move @team2_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrz #tapz
move @team2_control,a0 ;player selecting team 1
calla get_stick_val_cur
cmpi 8,a0
jrnz #tapz
;Yes, trying to powerup team switch!
move @switch_2,a0
inc a0
move a0,@switch_2
cmpi 120,a0
jrlt #noswitch
move a0,@team2_switch
move @team2_control,a4 ;player selecting team 1
movi swapred,a9
jruc #yesf1a
; jruc #noswitch
#tapz
clr a0
move a0,@switch_2
jruc #noswitch
#switch
move @team2_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrz #nodbc
move @dbnce2,a0
jrnz #noswitch
movk 1,a0
move a0,@dbnce2
SOUND1 bounce_snd
move @team2,a0
inc a0
move a0,@team2
cmpi 27,a0
jrlt #noswitch
clr a0
move a0,@team2
jruc #noswitch
#nodbc
clr a0
move a0,@dbnce2
#noswitch
;Check for roster powerup taps
calla tournament_on
jrc #notap
move @bigroster2,a0
jrnn #notap
move @team2_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrnz #tap
clr a0
move a0,@dbnce2
jruc #notap
#tap
;Check swirl on stick
move @team2_control,a0 ;player selecting team 1
calla get_stick_val_cur
move @tm2swrl,a1
or a0,a1
move a1,@tm2swrl
move @dbnce2,a0
jrnz #notap
movk 1,a0
move a0,@dbnce2
move @tm2taps,a0
inc a0
move a0,@tm2taps
cmpi 4,a0
jrlo #notap
cmpi 20,a0
jrlo #notfat
cmpi 1,a1
jrnz #notfat
move @fatality,a0
btst 1,a0
jrnz #notfat
movi fatalred,a9
move @team2_control,a4 ;player selecting team 1
jruc #yesf1
#notfat
cmpi >f,a1
jrnz #notap
;Yes! Powerup this particular roster
move @team2,a0
move a0,@bigroster2
move @team2_control,a4 ;player selecting team 1
;If no additional players are available, fatalitites enabled box appears
sll 4,a0
addi fatal_tbl,a0
move *a0,a0
jrz #reg ;Br=yes fatality
;Do bad decision speech call!
movi baddec_snd,a0
calla speech_playovrp
#reg
movi rosterred,a9
jruc #yesf1a
#yesf1
move @fatality,a0
ori 2,a0
move a0,@fatality
#yesf1a
sll 4,a4 ;x 16 bits
addi plaque_xs,a4
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_2p
addi 4*16,a4
#not_2p
move *a4,a10
sll 16,a10
;MJT ;x pos
clr a0
move a0,@HALT
CREATE0 fullgame_purchased
#notap
move @team2_control,a0 ;player selecting team 2
calla get_but_val_down_nt
jrnz #team_selected
move @force_selection,a0
jrnz #team_selected
move @team2_control,a0 ;player selecting team 2
calla get_steal_but_cur
jrnz #nomov
move @team2_control,a0
calla get_stick_val_down
jrnz #movit
dsj a10,#repeat_delay
move @team2_control,a0 ;player selecting team 1
calla get_steal_but_cur
jrnz #nomov
move @team2_control,a0 ;player selecting team 2
calla get_stick_val_cur
calla try_move_cursor2
#nomov
movi PSEL_REPEAT_DELAY,a10 ;repeat delay
jruc #repeat_delay
#movit
move @gmqrtr,a14
jrnz #nomov
calla try_move_cursor2
jruc #loop
#team_selected
move @gmqrtr,a0
jrnz #skp
move @team2,a0
addi AUD_ATL,a0
calla AUD1 ;inc audit
move @team2,a0
calla call_team_name
#skp
SOUND1 select_snd2
move *a13(PC_CURSOBJ),a8,L
calla obj_on
move *a13(PC_ARROWOBJ),a8,L
calla obj_off
movi 0d0dh,a9 ;const flash colour
movi 0c0ch,a10 ;const colour
movi plate2_objs,a11
JSRP flash_cursorNplate
move @exit_status,a0
andni 1<<1,a0
move a0,@exit_status ;exit
#wait_loop2
SLEEPK 1
move @PSTATUS,a0
andi 01100b,a0
jrnz #wait_loop2
#no_team2
move @exit_status,a0
andni 1<<1,a0
move a0,@exit_status ;exit
move *a13(PC_CURSOBJ),a8,L
calla obj_off
move *a13(PC_ARROWOBJ),a8,L
calla obj_off
move @gmqrtr,a14
cmpi 2,a14
jaz SUCIDE
#wait_loop
SLEEPK 1
move @PSTATUS,a0
andi 01100b,a0
jrz #wait_loop
move @exit_status,a0
ori 1<<1,a0
move a0,@exit_status ;exit
jruc #restart_cursor
#toggle2
move @toggle2_time,a0
jrz #can
dec a0
move a0,@toggle2_time
jrnz #no_toggle
#can
calla get_team2_turbo ;check if players want to toggle heads
jrz #no_toggle
SOUND1 bounce_snd
; move @player_toggle2,a0
; xori 1,a0
; move a0,@player_toggle2
movi 6,a0
move a0,@toggle2_time
move @team2,a0
sll 4,a0
addi tm2set,a0
move *a0,a14
cmpi 5,a14
jrlo #ok
;MJT
;Bigroster if defeated all the teams
move @team2_control,a1
sll 5,a1
addi defeated,a1
move *a1,a1,L
move *a1,a1,L
cmpi 07ffffffh,a1
jrz #bonus2
move @bigroster2,a1
jrn #cont
move @team2,a2
cmp a1,a2
jrnz #cont
#bonus2
;Player has powered up his roster, and is sitting on the powered up team.
cmpi 19,a14
jrz #cont
#ok
inc a14
move a14,*a0
movi player_heads,a1
move @team2,a14
#lp cmpi 0,a14
jrz #out
addi 20*64,a1
dec a14
jruc #lp
#out
move *a0,a14
sll 6,a14
add a14,a1
move *a1,a1
jrnz #no_toggle
#cont clr a1
move a1,*a0
#no_toggle
rets
#*****************************************************************************
*
* INPUT: a0 = switch bits 0-3
*
*-----------------------------------------------------------------------------
SUBRP try_move_cursor2
move *a13(PC_CURSPOS),a1 ;save curs position
move a1,b1
move a0,b0 ;save joy switch vals
calla move_team_cursor ;move cursor
calla get_team_number
move @team1,a1 ;on cursor 1 ?
cmp a0,a1
; jrne #not_same
; jruc #not_same
; move b0,a0 ;restor joy switch vals
; calla move_team_cursor ;move it again
; calla get_team_number
; move @team1,a1 ;on cursor 1 ?
; cmp a0,a1
; jrne #not_same
;
; move b1,a0
; move a0,*a13(PC_CURSPOS) ;restore position
; rets
;
;#not_same
move @gmqrtr,a14
jrnz #out
move @team2,a14
cmp a0,a14
jrz #out
move a0,@team2
move @bigroster2,a14
jrnn #out
clr a14
move a14,@tm2taps
move a14,@tm2swrl
#out
rets
#*****************************************************************************
*
* INPUT: a9 = const colour for flash
* a10 = const colour to revert to
*
*-----------------------------------------------------------------------------
SUBRP flash_cursor
movk 2,a11
#again
move a9,*a8(OCONST)
SLEEPK 3
move a10,*a8(OCONST)
SLEEPK 3
dsj a11,#again
RETP
#*****************************************************************************
*
* INPUT: a9 = const colour for flash
* a10 = const colour to revert to
* a11 = * plate objs
*
*-----------------------------------------------------------------------------
SUBRP flash_cursorNplate
movk 6,a0
#again
PUSHP a0
move *a11,a8,L
; movi 2f2fh,a2
movi 1919h,a2
move a2,*a8(OCONST)
calla const_on
move *a11(20h),a8,L
; movi 2f2fh,a2
movi 1919h,a2
move a2,*a8(OCONST)
calla const_on
move *a13(PC_CURSOBJ),a8,L
move a9,*a8(OCONST)
SLEEPK 3
move *a11,a8,L
calla const_off
move *a11(20h),a8,L
calla const_off
move *a13(PC_CURSOBJ),a8,L
move a10,*a8(OCONST)
SLEEPK 3
PULLP a0
dsj a0,#again
RETP
#*****************************************************************************
*
* convert team cursor position into actual team number
*
*-----------------------------------------------------------------------------
SUBRP get_team_number
move *a13(PC_CURSPOS),a0 ;position
sll 4,a0 ;x16 bits
addi team_convert,a0
move *a0,a0
rets
#*****************************************************************************
*
* process that displays PRESS START & INSERT COIN in player stat boxes
*
*-----------------------------------------------------------------------------
SUBR credit_messages
MESSAGE_Y equ 216<<16
movk 4,a4
movi message1_obj,a5
movi #msg_x,a6
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_kit
movi #msg_x2,a6
#not_kit
#init_loop
move *a6+,a0 ;x val
sll 16,a0
PUSH a4,a5,a6
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #skip_chk
cmpi 1,a4 ;no player 1
jreq #skip
cmpi 4,a4 ;no player 4
jreq #skip
#skip_chk
movi MESSAGE_Y,a1 ;y val
movi start3,a2 ;* image
movi 127,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
#skip
PULL a4,a5,a6
move a8,*a5+,L
dsj a4,#init_loop
#msg_loop
movk 1,a1 ;player 2
move @message2_obj,a8,L
calla update_credit_message
movk 2,a1 ;player 3
move @message3_obj,a8,L
calla update_credit_message
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrnz #2_plyrs
clr a1 ;player 1
move @message1_obj,a8,L
calla update_credit_message
movk 3,a1 ;player 4
move @message4_obj,a8,L
calla update_credit_message
#2_plyrs
SLEEPK 1
jruc #msg_loop
#msg_x .word 56,145,250,339 ;x val
#msg_x2 .word 0,101,295,0 ;x val
#*****************************************************************************
*
* INPUT: a8 = * message obj
* a1 = player bit number (0-3)
*-----------------------------------------------------------------------------
;prints either Insert Coin or Press Start based on # credits
SUBRP update_credit_message
move a1,a9
move @PSTATUS,a0
btst a1,a0
jrnz #player_active
move @in_team_select,a14
jrz #no
;Check to see if teammate is in game, if so, don't blink messages over
;attributes
XORK 1,a1
btst a1,a0
jrnz #player_active
#no
move @PCNT,a0 ;frame count
btst 5,a0
jrnz #objoff
movk ADJFREPL,a0 ;in free play?
calla GET_ADJ
jrnz #in_free
;Check to see if in INFREEPRICE GAMSTATE
move @winningteam,a0 ;0 or 1
jrnn #tmfree
move @GAMSTATE,a0
cmpi INFREEPRICE,a0
jrnz #no1
#tmfree
move @scores,a0
move @scores+16,a1
cmp a0,a1
jrlt #tm1
;Team 2 has won! Print PRESS START for these guys
cmpi 2,a9
jrge #in_free
jruc #no1
#tm1 cmpi 2,a9
jrlt #in_free
#no1
movi insert3,a10 ;Insert Coin message
movk ADJCSTRT,a0 ;get # credits to start
calla GET_ADJ
move a0,a9
calla CRED_P ;# credits returned in A0
cmp a0,a9
jrgt #no_credits
#in_free
movi start3,a10 ;Press Start message
#no_credits
calla obj_on
move a10,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
rets
#objoff
movk ADJFREPL,a0 ;in free play?
calla GET_ADJ
jrz #not_free
calla obj_on
movi freplay3,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
rets
#not_free
#player_active
calla obj_off
rets
#*****************************************************************************
MESSAGE_Y equ 216<<16
SUBRP player_cursor
move a10,*a13(PC_PLAYNUM)
#resart_cursor
movk 1,a0
move *a13(PC_PLAYNUM),a1
sll a1,a0
move @exit_status,a1
andn a0,a1
move a1,@exit_status ;exit
move *a13(PC_PLAYNUM),a10
move a10,a0
sll 5,a0 ;x 32 bits
addi #player_data,a0
move *a0,a1,L ;start address of player data
movi PR_INIT1,a2
add a1,a2
move a2,*a13(PC_DATADDR),L ;start of player data
movi -1,a0 ;init player data to -1
move a0,*a1(PR_COUNT)
move a0,*a1(PR_INIT1)
move a0,*a1(PR_INIT2)
move a0,*a1(PR_INIT3)
move a10,a0
sll 6,a0 ;x 64
addi #center_xs,a0
move *a0+,a1
move a1,*a13(PC_CENTERX) ;name center X
move *a0+,a1
move a1,*a13(PC_CENTERX2) ;stats box center X
move *a0,a1
move a1,*a13(PC_CENTERXkit) ;name center X (kit)
clr a0
move a0,*a13(PC_FLASHCOUNT)
move a10,a0
sll 4,a0 ;x 16 bits
addi #obj_ids,a0
move *a0,a0
move a0,*a13(PC_OBJID) ;OBJ ID's created by this PROC
movk 10h,a1 ;mask (bits to remove)
calla obj_delc
#wait_for_player
SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #wait_for_player
move @force_selection,a0
jrnz #youre_out
;player 1 active
move @can_enter_inits,a0 ;can player enter initials?
jrnz #enter_ok
DIE
#enter_ok
movk ADJTOURNEY,a0 ;Tournament mode?
calla GET_ADJ ;0-1
jrnz #skip ;Br=Not in tournament mode
;Turn on tournament mode - no secrets message
move *a13(PC_PLAYNUM),a8
.ref nosecrets_drw
CREATE0 nosecrets_drw
movk 1,a0
move *a13(PC_PLAYNUM),a1
sll a1,a0
move @exit_status,a1
or a0,a1
move a1,@exit_status ;no exit
SLEEP 90
#skip
movk 1,a0
move *a13(PC_PLAYNUM),a1
sll a1,a0
move @exit_status,a1
or a0,a1
move a1,@exit_status ;no exit
movi [250,0],a0 ;x val
movi [80,0],a1 ;y val
movi SGMD8_A,a2 ;* image
movk 1,a3 ;z pos
movi DMACAL,a4 ;DMA flags
move *a13(PC_OBJID),a5
ori 10h,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
movi 0101h,a0
move a0,*a8(OCONST)
move a8,*a13(PC_CURSOBJ),L
move *a13(PC_OBJID),a5
ori 10h,a5 ;ID
calla create_name_objs
move *a13(PC_PLAYNUM),a0
sll 5,a0 ;x 32 bits
addi #player_menus,a0
move @TWOPLAYERS,a1
jrz #not_2p
addi 4*32,a0
#not_2p
move *a0,a0,L ;menu start
move a0,*a13(PC_MENUBASE),L
clr a0 ;menu number
move a0,*a13(PC_MENULEVEL)
calla create_menu
calla create_heading
calla update_cursor
; calla update_statbox_images
SLEEPK 1
#loop
movi PSEL_START_DELAY,a10 ;initial repeat delay
#repeat_delay
SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #resart_cursor
move @force_selection,a0
jrnz #resart_cursor
move @page_scrolling,a0
jrnz #loop ;scrolling on, so no input
move *a13(PC_FLASHCOUNT),a0 ;cursor flash count
inc a0
move a0,*a13(PC_FLASHCOUNT)
calla save_selection
calla update_statbox_images
move *a13(PC_PLAYNUM),a0
calla get_but_val_down
jrz #no_action
JSRP button_actions
move *a13(PC_MENULEVEL),a0
cmpi 3,a0
jreq #done
#no_action
move *a13(PC_PLAYNUM),a0
calla get_stick_val_down
jrnz #movit
calla update_cursor
dsj a10,#repeat_delay
move *a13(PC_PLAYNUM),a0
calla get_stick_val_cur
calla move_cursor
calla update_cursor
movi PSEL_REPEAT_DELAY,a10 ;repeat delay
jruc #repeat_delay
#movit
calla move_cursor
calla update_cursor
jruc #loop
#done
move *a13(PC_CURSOBJ),a0,L ;delete cursor
calla DELOBJ
SLEEPK 1
move *a13(PC_PLAYNUM),a0
sll 5,a0 ;x 32 bits
addi #player_data,a0
move *a0,a0,L ;start address of player data
move a0,*a13(PC_DATADDR),L ;start of player data
calla get_player_record
move *a13(PC_DATADDR),a0,L ;start of player data
move *a0(PR_RANK),a0
cmpi 10,a0
jrgt #not_topten
move *a13(PC_PLAYNUM),a10
move a10,a0
sll 5,a0 ;x 32 bits
addi topten_imgs,a0
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not_2pxz
addi 4*32,a0
#not_2pxz
move *a0,a9,L
CREATE0 topten_player
#not_topten
move *a13(PC_DATADDR),a3,L ;start of player data
move *a13(PC_PLAYNUM),a10
calla check_initials
calla print_player_stats
move *a13(PC_DATADDR),a3,L ;start of player data
move *a3(PR_INIT1),a0
jrnz #not_AAA_JAN_1
move *a3(PR_INIT2),a0
jrnz #not_AAA_JAN_1
move *a3(PR_INIT3),a0
jrnz #not_AAA_JAN_1
move *a3(PR_MONTH),a0
jrnz #not_AAA_JAN_1
move *a3(PR_DAY),a0
jrnz #not_AAA_JAN_1
;is AAA JAN 1 ;so erase his ass
movi -1,a0
move a0,*a3(PR_INIT1)
move a0,*a3(PR_INIT2)
move a0,*a3(PR_INIT3)
clr a0
move a0,*a3(PR_COUNT)
#not_AAA_JAN_1
movk 30,a10
#dly1
SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #resart_cursor
move @force_selection,a0
jrnz #youre_out
dsj a10,#dly1
movi 7*60,a10
#wait SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #resart_cursor
move @force_selection,a0
jrnz #youre_out
move *a13(PC_PLAYNUM),a0
calla get_but_val_cur
jrnz #exit1
dec a10
jrnz #wait
jruc #ex2
bounce_snd .word >fc80,10,>8129,0 ;Ball bounce
#exit1
;Do a snd when whacking through
SOUND1 bounce_snd
#ex2
move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC
calla obj_del1c ;delete all objs with this ID
move *a13(PC_DATADDR),a1,L ;start of player data
move *a1(PR_NUMDEF),a0 ;number teams defeated
jrz #no_wins
cmpi 27,a0
jreq #defeated_all
;;; calla create_heading
calla print_teams_defeated
movk 30,a10
#dly2
SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #resart_cursor
move @force_selection,a0
jrnz #youre_out
dsj a10,#dly2
movi 7*60,a10
#wait2 SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #resart_cursor
move @force_selection,a0
jrnz #youre_out
move *a13(PC_PLAYNUM),a0
calla get_but_val_cur
jrnz #exit2a
dec a10
jrnz #wait2
jruc #exit2
#exit2a
SOUND1 bounce_snd
#exit2
move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC
calla obj_del1c ;delete all objs with this ID
#defeated_all
#no_wins
movk 10,a10
#dly3
SLEEPK 1
move *a13(PC_PLAYNUM),a1
move @PSTATUS,a0
btst a1,a0
jrz #resart_cursor
move @force_selection,a0
jrnz #youre_out
dsj a10,#dly3
#youre_out
move *a13(PC_OBJID),a0 ;OBJ ID's created by this PROC
calla obj_del1c ;delete all objs with this ID
movk 1,a0
move *a13(PC_PLAYNUM),a1
sll a1,a0
move @exit_status,a1
andn a0,a1
move a1,@exit_status ;exit
DIE
topten_imgs
.long TopTenorg
.long TopTengrn
.long TopTengld
.long TopTenred
;For kit
.long TopTengrn
.long TopTenorg
.long TopTenred
.long TopTengld
#obj_ids
.word TYPTEXT|SUBPL1
.word TYPTEXT|SUBPL2
.word TYPTEXT|SUBPL3
.word TYPTEXT|SUBPL4
#center_xs
.word 52,56, 0,0 ;player 1
.word 149,145,101,0 ;player 2
.word 246,250,295,0 ;player 3
.word 343,339,0,0 ;player 4
; .word 52,57 ;player 1
; .word 148,145 ;player 2
; .word 245,251 ;player 3
; .word 342,339 ;player 4
#player_data
.long player1_data,player2_data
.long player3_data,player4_data
#player_menus
.long player1_menus,player2_menus
.long player3_menus,player4_menus
.long player1k_menus,player1k_menus
.long player2k_menus,player2k_menus
#*****************************************************************************
joy_moves
.long #zip ;0
.long #up ;1
.long #down ;2
.long #zip ;3
.long #left ;4
.long #up_left ;5
.long #down_left ;6
.long #zip ;7
.long #right ;8
.long #up_right ;9
.long #down_right ;10
.long #zip ;11
.long #zip ;12
.long #zip ;13
.long #zip ;14
.long #zip ;15
*******************
#zip ;0
rets
defeated
.long player1_data+PR_TEAMSDEF
.long player2_data+PR_TEAMSDEF
.long player3_data+PR_TEAMSDEF
.long player4_data+PR_TEAMSDEF
*******************
#up ;1
move *a13(PC_TABWIDTH),a1 ;table width
move *a13(PC_CURSPOS),a0
sub a1,a0
jrlt #no_up
move a0,*a13(PC_CURSPOS)
clr a0
move a0,*a13(PC_FLASHCOUNT) ;cursor flash count
move *a13(PC_PLAYNUM),a0
sll 5,a0
addi cursor_sounds,a0
move *a0,a0,L
calla snd_play1
#no_up
rets
*******************
#down ;2
move *a13(PC_TABWIDTH),a1 ;table width
move *a13(PC_CURSPOS),a10
add a1,a10
move *a13(PC_TABSIZE),a1 ;table size
cmp a10,a1
jrle #no_down
move a10,*a13(PC_CURSPOS)
calla get_table_address
move *a1+,a0 ;char under cursor
cmpi 123,a0
jrnz #not_blankd
;
; jrnn #not_blankd
;MJT
move @team1_control,a0
move *a13(PC_PLAYNUM),a1
jrz #lft
move @team2_control,a0
#lft
sll 5,a0
addi defeated,a0
move *a0,a0,L
move *a0,a0,L
cmpi 07ffffffh,a0
jrz #not_blankd
move *a13(PC_TABWIDTH),a1 ;table width
sub a1,a10 ;can't move down
#not_blankd
move a10,*a13(PC_CURSPOS)
clr a0
move a0,*a13(PC_FLASHCOUNT) ;cursor flash count
move *a13(PC_PLAYNUM),a0
sll 5,a0
addi cursor_sounds,a0
move *a0,a0,L
calla snd_play1
#no_down
rets
*******************
#left ;4
move *a13(PC_CURSPOS),a10
jrz #no_left
dec a10
move a10,*a13(PC_CURSPOS)
calla get_table_address
move *a1+,a0 ;char under cursor
cmpi 123,a0
jrnz #not_blankl
; jrnn #not_blankl
;MJT
move @team1_control,a0
move *a13(PC_PLAYNUM),a1
jrz #lft1
move @team2_control,a0
#lft1
sll 5,a0
addi defeated,a0
move *a0,a0,L
move *a0,a0,L
cmpi 07ffffffh,a0
jrz #not_blankl
dec a10 ;skip to left of blank position
#not_blankl
move a10,*a13(PC_CURSPOS)
clr a0
move a0,*a13(PC_FLASHCOUNT) ;cursor flash count
move *a13(PC_PLAYNUM),a0
sll 5,a0
addi cursor_sounds,a0
move *a0,a0,L
calla snd_play1
#no_left
rets
*******************
#up_left ;5
calla #up
calla #left
rets
*******************
#down_left ;6
calla #down
calla #left
rets
*******************
#right ;8
move *a13(PC_CURSPOS),a10
inc a10
move *a13(PC_TABSIZE),a1 ;table size
cmp a10,a1
jrle #no_right
move a10,*a13(PC_CURSPOS)
calla get_table_address
move *a1+,a0 ;char under cursor
cmpi 123,a0
jrnz #not_blankr
; jrnn #not_blankr
;MJT
move @team1_control,a0
move *a13(PC_PLAYNUM),a1
jrz #lft2
move @team2_control,a0
#lft2
sll 5,a0
addi defeated,a0
move *a0,a0,L
move *a0,a0,L
cmpi 07ffffffh,a0
jrz #not_blankr
inc a10 ;skip to right of blank position
#not_blankr
move a10,*a13(PC_CURSPOS)
clr a0
move a0,*a13(PC_FLASHCOUNT) ;cursor flash count
move *a13(PC_PLAYNUM),a0
sll 5,a0
addi cursor_sounds,a0
move *a0,a0,L
calla snd_play1
#no_right
rets
*******************
#up_right ;9
calla #up
calla #right
rets
*******************
#down_right ;10
calla #down
calla #right
rets
#*****************************************************************************
; a8 = * alpha table
; a9 = palette number (indexed into #palettes table)
;a10 = [y,x] start pos
;a11 = OBJECT ID
SUBRP display_alpha_table
PUSH a6,a7
sll 5,a9 ;x 32 bits
addi #palettes,a9
move *a9,a0,L
calla pal_getf
move a0,a9
#next_alpha
move *a8+,a0
jrn #finished
sll 5,a0 ;x 32 bits
addi alpha_table,a0
move *a0,a2,L ;* image
cmpi C_SAN,a2
jrnz #no
LOCKUP
#no
move *a8+,a0
movx a10,a1 ;x start pos
add a1,a0
sll 16,a0 ;x val [int,frac]
move *a8+,a1
sll 16,a1 ;y val [ing,frac]
add a10,a1 ;y start pos
andi [0ffffh,0],a1 ;clear fractional
movk 8,a3 ;z pos
movi DMAWNZ,a4 ;DMA flags
move a11,a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
PUSH a8,a11
calla BEGINOBJ2
move a9,*a8(OPAL),L ;Set palette & constant
PULL a8,a11
jruc #next_alpha
#finished
PULL a6,a7
rets
#palettes
; .long ORANGPAL,GREENPAL,GOLD,REDPAL
.long BLUE,BLUE,REDPAL,REDPAL
.long 0,0,0,0
.long SGMD8YEL,SGMD8VIO ;left & right city columns
#*****************************************************************************
SUBR credits
move @gmqrtr,a0
cmpi 2,a0
jrz #skp
clr a0 ;y offset
calla create_credits
#skp
calla create_credit_timers
#credit_loop
calla update_credits
calla update_credit_timers
SLEEPK 1
jruc #credit_loop
#*****************************************************************************
SUBR credits2
movi [7,0],a0 ;y offset
calla create_credits
#credit_loop
calla update_credits
SLEEPK 1
jruc #credit_loop
#*****************************************************************************
SUBR credits3
clr a0 ;y offset
calla create_credits
#credit_loop
calla update_credits
SLEEPK 1
jruc #credit_loop
#*****************************************************************************
.asg 240<<16,CREDIT_Y
.asg 209<<16,CREDIT_X
SUBR create_credits
PUSH a0
movi CREDIT_Y-1,a1 ;y val
add a0,a1
movi CREDIT_X,a0 ;x val
movi font60,a2 ;* image
movi 20000-1,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@credit1_obj,L
PULL a0
PUSH a0
movi CREDIT_Y-1,a1 ;y val
add a0,a1
movi CREDIT_X+(6<<16),a0 ;x val
movi font60,a2 ;* image
movi 20000-1,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@credit2_obj,L
movi credit,a2 ;* image
movk ADJFREPL,a0
calla GET_ADJ
jrz #not_free
move @credit1_obj,a8,L
calla obj_off
move @credit2_obj,a8,L
calla obj_off
movi freeply,a2 ;* image
#not_free
PULL a0
movi CREDIT_Y-1,a1 ;y val
add a0,a1
movi CREDIT_X-(31<<16),a0 ;x val
movi 20000-1,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
move a8,@credit3_obj,L
rets
#*****************************************************************************
SUBRP update_credits
movk ADJFREPL,a0
calla GET_ADJ
jrz #not_free
;in free play
move @credit1_obj,a8,L
calla obj_off
move @credit2_obj,a8,L
calla obj_off
move @credit3_obj,a8,L
movi freeply,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
rets
#not_free
move @credit3_obj,a8,L
movi credit,a0 ;* image
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
calla CRED_P ;# credits returned in A0
calla BINBCD
PUSH a0
andi 0f0h,a0
jrnz #ok
move @credit1_obj,a8,L
calla obj_off
jruc #cont
#ok
;;; srl 4,a0 ;/16
;;; sll 5,a0 ;*32 bits
sll 1,a0 ;*32/16 = *2
addi #numbers,a0
move *a0,a1,L ;* image
move @credit1_obj,a8,L
calla obj_on
move a1,a0
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
#cont
PULL a0
andi 0fh,a0
sll 5,a0 ;*32 bits
addi #numbers,a0
move *a0,a1,L ;* image
move @credit2_obj,a8,L
calla obj_on
move a1,a0
move *a8(OCTRL),a1 ;DMA flags
calla obj_aniq ;change object image
rets
#numbers
.long font60,font61,font62,font63,font64
.long font65,font66,font67,font68,font69
#*****************************************************************************
*
* create the 4 credits timers displayed in the player stats box
*
*-----------------------------------------------------------------------------
SUBRP create_credit_timers
movk 1,a5 ;player number 2
calla create_cr_timer
movi credtime2_obj,a0 ;* obj
move a8,*a0,L
movk 2,a5 ;player number 3
calla create_cr_timer
movi credtime3_obj,a0 ;* obj
move a8,*a0,L
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrnz #2_plyrs
clr a5 ;player number 1
calla create_cr_timer
movi credtime1_obj,a0 ;* obj
move a8,*a0,L
movk 3,a5 ;player number 4
calla create_cr_timer
movi credtime4_obj,a0 ;* obj
move a8,*a0,L
#2_plyrs
.ref join_cyc
calla join_cyc
rets
#*****************************************************************************
*
* INPUT: a5 = player number (0-3)
*-----------------------------------------------------------------------------
.asg 235<<16,CREDIT_Y
create_cr_timer
sll 5,a5 ;x 32 bits
movi #credit_balls,a2
movi #credit_positions,a0
move @TWOPLAYERS,a1 ;0 = NO, 1 = YES 2 players
jrz #not_2p
movi #credit_positions2,a0
#not_2p
add a5,a2
move *a2,a2,L
add a0,a5
move *a5,a5,L ;get start x pos
move a5,a0 ;x val
movi CREDIT_Y,a1 ;y val
; move @gmqrtr,a3
; cmpi 2,a3
; jrnz #skp
; movi CREDIT_Y+256*2,a1 ;y val
;#skp
movi 127,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
rets
#credit_balls
.long t0000 ;player 1
.long t0000 ;player 2
.long tx000 ;player 3
.long tx000 ;player 4
#credit_positions
.long 56<<16 ;player 1
.long 145<<16 ;player 2
.long 251<<16 ;player 3
.long 339<<16 ;player 4
#credit_positions2
.long 0 ;player 1
.long 101<<16 ;player 2
.long 296<<16 ;player 3
.long 0 ;player 4
#*****************************************************************************
*
* update the 4 credits timers displayed in the player stats box
*
*-----------------------------------------------------------------------------
SUBRP update_credit_timers
movk 1,a10 ;player 2
movi credtime2_obj,a6 ;* start of obj vars
move @qtr_purchased+10h,a7
calla update_cr_timer
movk 2,a10 ;player 3
movi credtime3_obj,a6 ;* start of obj vars
move @qtr_purchased+20h,a7
calla update_cr_timer
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrnz #2_plyrs
clr a10 ;player 1
movi credtime1_obj,a6 ;* start of obj vars
move @qtr_purchased,a7
calla update_cr_timer
movk 3,a10 ;player 4
movi credtime4_obj,a6 ;* start of obj vars
move @qtr_purchased+30h,a7
calla update_cr_timer
#2_plyrs
rets
#*****************************************************************************
*
* INPUT: a10 = player number (0-3)
* a6 = * start of obj vars
* a7 = # quarters credit
*-----------------------------------------------------------------------------
SUBRP update_cr_timer
move a7,a7
jrnz #not_zip
movi txxxx,a0
jruc #setit
#not_zip
move @gmqrtr,a1
cmpi 4,a1
jrlt #ok
movi txxx1,a0
jruc #setit
#ok
sll 2,a1 ;x 4
add a7,a1
andi 15,a1
sll 5,a1 ;x 32 bits
addi tballs,a1
move *a1,a0,L ;* image
#setit
move *a6,a8,L ;image *
move *a8(OCTRL),a1
calla obj_aniq
rets
tballs
.long 0
.long t1000,t1100,t1110,t1111
.long tx100,tx110,tx111,txxxx
.long txx10,txx11,txxxx,txxxx
.long txxx1,txxxx,txxxx,txxxx
.long tx000,txx00,txxx0
.long tx100,tx110,tx111
.long txx10,txx11,txxx1
.long t0000
leds .long S_LED_0,S_LED_1,S_LED_2,S_LED_3,S_LED_4
.long S_LED_5,S_LED_6,S_LED_7,S_LED_8,S_LED_9
#*****************************************************************************
*
* INPUT: a8 = * object
*-----------------------------------------------------------------------------
SUBR obj_on
move *a8(OYPOS),a0
andni 400h,a0
move a0,*a8(OYPOS)
rets
#*****************************************************************************
*
* INPUT: a8 = * object
*-----------------------------------------------------------------------------
SUBR obj_off
move *a8(OYPOS),a0
ori 400h,a0
move a0,*a8(OYPOS)
rets
******************************************************************************
*
* INPUT: a10 = scroll increment << 16
*-----------------------------------------------------------------------------
*
* scrolls screen up or down 1 page (256 pixels)
*
*-----------------------------------------------------------------------------
SUBR scroll_page
; clr a0
; clr a1
; movi 200,a2
; calla KOP_ALL
calla pal_clean
movk 1,a0
move a0,@page_scrolling ;scrolling
movi scroll_snd,a0
calla snd_play1
movi 256/SCROLL_SPEED,a9
#scroll_loop
SLEEPK 1
move @WORLDTLY,a0,L
add a10,a0 ;+/- SCROLL_SPEED
move a0,@WORLDTLY,L
calla BGND_UD1
dsj a9,#scroll_loop
SLEEPK 2
clr a0
move a0,@page_scrolling ;not scrolling
RETP
#*****************************************************************************
*
* deletes background objects off bottom of screen
*
*-----------------------------------------------------------------------------
SUBRP del_offscreen_bobjs
move @WORLDTLY,a8,L ;TOP LEFT Y SCREEN COORD (WORLD)
srl 16,a8
; addi 100,a8 ;254,a8
addi 254,a8
movi BAKLST,a10
jruc #start
#next_bobj
move *a10(OYPOS),a0
cmp a8,a0 ;a0-a8
jrlt #not_off
move a10,a0
calla DELBOBJ
move a9,a10 ;back to prev obj
#not_off
#start
move a10,a9 ;prev obj
move *a10,a10,L
jrnz #next_bobj
rets
#*****************************************************************************
SUBR monitor_fullgame
clr a0
move a0,@game_purchased ;
#loopit
clr a4
#next
move @PSTATUS,a0
btst a4,a0
jrz #no_player
move @game_purchased,a0
btst a4,a0
jrnz #purchased
;2/10/93
move a4,a1 ;plyr number
sll 4,a1 ;x 16 bits
addi qtr_purchased,a1
move *a1,a0
cmpi 4,a0
jrz #fullgm
movi ADJFULLG,a0
calla GET_ADJ
move a0,a1
move a4,a0
sll 5,a0 ;x 32 bits
addi #times,a0
move *a0,a0,L ;* player timer
move *a0,a0 ;player credits purchased
cmp a1,a0
jrlt #no_purchase
#fullgm
move a4,a0
movk 1,a1
sll a0,a1
move @game_purchased,a0 ;set purchased bit
or a1,a0 ;for player
move a0,@game_purchased
move a4,a1 ;plyr number
sll 4,a1 ;x 16 bits
addi qtr_purchased,a1
movk 4,a0
move a0,*a1 ;4 quarters purchased
move a4,a0
sll 5,a0
addi #pdta_t,a0
move *a0,a0,L
movi 3500,a1
move a1,*a0 ;Stuff 2500 into plyrs ply_time
move a4,a0
sll 5,a0 ;x 32 bits
addi #images,a0
move @TWOPLAYERS,a14 ;0 = NO, 1 = YES 2 players
jrz #not_2p1
addi 4*32,a0
#not_2p1
move *a0,a9,L ;* image
PUSH a4
sll 4,a4 ;x 16 bits
addi #plaque_xs,a4
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_2p
addi 4*16,a4
#not_2p
move *a4,a10
sll 16,a10 ;x pos
CREATE0 fullgame_purchased
movi AUD_PURCHASED,a0 ;inc full games
calla AUD1 ;purchased audit
PULL a4
#no_player
#purchased
#no_purchase
inc a4
cmpi 4,a4
jrlt #next
SLEEPK 2
jruc #loopit
#images
.long FulGameorg,FulGamegrn
.long FulGamegld,FulGamered
.long FulGameorg,FulGameorg
.long FulGamered,FulGamered
#plaque_xs
.word 15,104,209,298
.word 0,101-42,296-42,0
#times
.long P1DATA+crds_paid
.long P2DATA+crds_paid
.long P3DATA+crds_paid
.long P4DATA+crds_paid
#pdta_t
.long P1DATA+ply_time
.long P2DATA+ply_time
.long P3DATA+ply_time
.long P4DATA+ply_time
#*****************************************************************************
.asg 212-14+1,FULLGAME_Y
SUBRP fullgame_purchased
SLEEPK 1
move @HALT,a0
jrnz fullgame_purchased
move a10,a0 ;x val
movi [FULLGAME_Y-(16*16),0],a1 ;y val
move a9,a2 ;* image
movi 30000,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
movi [16,0],a7 ;y vel
calla BEGINOBJ2
movi 0808h,a0
move a0,*a8(OCONST)
#waitf
SLEEP 1
move *a8(OYPOS),a0
cmpi FULLGAME_Y,a0
jrlt #waitf
movi FULLGAME_Y,a0
move a0,*a8(OYPOS)
clr a0
move a0,*a8(OYVEL),L
SOUND1 fullgame_snd1
movk 3,a10
#again
calla const_on
SLEEPK 3
calla const_off
SLEEPK 3
dsj a10,#again
SLEEP 2*60
SOUND1 select_snd1
movk 3,a10
#again2
calla const_on
SLEEPK 3
calla const_off
SLEEPK 3
dsj a10,#again2
calla DELOBJA8
DIE
const_on
move *a8(OCTRL),a0
andni 01111b,a0
ori M_CONST,a0 ;Replace all with constant
move a0,*a8(OCTRL)
rets
const_off
move *a8(OCTRL),a0
andni 01111b,a0
ori M_WRNONZ,a0
move a0,*a8(OCTRL)
rets
#*****************************************************************************
;a9 = * image
;a10 = player number (0-3)
.asg 212-14+1,TOPTEN_Y
SUBRP topten_player
SLEEPK 1
move @HALT,a0
; jrnz fullgame_purchased
jrnz topten_player
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not_2p
addk 4,a10
#not_2p
sll 4,a10 ;x 16
addi #topten_xs,a10
move *a10,a0 ;x val
sll 16,a0
movi [TOPTEN_Y,0],a1 ;y val
move a9,a2 ;* image
movi 30000-1,a3 ;z pos
movi DMAWNZ|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
calla BEGINOBJ2
movi 0808h,a0
move a0,*a8(OCONST)
SLEEPK 1
SOUND1 select_snd1
movk 3,a10
#again
calla const_on
SLEEPK 3
calla const_off
SLEEPK 3
dsj a10,#again
SLEEP 1*60
SOUND1 select_snd1
movk 3,a10
#again2
calla const_on
SLEEPK 3
calla const_off
SLEEPK 3
dsj a10,#again2
calla DELOBJA8
DIE
#topten_xs
.word 15,104,209,298
.word 0,101-42,296-42,0
#*****************************************************************************
SUBR monitor_buyins
move @PSTATUS,a10
#again
SLEEPK 1
move a10,a1
move @PSTATUS,a10
move a10,a0
xor a0,a1 ;bits changed
and a0,a1 ;down transitions only
jrz #again
jruc #again
#*****************************************************************************
*
* sets which player is controlling each team
*
*-----------------------------------------------------------------------------
SUBR team_control
#again
move @team1_control,a0
jrn #no_control1
move @PSTATUS,a1
btst a0,a1
jrnz #team1_ok
#no_control1
move @PSTATUS,a0
btst 0,a0
jrz #no_player1
clr a0
move a0,@team1_control
jruc #team1_ok
#no_player1
move @PSTATUS,a0
btst 1,a0
jrz #no_player2
movk 1,a0
move a0,@team1_control
jruc #team1_ok
#no_player2
movi -1,a0
move a0,@team1_control
move a0,@team1
#team1_ok
move @team2_control,a0
jrn #no_control2
move @PSTATUS,a1
btst a0,a1
jrnz #team2_ok
#no_control2
move @PSTATUS,a0
btst 2,a0
jrz #no_player3
movk 2,a0
move a0,@team2_control
jruc #team2_ok
#no_player3
move @PSTATUS,a0
btst 3,a0
jrz #no_player4
movk 3,a0
move a0,@team2_control
jruc #team2_ok
#no_player4
movi -1,a0
move a0,@team2_control
move a0,@team2
#team2_ok
SLEEP 1
jruc #again
#*****************************************************************************
*
* find plate objects on team select screen for flashing
*
*-----------------------------------------------------------------------------
.asg 67,PLATE1Z
.asg 68,PLATE2Z
SUBRP find_plates
movi plate1_objs,a4 ;plate behind heads & logo
movi plate2_objs,a5 ;
movi BAKLST,a10
jruc #start
#next_bobj
move *a10(OZPOS),a0
cmpi PLATE1Z,a0
jreq #is_plate1
cmpi PLATE2Z,a0
jreq #is_plate2
#start
move *a10,a10,L
jrnz #next_bobj
rets
#is_plate1
move a10,*a4+,L
jruc #start
#is_plate2
move a10,*a5+,L
jruc #start
******************************************************************************
.asg 000,O1
.asg 084,O2
.asg 162,O3
.asg 233,O4
.asg 12,Y
.asg 96,C
.asg 151,C2
city_table_left
.word 2,2 ;width, size
;img, xoff, yoff
.word C2+0,O1,Y*0,C2+1,O2,Y*0 ;0-3
.word -1
; .word 2,2*7 ;width, size
; ;img, xoff, yoff
; .word C+14,O1,Y*0,C+21,O2,Y*0
; .word C+15,O1,Y*1,C+22,O2,Y*1
; .word C+16,O1,Y*2,C+23,O2,Y*2
; .word C+17,O1,Y*3,C+24,O2,Y*3
; .word C+18,O1,Y*4,C+25,O2,Y*4
; .word C+19,O1,Y*5,C+26,O2,Y*5
; .word C+20,O1,Y*6,-1,0,0
; .word -1
city_table_right
.word 2,2 ;width, size
; ;img, xoff, yoff
.word C2+2,O3,000,C2+03,O4,000
.word -1
; .word 2,2*7 ;width, size
; ;img, xoff, yoff
; .word C+0,O3,000,C+07,O4,000
; .word C+1,O3,Y*1,C+08,O4,Y*1
; .word C+2,O3,Y*2,C+09,O4,Y*2
; .word C+3,O3,Y*3,C+10,O4,Y*3
; .word C+4,O3,Y*4,C+11,O4,Y*4
; .word C+5,O3,Y*5,C+12,O4,Y*5
; .word C+6,O3,Y*6,C+13,O4,Y*6
; .word -1
city_table
.word 4,4*7 ;width, size
.word C+14,O1,Y*0,C+21,O2,Y*0,C+0,O3,000,C+07,O4,000 ;0-3
.word C+15,O1,Y*1,C+22,O2,Y*1,C+1,O3,Y*1,C+08,O4,Y*1 ;4-7
.word C+16,O1,Y*2,C+23,O2,Y*2,C+2,O3,Y*2,C+09,O4,Y*2 ;8-11
.word C+17,O1,Y*3,C+24,O2,Y*3,C+3,O3,Y*3,C+10,O4,Y*3 ;12-15
.word C+18,O1,Y*4,C+25,O2,Y*4,C+4,O3,Y*4,C+11,O4,Y*4 ;16-19
.word C+19,O1,Y*5,C+26,O2,Y*5,C+5,O3,Y*5,C+12,O4,Y*5 ;20-23
.word C+20,O1,Y*6,C+27,O2,Y*6,C+6,O3,Y*6,C+13,O4,Y*6 ;24-26
; .word C+20,O1,Y*6,-1,0,0, C+6,O3,Y*6,C+13,O4,Y*6 ;24-26
.word -1
******************************************************************************
.asg 21,X
.asg 23,Y ;22
name_table
.word 4,4*7 ;width, size
;img, xoff, yoff
.word 00,0,000, 01,X*1,000, 02,X*2,000, 03,X*3,000 ;abcd
.word 04,0,Y*1, 05,X*1,Y*1, 06,X*2,Y*1, 07,X*3,Y*1 ;efgh
.word 08,0+3,Y*2, 09,X*1,Y*2, 10,X*2,Y*2, 11,X*3,Y*2 ;ijkl
.word 12,0-2,Y*3, 13,X*1,Y*3, 14,X*2,Y*3, 15,X*3,Y*3 ;mnop
.word 16,0,Y*4, 17,X*1,Y*4, 18,X*2,Y*4, 19,X*3,Y*4 ;qrst
.word 20,0,Y*5, 21,X*1,Y*5, 22,X*2-3,Y*5, 23,X*3,Y*5 ;uvwx
.word 24,0,Y*6, 25,X*1,Y*6, 28,X*2-2,Y*6, 27,X*3,Y*6 ;yz <
.word -1
******************************************************************************
.asg 30,X
.asg 23,Y ;22
name_table2
.word 4,4*7 ;width, size
;img, xoff, yoff
.word 00,0,000, 01,X*1,000, 02,X*2,000, 03,X*3,000 ;abcd
.word 04,0,Y*1, 05,X*1,Y*1, 06,X*2,Y*1, 07,X*3,Y*1 ;efgh
.word 08,0+3,Y*2, 09,X*1,Y*2, 10,X*2,Y*2, 11,X*3,Y*2 ;ijkl
.word 12,0-2,Y*3, 13,X*1,Y*3, 14,X*2,Y*3, 15,X*3,Y*3 ;mnop
.word 16,0,Y*4, 17,X*1,Y*4, 18,X*2,Y*4, 19,X*3,Y*4 ;qrst
.word 20,0,Y*5, 21,X*1,Y*5, 22,X*2-3,Y*5, 23,X*3,Y*5 ;uvwx
.word 24,0,Y*6, 25,X*1,Y*6, 28,X*2-2,Y*6, 27,X*3,Y*6 ;yz <
.word -1
*****************************
.asg 49,X
.asg 27,Y ;23,Y
month_table
.word 2,2*6 ;width, size
;img, xoff, yoff
.word 48,0+4,0*Y, 49,X+2,0*Y ;jan,feb
.word 50,0,1*Y, 51,X,1*Y ;mar,apr
.word 52,0,2*Y, 53,X+2,2*Y ;may,jun
.word 54,0+6,3*Y, 55,X,3*Y ;jul,aug
.word 56,0+5,4*Y, 57,X+1,4*Y ;sep,oct
.word 58,0+3,5*Y, 59,X+1,5*Y ;nov,dec
.word -1
*****************************
; .asg 49+24,X
.asg 73,X
.asg 27,Y ;23,Y
month_table2
.word 2,2*6 ;width, size
;img, xoff, yoff
.word 48,0+4,0*Y, 49,X+2,0*Y ;jan,feb
.word 50,0,1*Y, 51,X,1*Y ;mar,apr
.word 52,0,2*Y, 53,X+2,2*Y ;may,jun
.word 54,0+6,3*Y, 55,X,3*Y ;jul,aug
.word 56,0+5,4*Y, 57,X+1,4*Y ;sep,oct
.word 58,0+3,5*Y, 59,X+1,5*Y ;nov,dec
.word -1
*****************************
.asg 22,X
.asg 22,Y
day_table
.word 4,4*7+3 ;width, size
;img, xoff, yoff
.word 64,0*X+4,0*Y, 65,1*X+3,0*Y, 66,2*X+3,0*Y, 67,3*X+2,0*Y ;1,2,3,4
.word 68,0*X+3,1*Y, 69,1*X+3,1*Y, 70,2*X+3,1*Y, 71,3*X+3,1*Y ;5,6,7,8
.word 72,0*X+3,2*Y, 73,1*X,2*Y, 74,2*X,2*Y, 75,3*X,2*Y ;9,10,11,12
.word 76,0*X,3*Y, 77,1*X,3*Y, 78,2*X,3*Y, 79,3*X,3*Y ;13,14,15,16
.word 80,0*X,4*Y, 81,1*X,4*Y, 82,2*X,4*Y, 83,3*X,4*Y ;17,18,19,20
.word 84,0*X,5*Y, 85,1*X,5*Y, 86,2*X,5*Y, 87,3*X,5*Y ;21,22,23,24
.word 88,0*X,6*Y, 89,1*X,6*Y, 90,2*X,6*Y, 91,3*X,6*Y ;25,26,27,28
.word 92,0*X,7*Y, 93,1*X,7*Y, 94,2*X,7*Y ;29,30,31
.word -1
*****************************
.asg 30,X
.asg 22,Y
day_table2
.word 4,4*7+3 ;width, size
;img, xoff, yoff
.word 64,0*X+4,0*Y, 65,1*X+3,0*Y, 66,2*X+3,0*Y, 67,3*X+2,0*Y ;1,2,3,4
.word 68,0*X+3,1*Y, 69,1*X+3,1*Y, 70,2*X+3,1*Y, 71,3*X+3,1*Y ;5,6,7,8
.word 72,0*X+3,2*Y, 73,1*X,2*Y, 74,2*X,2*Y, 75,3*X,2*Y ;9,10,11,12
.word 76,0*X,3*Y, 77,1*X,3*Y, 78,2*X,3*Y, 79,3*X,3*Y ;13,14,15,16
.word 80,0*X,4*Y, 81,1*X,4*Y, 82,2*X,4*Y, 83,3*X,4*Y ;17,18,19,20
.word 84,0*X,5*Y, 85,1*X,5*Y, 86,2*X,5*Y, 87,3*X,5*Y ;21,22,23,24
.word 88,0*X,6*Y, 89,1*X,6*Y, 90,2*X,6*Y, 91,3*X,6*Y ;25,26,27,28
.word 92,0*X,7*Y, 93,1*X,7*Y, 94,2*X,7*Y ;29,30,31
.word -1
*****************************
alpha_table
.long OSGEMD_A,OSGEMD_B,OSGEMD_C,OSGEMD_D,OSGEMD_E,OSGEMD_F,OSGEMD_G,OSGEMD_H ;0-7
.long OSGEMD_I,OSGEMD_J,OSGEMD_K,OSGEMD_L,OSGEMD_M,OSGEMD_N,OSGEMD_O,OSGEMD_P ;8-15
.long OSGEMD_Q,OSGEMD_R,OSGEMD_S,OSGEMD_T,OSGEMD_U,OSGEMD_V,OSGEMD_W,OSGEMD_X ;16-23
.long OSGEMD_Y,OSGEMD_Z,OSGEMD_EXP,OSGEMD_BAK,OSGEMD_SPC,OSGEMD_DEL,0,0 ;24-31
.long OSGEMD_END,OSGEMD_0,OSGEMD_1,OSGEMD_2,OSGEMD_3,OSGEMD_4,OSGEMD_5,OSGEMD_6 ;32-39
.long OSGEMD_7,OSGEMD_8,OSGEMD_9,0,0,0,0,0 ;40-47
.long MD_JAN,MD_FEB,MD_MAR,MD_APR,MD_MAY,MD_JUN,MD_JUL,MD_AUG ;48-55
.long MD_SEP,MD_OCT,MD_NOV,MD_DEC,0,0,0,0 ;56-63
.long OSGENM_1,OSGENM_2,OSGENM_3,OSGENM_4,OSGENM_5,OSGENM_6,OSGENM_7,OSGENM_8 ;64,71
.long OSGENM_9,OSGENM_10,OSGENM_11,OSGENM_12,OSGENM_13,OSGENM_14,OSGENM_15,OSGENM_16 ;72,79
.long OSGENM_17,OSGENM_18,OSGENM_19,OSGENM_20,OSGENM_21,OSGENM_22,OSGENM_23,OSGENM_24 ;80,87
.long OSGENM_25,OSGENM_26,OSGENM_27,OSGENM_28,OSGENM_29,OSGENM_30,OSGENM_31,0 ;88,95
.long C_ATL ;ATLANTA (96)
.long C_CHAR ;CHARLOTTE
.long C_CHIC ;CHICAGO
.long C_CLEV ;CLEVELAND
.long C_DET ;DETROIT
.long C_IND ;INDIANA
.long C_MILW ;MILWAUKEE
.long C_BOST ;BOSTON (103)
.long C_MIAMI ;MIAMI
.long C_NJ ;NEW JERSEY
.long C_NY ;NEW YORK
.long C_ORL ;ORLANDO
.long C_PHIL ;PHILADELPHIA
.long C_WASH ;WASHINGTON
.long C_GOLD ;GOLDEN STATE (110)
.long C_LAClips ;LOS ANGELES (CLIPPERS)
.long C_LALaks ;LOS ANGELES (LAKERS)
.long C_PHX ;PHOENIX
.long C_PORT ;PORTLAND
.long C_SEA ;SEATTLE
.long C_SAC ;SACRAMENTO
.long C_DAL ;DALLAS (117)
.long C_DEN ;DENVER
.long C_HOU ;HOUSTON
.long C_MINN ;MINNESOTA
.long C_SAN ;SAN ANTONIO
.long C_UTAH ;UTAH (122)
;Use MINN for size?
.long C_MINN ;MINNESOTA
; .long 0 ;123
;logos
.long T_HAWKS ; 0 ATLANTA (124)
.long T_CELTS ; 1 BOSTON
.long T_HORS ; 2 CHARLOTTE
.long T_BULLS ; 3 CHICAGO
.long T_CAVS ; 4 CLEVELAND
.long T_MAVS ; 5 DALLAS
.long T_NUGS ; 6 DENVER
.long T_PISS ; 7 DETROIT
.long T_WARS ; 8 GOLDEN STATE
.long T_ROCKS ; 9 HOUSTON
.long T_PACER ;10 INDIANA
.long T_CLIPS ;11 LOS ANGELES (CLIPPERS)
.long T_LAKS ;12 LOS ANGELES (LAKERS)
.long T_HEAT ;13 MIAMI
.long T_BUCKS ;14 MILWAUKEE
.long T_TWOLV ;15 MINNESOTA
.long T_NETS ;16 NEW JERSEY
.long T_KNIKS ;17 NEW YORK
.long T_MAGIC ;18 ORLANDO
.long T_76RS ;19 PHILADELPHIA
.long T_SUNS ;20 PHOENIX
.long T_BLAZ ;21 PORTLAND
.long T_KINGS ;22 SACRAMENTO
.long T_SPURS ;23 SAN ANTONIO
.long T_SONICS ;24 SEATTLE
.long T_JAZZ ;25 UTAH
.long T_BULTS ;26 WASHINGTON (150)
.long cities1 ;1st city column (151)
.long cities2
.long cities3
.long cities4
city_tbl
.def city_tbl
.long C_ATL ;ATLANTA (96)
.long C_BOST ;BOSTON (103)
.long C_CHAR ;CHARLOTTE
.long C_CHIC ;CHICAGO
.long C_CLEV ;CLEVELAND
.long C_DAL ;DALLAS (117)
.long C_DEN ;DENVER
.long C_DET ;DETROIT
.long C_GOLD ;GOLDEN STATE (110)
.long C_HOU ;HOUSTON
.long C_IND ;INDIANA
.long C_LAClips ;LOS ANGELES (CLIPPERS)
.long C_LALaks ;LOS ANGELES (LAKERS)
.long C_MIAMI ;MIAMI
.long C_MILW ;MILWAUKEE
.long C_MINN ;MINNESOTA
.long C_NJ ;NEW JERSEY
.long C_NY ;NEW YORK
.long C_ORL ;ORLANDO
.long C_PHIL ;PHILADELPHIA
.long C_PHX ;PHOENIX
.long C_PORT ;PORTLAND
.long C_SAC ;SACRAMENTO
.long C_SAN ;SAN ANTONIO
.long C_SEA ;SEATTLE
.long C_UTAH ;UTAH (122)
.long C_WASH ;WASHINGTON
.long C_DET ;DETROIT
fatal_tbl
.word 1 ;ATLANTA (96)
.word 1 ;BOSTON (103)
.word 1 ;CHARLOTTE
.word 0 ;CHICAGO
.word 1 ;CLEVELAND
.word 1 ;DALLAS (117)
.word 1 ;DENVER
.word 0 ;DETROIT
.word 1 ;GOLDEN STATE (110)
.word 0 ;HOUSTON
.word 1 ;INDIANA
.word 1 ;LOS ANGELES (CLIPPERS)
.word 0 ;LOS ANGELES (LAKERS)
.word 1 ;MIAMI
.word 0 ;MILWAUKEE
.word 1 ;MINNESOTA
.word 0 ;NEW JERSEY
.word 0 ;NEW YORK
.word 0 ;ORLANDO
.word 1 ;PHILADELPHIA
.word 1 ;PHOENIX
.word 0 ;PORTLAND
.word 0 ;SACRAMENTO
.word 1 ;SAN ANTONIO
.word 0 ;SEATTLE
.word 0 ;UTAH (122)
.word 1 ;WASHINGTON
logos
.long T_HAWKS ; 0 ATLANTA (124)
.long T_CELTS ; 1 BOSTON
.long T_HORS ; 2 CHARLOTTE
.long T_BULLS ; 3 CHICAGO
.long T_CAVS ; 4 CLEVELAND
.long T_MAVS ; 5 DALLAS
.long T_NUGS ; 6 DENVER
.long T_PISS ; 7 DETROIT
.long T_WARS ; 8 GOLDEN STATE
.long T_ROCKS ; 9 HOUSTON
.long T_PACER ;10 INDIANA
.long T_CLIPS ;11 LOS ANGELES (CLIPPERS)
.long T_LAKS ;12 LOS ANGELES (LAKERS)
.long T_HEAT ;13 MIAMI
.long T_BUCKS ;14 MILWAUKEE
.long T_TWOLV ;15 MINNESOTA
.long T_NETS ;16 NEW JERSEY
.long T_KNIKS ;17 NEW YORK
.long T_MAGIC ;18 ORLANDO
.long T_76RS ;19 PHILADELPHIA
.long T_SUNS ;20 PHOENIX
.long T_BLAZ ;21 PORTLAND
.long T_KINGS ;22 SACRAMENTO
.long T_SPURS ;23 SAN ANTONIO
.long T_SONICS ;24 SEATTLE
.long T_JAZZ ;25 UTAH
.long T_BULTS ;26 WASHINGTON (150)
.long TSMLOGO2 ;27 NBA JAM LOGO
******************************************************************************
name_sort
.long MANNING,AUGMON,WILLIS,BROWN,MCDAN,GAMBLE,JOHNSN_L,HAWKINS
.long MOURN,PIPPEN,ARMSTR,KUKOC,GRANT_HC,PRICE,DAUGHRTY
.long NANCE,JACK,MASH,MUTUMBO,LELLIS
.long ROGERS,THOMAS,DUMARS,ELLIOT,HUNTER,THARDAWAY
.long MULLIN,WEBBER,OLAJUWON,MAXWELL,HORRY,SMITH
.long MILLER,SEALY,SMITS,WILKINS,HARPER_R,ROBERTS
.long PEELER,DIVAC,CAMPBELL,WORTHY,RICE,SEIKALY,MINER
.long BAKER,EDWARDS,DAY,LOHAUS,LAETNER,PERSON,RIDER,COLEMAN,KANDERSON
.long CMORRIS,BENJAMIN,EWING,MASON,STARKS,OAKLEY,HARPER_D
.long AHARDAWAY,NANDERSON,SKILES,WEATH,BRAD
.long BARKLEY,MAJERLE,KJOHNSON,DREXLER,PORTER,CROBINSON
.long GRANT_HV,SIMM,HURL,RICH,TISDALE,WEBB,DROBINSON
.long RODMAN,DELLIS,KEMP,PAYTON,GILL,SCHREMPF,MALONE_K,STOCKTON,BENOIT
.long HORNACEK
.long GUGLI,ELLISON,CHEANEY
.long MALONE_K,KEMP,DROBINSON,BARKLEY,DREXLER,AHARDAWAY,EWING
.long KANDERSON,COLEMAN,NANDERSON,STOCKTON,KJOHNSON,GILL
.long RICH,BRAD,WEBB,DUMARS,STARKS,MUTUMBO,WILKINS
.long HARPER_R,RIDER,MILLER,JOHNSN_L,OLAJUWON,BAKER,ARMSTR,MAXWELL
.long MOURN,RICE,THARDAWAY,JACK,PIPPEN,MINER,THOMAS,WEBBER
.long MASH,WORTHY,MULLIN,MANNING
; .long SCORP,RAIDEN,REPT,SUBZ,HOSK
; .long OLIV,TURMELL,0
team_convert
.word _GOL,_DAL,_ATL,_BOS
.word _LAC,_DEN,_CHA,_MI
.word _LAL,_HOU,_CHI,_NJ
.word _PHX,_MIN,_CLE,_NY
.word _POR,_SAN,_DET,_ORL
.word _SEA,_UTA,_IND,_PHI
.word _SAC,_MK2,_MIL,_WAS
#*****************************************************************************
team_menus
.long #tm1
#tm1
.word 1 ;palette
.word 44,32+TEAMSEL_PAGE ;x,y start
.long city_table ;table
#*****************************************************************************
player1_menus
.long #p1m1
.long #p1m2
.long #p1m3
#p1m1
.word 0 ;palette
.word 0+16,30+NAMENT_PAGE-4 ;x,y start
.long name_table ;table
#p1m2
.word 0 ;palette
.word 0+9,24+NAMENT_PAGE ;x,y start
.long month_table
#p1m3
.word 0 ;palette
.word 0+10,30-12+NAMENT_PAGE ;x,y start
.long day_table
#************
player1k_menus
.long #p1m1k
.long #p1m2k
.long #p1m3k
#p1m1k
.word 0 ;palette
.word 0+16+36,30+NAMENT_PAGE-4 ;x,y start
.long name_table2 ;table
#p1m2k
.word 0 ;palette
.word 0+9+38,24+NAMENT_PAGE ;x,y start
.long month_table2
#p1m3k
.word 0 ;palette
.word 0+10+35,30-12+NAMENT_PAGE ;x,y start
.long day_table2
#************
player2_menus
.long #p2m1
.long #p2m2
.long #p2m3
#p2m1
.word 1 ;palette
.word 100+13,30+NAMENT_PAGE-4 ;x,y start
.long name_table ;table
#p2m2
.word 1 ;palette
.word 100+7,24+NAMENT_PAGE ;x,y start
.long month_table
#p2m3
.word 1 ;palette
.word 100+7,30-12+NAMENT_PAGE ;x,y start
.long day_table
*************
player3_menus
.long #p3m1
.long #p3m2
.long #p3m3
#p3m1
.word 2 ;palette
.word 200+10,30+NAMENT_PAGE-4 ;x,y start
.long name_table
#p3m2
.word 2 ;palette
.word 200+4,24+NAMENT_PAGE ;x,y start
.long month_table
#p3m3
.word 2 ;palette
.word 200+4,30-12+NAMENT_PAGE ;x,y start
.long day_table
*************
player2k_menus
.long #p2m1k
.long #p2m2k
.long #p2m3k
#p2m1k
.word 2 ;palette
.word 200+10+32,30+NAMENT_PAGE-4 ;x,y start
.long name_table2
#p2m2k
.word 2 ;palette
.word 200+4+36,24+NAMENT_PAGE ;x,y start
.long month_table2
#p2m3k
.word 2 ;palette
.word 200+4+34,30-12+NAMENT_PAGE ;x,y start
.long day_table2
*************
player4_menus
.long #p4m1
.long #p4m2
.long #p4m3
#p4m1
.word 3 ;palette
.word 300+6,30+NAMENT_PAGE-4 ;x,y start
.long name_table
#p4m2
.word 3 ;palette
.word 300+1,24+NAMENT_PAGE ;x,y start
.long month_table
#p4m3
.word 3 ;palette
.word 300+1,30-12+NAMENT_PAGE ;x,y start
.long day_table
name_entry_mod
.long teamselBMOD ;team selection map
.word -4,TEAMSEL_PAGE
.long selbackBMOD ;name entry map
.word 0,NAMENT_PAGE
.long namebox2BMOD ;stats box map
.word 9,207+YESNO_PAGE-14
.long yesnoBMOD ;yes/no select map
.word 0,YESNO_PAGE
.long 0
name_entry_kit_mod
.long teamselBMOD ;team selection map
.word -4,TEAMSEL_PAGE
.long selbackkBMOD ;name entry map
.word 0,NAMENT_PAGE
.long nameboxkBMOD ;stats box map
.word 9,207+YESNO_PAGE-14
.long yesnoBMOD ;yes/no select map
.word 0,YESNO_PAGE
.long 0
name_entry2_mod
.long teamselBMOD ;team selection map
.word -4,TEAMSEL_PAGE
.long yesnoBMOD ;yes/no select map
.word 0,NAMENT_PAGE
.long 0
******************************************************************************
#*****************************************************************************
* covers up vertical piece in namebox on selection screens etc...
*
SUBR create_bits
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not2
PUSH a8,a10
movi [98,0],a0 ;x val
movi [197,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movi 150,a3 ;z pos
movi DMACAL|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi #nampal,b0
calla BEGINOBJP2
movi 4,a0
move a0,*a8(OSIZEX)
movk 2,a0
move a0,*a8(OSIZEY)
movi 0101h,a0
move a0,*a8(OCONST)
movi [292,0],a0 ;x val
movi [197,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movi 150,a3 ;z pos
movi DMACAL|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi #nampal,b0
calla BEGINOBJP2
movi 4,a0
move a0,*a8(OSIZEX)
movk 2,a0
move a0,*a8(OSIZEY)
movi 0202h,a0
move a0,*a8(OCONST)
PULL a8,a10
#not2
rets
SUBR create_bits2
callr create_bits
move @TWOPLAYERS,a0 ;0 = NO, 1 = YES 2 players
jrz #not2b
PUSH a8,a10
movi [99,0],a0 ;x val
movi [235,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movi 150,a3 ;z pos
movi DMACAL|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi #nampal,b0
calla BEGINOBJP2
movi 5,a0
move a0,*a8(OSIZEX)
movk 2,a0
move a0,*a8(OSIZEY)
movi 0202h,a0
move a0,*a8(OCONST)
movi [293,0],a0 ;x val
movi [235,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movi 150,a3 ;z pos
movi DMACAL|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi #nampal,b0
calla BEGINOBJP2
movi 5,a0
move a0,*a8(OSIZEX)
movk 2,a0
move a0,*a8(OSIZEY)
movi 0202h,a0
move a0,*a8(OCONST)
movi [98,0],a0 ;x val
movi [243,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movi 150,a3 ;z pos
movi DMACAL|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi #nampal,b0
calla BEGINOBJP2
movi 4,a0
move a0,*a8(OSIZEX)
movk 3,a0
move a0,*a8(OSIZEY)
movi 0303h,a0
move a0,*a8(OCONST)
movi [293,0],a0 ;x val
movi [243,0],a1 ;y val
movi OSGEMD_A,a2 ;* image
movi 150,a3 ;z pos
movi DMACAL|M_SCRNREL,a4 ;DMA flags
clr a5 ;object ID
clr a6 ;x vel
clr a7 ;y vel
movi #nampal,b0
calla BEGINOBJP2
movi 4,a0
move a0,*a8(OSIZEX)
movk 3,a0
move a0,*a8(OSIZEY)
movi 0303h,a0
move a0,*a8(OCONST)
PULL a8,a10
#not2b
rets
RGB .macro R,G,B
.word (:R:<<10) | (:G:<<5) | :B:
.endm
#nampal
.word 4 ;4 colours
RGB 0,0,0 ;background
RGB 2,3,12 ;dark
RGB 12,0,0 ;light
RGB 0,0,0 ;black
SUBR start_teams
clr a0
move a0,@exit_status
move a0,@force_selection
;Temp init
; movk 1,a0
; move a0,@team1
; movk 2,a0
; move a0,@team2
; clr a0
; move a0,@tm1set
; movk 1,a0
; move a0,@tm2set
; movi -1,a0
; move a0,@special_heads
; move a0,@special_heads+10h
; move a0,@special_heads+20h
; move a0,@special_heads+30h
; movk 1,a0
; move a0,@team1_control ;player selecting team 1
; movk 2,a0
; move a0,@gmqrtr
; movk 2,a0
; move a0,@team2_control ;player selecting team 2
; movk 15,a0
; move a0,@PSTATUS
;!
;Just in case someone bought in during game play, and teamx_control had not
;been set!
move @team1_control,a1
jrnn #ok
move @PSTATUS,a0
clr a2
btst 0,a0
jrnz #set
movk 1,a2
btst 1,a0
jrz #ok
#set move a2,@team1_control
#ok
move @team2_control,a1
jrnn #ok2
move @PSTATUS,a0
movk 2,a2
btst 2,a0
jrnz #set2
movk 3,a2
btst 3,a0
jrz #ok2
#set2 move a2,@team2_control
#ok2
move @team1_control,a0
jrnn #noscrambl
movk 5,a0
calla RNDRNG0
move @team1,a14
cmpi _DAL,a14
jrz #bigd
sll 4,a14
addi tm1set,a14
move a0,*a14
#bigd
clr a8
.ref cpu_subs
CREATE0 cpu_subs
#noscrambl
move @team2_control,a0
jrnn #noscrambl2
movk 5,a0
calla RNDRNG0
move @team2,a14
cmpi _DAL,a14
jrz #bigd1
sll 4,a14
addi tm2set,a14
move a0,*a14
#bigd1
movk 1,a8
CREATE0 cpu_subs
#noscrambl2
movk 2,a0
calla create_logos
movk 2,a0
calla create_player_heads
movk 1,a0
calla create_team_set
CREATE0 create_team_set_flsh
calla update_team_set
CREATE0 team1_cursor
CREATE0 team2_cursor
SLEEPK 2
calla update_logos
movk 1,a0
move a0,@fixbug
calla update_player_heads
movi SCROLL_SPEED<<16,a10
JSRP scroll_page
clr a0
move a0,@page_scrolling ;scrolling
calla find_plates ;find bgnd plate objects (for flashing)
calla delete_text
movk 1,a0
move a0,@in_team_select
calla del_offscreen_bobjs
calla create_player_names
calla update_player_names
movi [256,0],a0
calla create_credits
calla update_credits
movi DMAWNZ,a0
movi OBJLST,a1
jruc so20
so10 move a0,*a1(OFLAGS)
so20 move *a1,a1,L
jrnz so10
movi CYCPID,a0
calla KIL1C
;MJT
calla create_bits
JSRP subs_in
.ref setup_speech
calla setup_speech
.ref set_names
calla set_names
RETP
.end